Unexpected top-level property “ecmaFeatures”

VS Codeでのエラー


少し前に Sublime Text 2 から Visual Studio Code (VS Code) に乗り換えました。
VSCodeが出てすぐに使ったことはあったのですが、当初はどうにも使いづらくてほったらかしにしていました。
最近何気なしにVSCodeを使ってみると、ずいぶんと使いやすくなっている。見た目も良くなっているし、拡張機能もたくさん出ていた。
 
そして、いざ乗り換えようと使っていたら、JavaScriptファイルを編集すると、やたらと「Unexpected top-level property “ecmaFeatures”」が出る。
 
 

エラーが出るのはES Lint


ES-Lintを使っているんですが、どうもエラーはこのプラグインから出ている。
setting.jsonをいじっても、プロジェクトの.eslintrc.jsonをいじっても、全然エラーが鳴りやまない。
ecmaFeaturesの指定を消しても、挙句の果てに全部の設定を消しても出てくるという状態。
 
 

犯人はユーザーディレクトリの .eslintrc


大混乱の中、以下の記述を見付けた。

Maybe this will be helpful for someone: in my case wrong .eslintrc has been located in c:\Users\[username]\ directory (.tslintrc, .coffeelintrc and .csslintrc also been there – i think that these files were created automatically after esint installation).

Looks like eslint loaded it first and failed. After removing this file eslint works fine.

https://github.com/eslint/eslint/issues/8726
 
c:\users\{username}\.eslintrc…だと?
 
確かに存在しており、「ecmaFeatures」がトップレベルでプロパティ定義されていた。
…昔に使ったときに設定されたファイルだろうか。
 
どうやら、ES-Lintがバージョンアップされ、ecmaFeaturesがparserOptionsになったが、このユーザーフォルダ直下のファイルの中身が昔の状態のまま放置されていたことが原因のようだ。
ecmaFeaturesをparserOptionsに書き換えて解決。

1. Remove all ecmaFeatures that are specific to ES6. Replace with ecmaVersion. Things like globalReturn, jsx, and experimental features would remain. This would also be a change in Espree.

2. Introduce sourceType that is “script” by default and can be set to “module”.

3. Move these fields into a new parserOptions field in configuration.

https://github.com/eslint/eslint/issues/4641