javascript
javascript copied to clipboard
Issue with eslint-config-airbnb-base and `optional chaining` operator
Issue with eslint-config-airbnb-base
and optional chaining operator ?.
(JavaScript)
// .eslintrc.js
module.exports = {
env: { es2021: true },
extends: [ 'airbnb-base' ]
};
const o = {};
const a = o?.a;
For the above code, ESLint reports Parsing error: Unexpected token
at the optional chaining operator ?.
ESLint rules for optional chaining should work with parserOption: {ecmaVersion: 2020}
or higher and which eslint automatically sets because env: {es2021: true}
is used in the config above.
However when airbnb-base
is used, an explicit parserOption: ecmaVersion: 12
seems to be required to resolve the above issue as such:
// .eslintrc.js
module.exports = {
env: { es2021: true },
extends: [ 'airbnb-base' ],
parserOptions: { ecmaVersion: 12 }
};
(Note: ecmaVersion: 11 should also work)
The error does not occur without airbnb-base as below:
// .eslintrc.js
module.exports = {
env: { es2021: true }
};
Although the fix is simply to explicitly state ecmaVersion
it can take a while to figure out that the Parsing error: Unexpected token
is because of airbnb-base.
When this issue occors, all other lint errors in the file are not reported which means eslint stops working!
For a better developer experience, this issue could be looked into or documented well.
The above issue occurred with:
Local ESLint version: ^8.7.0
Global ESLint version: ^8.7.0
Node version: v14.17.3
npm version: 6.14.13
Operating System: Linux
Does babel-preset-airbnb transform that yet? If so, then https://github.com/airbnb/javascript/blob/b4377fb03089dd7f08955242695860d47f9caab4/packages/eslint-config-airbnb-base/index.js#L13 can be updated.
Hello, I'm wondering if it's possible for people who are not part of the project to contribute. If the answer is yes, could you please provide guidance on how to do so?
@Vivek-04022001 yes, just look for issues that have a "pull request wanted" label.
okay thanks
Hello,
I'm having the same issue with eslint-config-airbnb
.
Also, when using the option:
-
"env": { "shared-node-browser": true}
It does not recognize browser global variables like document
.
This issue does not happen if I remove airbnb
from my extends
configuration.
@branzdev we don't set that env value so i'm not sure why that would affect it. what's your eslint config?
I am also having to add parserOptions: { ecmaVersion: 12 }
, any developments on this topic?
@martijnhjk thats expected pending https://github.com/airbnb/javascript/issues/2541#issuecomment-1014722030
@ljharb I am not sure I understand. That comment was made over a year and a half ago. Will the ecmaVersion
be updated in the config? Or is overriding parserOptions
the final recommended practice?
Time doesn’t change whether it’s correct.
Overriding parserOptions is the current only option, and nothing is final.