0

ストーリー:はESLint内のすべての宣言された変数をキャッチ

現在

、私は変数があるすべての場所をキャッチする特定ESLintルール(link)を開発していますそのビルトイン分度器グローバル変数(browserまたはelementなど)。ここで

は、ルールが現時点でどのように見えるかです:あなたが見ることができるように

module.exports = function (context) { 
    var protractorGlobals = [ 
    'browser', 
    'protractor', 
    'element', 
    'by', 
    '$', 
    '$$' 
    ] 

    function checkVariables (node) { 
    var variables = context.getDeclaredVariables(node) 
    for (var i = 0; i < variables.length; ++i) { 
     if (protractorGlobals.indexOf(variables[i].name) !== -1) { 
     context.report(node, 'Unexpected Protractor built-in global variable shadowing') 
     } 
    } 
    } 

    return { 
    'VariableDeclaration': checkVariables, 
    'FunctionDeclaration': checkVariables, 
    'FunctionExpression': checkVariables, 
    'CatchClause': checkVariables 
    } 
} 

、私は、すべての変数と関数の宣言を探している関数式、catch句と、以下の場合をカバーする文を切り替えています:

​​

質問:

は、私は新しいヴァリアーすべての場所をカバーしていますbleは現在のスコープに導入されていますか? より一般的な方法は、推測せずにコード内の任意の場所に変数を宣言し、それらを探す場所を明示的に定義しますか?

+1

これがあなたと関連しているかどうかは不明ですが、文字列関数作成関数constructors、eval、setTimeout、およびsetIntervalをチェックしたい場合があります。これが簡単にeslintで可能かどうかは確かではありません。 – nils

答えて

1

ES6をサポートしている場合は、import宣言がありません。しかし、これをやや簡単に行う方法があります。 ESLintは、変数宣言と使用法を追跡するために、フードの下でEscopeというパッケージを使用します。アクセスする方法についてはno-redeclareルールを参照し、APIについてはのドキュメントを参照してください。 Escopeは、現在のスコープ内のすべての変数をチェックし、すでに存在する変数を再宣言しているかどうかを確認する必要があります。

関連する問題