ESLintでParsing error…となった時の対応 parserOptionsを設定する
はじめに
こんにちは、SHIFT の開発部門に所属している Katayama です。
ES6 クラスを実装している時、ESLint で"Parsing error: Unexpected token ="というエラーが出ました。今回はその解決方法とエラーが出ていた原因についてみていきたいと思います。
エラーが出ていたソースコードの一部は以下です。
export default class User extends BaseModel {
tableName = 'user';
...
解決方法
解決方法としては簡単で、".eslintrc.json"に以下のように parserOptions に ecmaVersion": 13 を指定するだけ。
{
"env": {
"es2022": true
},
...
"parserOptions": {
"ecmaVersion": 13
},
...
}
※ちなみに、ESLint の公式を見る限り、以下のように書かれているので、env に es2022 を指定すれば、暗黙的に parserOptions に"ecmaVersion": 13 が指定されると思ったが、そういう動きにはなっていなかった…。ESLint の version の問題かもしれないが。
{
"env": {
"es2022": true
},
...
}
※手元の ESLint の version は 8.15.0
// yarn.lock
eslint@^8.15.0:
version "8.15.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.15.0.tgz#fea1d55a7062da48d82600d2e0974c55612a11e9"
...
なぜ上記の方法で解決できるのか?
上記の解決方法で解決できる理由についてみていく。
今回、ESLint でエラー(Parsing error: Unexpected token =)が出ていたのは、ES6 クラスの実装における以下の部分だった。
tableName = 'user';
この実装はパブリッククラスフィールドと呼ばれる構文機能であり、この構文自体はECMAScript 6 compatibility tableに書かれているように es2022 から利用できるようになったものである。
そのため、ESLint の parserOptions の ecmaVersion に 13(ESLint ではes2022 は 13 にあたる)を指定しないと ESLint が Javascript を解釈する時にその構文が es2022 のものであると分からず、エラーになってしまう(公式に" By default, ESLint expects ECMAScript 5 syntax."と書かれている通り、ESLint は ES5 の構文である事を想定する)。
※Specifying Parserに書かれているような@babel/eslint-parserを利用して、今回のような"Parsing error:"を解決するアプローチもあるが、既にECMAScriptの仕様として実装されている(今回だと instance class fields の public instance class fields)のであれば、@babel/eslint-parser の Note に書かれているように、(特別な事情がない限りは)ESLint の parserOptions を指定してエラーの解決をする事になる(以下、@babel/eslint-parser からの引用)。
まとめとして
今回は ESLint で"Parsing error: ・・・"となった時の解決方法についてみてきた。既に Javascript の仕様として追加されているものであれば ESLint に備わっている parserOptions でエラーの解消はできるが、実験的な仕様については今回のような解決方法はうまくいかない。
次回は実験的な仕様(例えば、2022 年 5 月現在のECMAScript throw expressions)の実装を行う方法と、その際に出る ESLint のエラーの解決方法について見ていきたいと思う。
《この公式ブロガーの記事一覧》
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/