eslint が修正をサポートしていることはわかっています。--fix パラメータを追加すると、いくつかのルールによって問題が自動的に修正されます。 この機能がどのように実装されているのか疑問に思ったことはありませんか? Babel もコードを変換できます。eslint と同じように動作しますか? バベルBabel は解析、変換、生成の 3 つのステップに分かれています。 変換フェーズで AST コードが変換された後、生成フェーズで AST がターゲット コードに再帰的に印刷されます。 生成の原理は、各 AST の情報に基づいて文字列を再帰的に連結することです。 したがって、プラグイン内の AST を変更すると、最終的なコードも変更されます。 エスリントeslint ルールは AST をチェックし、context.report を通じてエラーを報告し、その修正方法を指定できます。 カスタム ルールの形式は次のとおりです。
修正オプションは、修正 API を通じて問題を自動的に修正するために使用されます。 フィクサーには次の API が用意されています。
覚えるのはとても簡単です。追加、削除、変更の 3 つのカテゴリがあります。追加は、前方への挿入と後方への挿入に分かれています。各カテゴリは、トークンに基づいて、または範囲 (下付き範囲) に基づいてテキストを変更することをサポートしています。 AST 内の各ノードは範囲情報、つまりソース コード内のどこからどこまでの添え字を保持しているため、範囲に応じてコードを変更したり、AST に従って範囲を見つけた後にコードを変更したりすることができます。 では、範囲に対してどのような操作を実行するかがわかったら、コードを自動的に変更するにはどうすればよいでしょうか? 以下は eslint の修正コードのソース コードです。
最も興味深い点の 1 つは、両端の範囲が交差するときです。 各修正は、線分(範囲)内のテキストの修復です。交差点をどのように処理するかは、実際に候補者を評価するためのアルゴリズムの質問として使用できます。 左から右に修正を適用し、現在の rangeRight を記録します。次のセグメントを適用するときは、rangeLeft の最大値と前の rangeRight を rangeLeft として取得します。 この問題を抽象化した後でも、これは比較的興味深いアルゴリズムの問題です。面接に適しており、実際の応用シナリオがあると思います。 話を元に戻すと、fix 関数の実装は、各範囲で変更されたテキストを結合し、ソース コード文字列を置き換えることです。 要約するbabel と eslint はどちらもコードを修正できます。Babel は AST 上で動作し、コードを印刷するときに異なるコードを生成しますが、eslint はいくつかのルールの自動修正をサポートしています。--fix をオンにすると、自動的に修正されます。 babel コード生成の原則は、AST を再帰的に出力して文字列を連結することであるため、AST が変更されると、生成されたコードも変更されます。 eslint のコード修復ロジックは、特定の範囲のテキストを置き換えてから結合することです。これは AST とは関係がないため、eslint の fix 関数はオプションです。 さらに興味深いのは、eslint の複数のルールによって返される複数の範囲に対する変更が、コードの変更にどのように適用されるか、交差があった場合はどうするかです。この質問は、面接対象者をテストするためのアルゴリズムの質問として使用できると思います。 |
<<: 数十人の国内NLP専門家が協力し、事前学習済みモデルの過去、現在、未来を検討した。
>>: ロボティックプロセスオートメーションが人々の働き方をどのように変えているのか
英国政府は11月2日、国の人工知能能力をさらに強化するため、人工知能研究資源への投資を2023年3月...
[[422888]]みなさんこんにちは。私は梁唐です。最近、多くの新人がアルゴリズム エンジニアに...
技術が急速に進歩する時代において、私たちと建築との関係は大きな変化を遂げています。もはやレンガやモル...
7月14日、国際的に権威のある調査機関IDC(International Data Corporat...
Amapは本日、車載ARナビゲーションを共同で立ち上げるためにDAMOアカデミーと協力関係を結んだと...
なぜ良いチャットボットがないのでしょうか? これは私がかなり頻繁に、おそらく平均して週に 2 回は聞...
チップ業界では、Armとx86が現在の主流のアーキテクチャであり、オープンなRSIC-Vが将来の方向...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
最適化はあらゆる分野で重要です。一部の最適化は初期化から始まり、その後ソリューションを繰り返し更新し...
インテリジェントな個別指導システムは、代数や文法などの特定の科目の指導に効果的であることが証明されて...
Docker ネットワーク管理は、コンテナをホストに接続し、Docker コンテナ環境での通信とネッ...
昨日、北京冬季オリンピックはブラックテクノロジーでいっぱいだとネットユーザーが言っているのを見ました...