トップ/記事一覧
eslint-plugin-strict-dependencies のコードリーディング
📆2022/10/11(最終更新日:2022/10/13)🔖 ESLint
背景・やったこと
React+TSプロジェクトで便利だったLint/Format設定紹介 の依存関係のチェックの章を読んで、便利だなと思った反面、どういう仕組みで動かしているのか全く想像も付かなかったのでインプットしようと思ったのがきっかけ。自分たちのプロダクトにも導入したいルールだが導入するにしてもどういう仕組みで動いているのかきちんと理解できていないとあまり良くないし、自前で書けるなら自前で書いた方が依存を減らせて良いかなと思ってインプットをした。
メモを取りながらインプットしたので、そのままインプットの時系列順に書いていく。
Eslint の plugin についてのインプット
JavaScript
{ "plugins": [ "plugin1" ], "rules": { "eqeqeq": "off", "curly": "error", "quotes": ["error", "double"], "plugin1/rule1": "error" } }
eslint-plugin-strict-dependencies について
JavaScript
"rules": { "strict-dependencies/strict-dependencies": [ "error", [ { "module": "src/components/page", "allowReferenceFrom": ["src/pages"], // components/page can't import other components/page "allowSameModule": false }, ] ] }
eslint-plugin-strict-dependencies のコードリーディング
改めて整理すると、イシューとしては「Linter ルールをこのプラグインを使わず書けるかどうか」なるべく外部モジュールには依存しない方が良いという方針があるという前提。外部のプラグイン使わずに設定できるものであるならば抽象化されたものを使わず自前で記述してしまおうという考えでコードリーディングしていく。
eslint のルール(create 周り)の仕様のインプット
create (function) returns an object with methods that ESLint calls to “visit” nodes while traversing the abstract syntax tree (AST as defined by ESTree) of JavaScript code:if a key is a node type or a selector, ESLint calls that visitor function while going down the tree if a key is a node type or a selector plus :exit, ESLint calls that visitor function while going up the tree if a key is an event name, ESLint calls that handler function for code path analysis
改めて、eslint-plugin-strict-dependencies のコードリーディング
少しインプットできたので戻る。
ようやく「読める……読めるぞ……」になった。
結論
結局自前で書くにしてもルールファイルは書かないといけないし、glob パターン対応周りとかもありがたいので、プラグイン使わせてもらった方が良さそうな気がする。便利なものを作ってくれてありがとうございますのお気持ち。
🐈
(*1) AST Explorer なるサイトがあったので、そこに import 文を追記して試してみて ImportDeclaration という文字列を発見。AST に初めて触れた。