BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース ESLint 6.7.0がリリース

ESLint 6.7.0がリリース

原文(投稿日:2020/01/07)へのリンク

JavaScriptの強力なLintツールであるESLintが先頃、バージョン6.7.0をリリースした。今回のリリースでは、手操作によるLint提案を行うSuggestion APIと、ESLintが無視するファイルをコントロールするための"ignorePatterns"設定プロパティが新たに提供されている。

ESLint 6.7.0では、"--fix"コマンドによってコードの実行動作が変更された場合、あるいはルールを修正する有効な方法が複数存在する場合には、"context.resport()"で別の"suggest"選択肢を提供することによる対応が行われる。このオプションを使用すれば、IDEやコードエディタなど他のツールがヘルパを提供して、提案を手作業で選択する操作が可能になる。

開発者はsuggestionオブジェクトの配列を使って、レポート引数に"suggest"キーで提案を埋め込むことができる。suggestionオブジェクトは適用可能な個々の提案を表現するもので、その提案を適用する効果を説明する"desc"キー文字列あるいは"messageId"キーのいずれかと、提案の結果を定義した関数である"fix"キーが必要である。

context.report({
    node: node,
    message: "Unnecessary escape character: \\{{character}}.",
    data: { character },
    suggest: [
        {
            desc: "Remove the `\\`. This maintains the current functionality.",
            fix: function(fixer) {
                return fixer.removeRange(range);
            }
        },
        {
            desc: "Replace the `\\` with `\\\\` to include the actual backslash character.",
            fix: function(fixer) {
                return fixer.insertTextBeforeRange(range, "\\");
            }
        }
    ]
});

"ignorePatterns"オプションをコンフィギュレーションに設定することで、特定のファイルおよびディレクトリを無視するように、ESListに指示することが可能になった。"ignorePatterns"プロパティを導入する前は、特定のファイルおよびディレクトリを無視するために、プロジェクトのルートディレクトリに.estlintignoreファイルを作成する必要があった。"ignorePatterns"プロパティは、コンフィギュレーションファイルのあるディレクトリにのみ有効である。また、.eslintignoreファイルが存在する場合は、その定義がコンフィギュレーションファイルの"ignorePatterns"プロパティをオーバーライドする。

{
    "ignorePatterns": ["temp.js", "node_modules/"],
    "rules": {
        //...
    }
}

これまでのバージョンのESLintでは、setterに戻り値があってもエラーにはならず、その値は無視されていた。しかしながら、setterの戻り値は使用することができないので、不必要であるか、あるいはエラーの可能性がある。

ESLint 6.7.0では"no-setter-return"ルールが導入されて、このようなsetterからの戻り値は不許可となり、setter関数のreturnステートメントがレポートされるようになった。このルールはオブジェクトリテラル、クラス定義、クラス式のsetterをチェックする。

ESLintでは、"no-implicit-globals"ルールによってグローバルスコープの宣言を禁止する。スクリプトで生成されるグローバル変数は他のスクリプトが生成するグローバル変数と名前の衝突を起こす可能性があり、ランタイムエラーや意図しない動作を生み出す原因になるからだ。ESLint 6.7.0ではこのルールが拡張され、"lexicalBinding"をtrueにすることで、"const"、"let"、"class"宣言も同じようにチェックされるようになった。

"lexicalBindings"オプションがtrueの場合に、このルールによって不正コードとなる例を示す。

/*eslint no-implicit-globals: ["error", {"lexicalBindings": false}]*/

const foo = 1;

let baz;

class Bar {}

"lexicalBindings"オプションがtrueの場合に正しいコードは、次のようになる。

/*eslint no-implicit-globals: ["error", {"lexicalBindings": true}]*/

{
    const foo = 1;
    let baz;
    class Bar {}
}

(function() {
    const foo = 1;
    let baz;
    class Bar {}
}());

ES2016で導入された中置べき乗演算子"**"は、標準の `Math.pow`関数の代替となるものだ。ESLint 6.7.0では、"prefer-exponemtiation-operator"ルールは"Math.pow"の使用を不許可とし、"**"演算子を使うように指示するものだ。このルールは"Math.pow"呼び出しを禁止し、代わりに"**"演算子の使用を提案する。

このルールによる不正コードは次のようなものだ。

/*eslint prefer-exponentiation-operator: "error"*/

const foo = Math.pow(2, 8);

const bar = Math.pow(a, b);

let baz = Math.pow(a + b, c + d);

let quux = Math.pow(-1, n);

べき乗演算子ルールでは、以下のコードが正しいものと判断される。

/*eslint prefer-exponentiation-operator: "error"*/

const foo = 2 ** 8;

const bar = a ** b;

let baz = (a + b) ** (c + d);

let quux = (-1) ** n;

新たなルールの追加や既存ルールの拡張以外にも、ESLint 6.7.0リリースでは、過去に発見されたいくつかのバグが修正されている。詳細はESLint 6.7.0 リリースを参照してほしい。

ESLintはOpenJS Foundationのプロジェクトで、MITライセンス下でオープンソースとして提供される。コントリビューションはESLint GitHubレポジトリ経由で受け入れられていて、ESLintコントリビューションガイドラインに準拠する必要がある。

この記事に星をつける

おすすめ度
スタイル

BT