検索

ホームページ  >  に質問  >  本文

ヘルパー関数がまだインポートされていない場合はインポート宣言を追加: カスタム ESLint ルールの修正による強化されたソリューション

変数関数呼び出し、特に foo.value.toString() をヘルパー関数 getStringValue(foo) に置き換えたいユースケースがあります。見つかった場合は、その修正を使用して CallExpression ノードのテキストを置き換えることができるため、現在のルール修正は次のようになります:

リーリー

この方法でこのエラーを自動的に修正する場合の問題は、getStringValue がファイルにインポートされている場合とされていない場合があることです。この修正により次の動作が行われるようにしたいです:

  1. 関数がファイルにインポートされている場合、追加のアクションは必要ありません。
  2. 関数がインポートされていないが、それに含まれるファイル モジュールがインポートされている場合は、この関数をモジュールのインポートに追加してください。
  3. 関数もそれに含まれるファイル モジュールもインポートされていない場合は、関数と一緒にモジュールをインポートします。

ドキュメントから理解する限り、fixer または context オブジェクトを使用してルート ESTree ノードにアクセスする簡単な方法はありません。最も近いのは SourceCode.getText() です。これは、インポートを解決するためにソース テキストを解析する必要があることを意味します。むしろ AST 全体と直接やり取りしたいと考えています。この自動インポート プロセスを実行する最良の方法は何ですか?

P粉312195700P粉312195700242日前328

全員に返信(2)返信します

  • P粉596161915

    P粉5961619152024-03-29 00:56:42

    ここで少し安全でない場合は、ユーザーが getStringValue 関数をファイル内でローカルに再定義していないと仮定することができます (このルールが適用されるコードベースがある場合、通常は安全な仮定です)。 。

    この場合、最良の方法は、セレクターを使用してインポートを確認することです。例:

    リーリー

    返事
    0
  • P粉098979048

    P粉0989790482024-03-29 00:43:02

    context オブジェクトから AST ルート ノードを抽出する簡単な方法があることがわかりました。これは context.getSourceCode().ast にあります。次のロジックで修正を書き直しました:

    リーリー

    返事
    0
  • キャンセル返事