eslint / eslint

Find and fix problems in your JavaScript code.
https://eslint.org
MIT License
24.39k stars 4.4k forks source link

Bug: (Error when opening configuration files, like eslint.config.mjs and.prettierrc) #18406

Closed TheButterflyMon closed 1 week ago

TheButterflyMon commented 2 weeks ago

Environment

Node version: 21.7.3 npm version: 10.5.2 Local ESLint version: 8.57.0 Operating System: Mac OS Sonoma 14.4.1

What parser are you using?

Default (Espree)

What did you do?

My eslint.config.mjs ``` import globals from "globals"; import path from "path"; import { fileURLToPath } from "url"; import { FlatCompat } from "@eslint/eslintrc"; import pluginJs from "@eslint/js"; import eslintConfigPrettier from "eslint-config-prettier"; // mimic CommonJS variables -- not needed if using CommonJS const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const compat = new FlatCompat({baseDirectory: __dirname, recommendedConfig: pluginJs.configs.recommended}); export default [ {languageOptions: { globals: {...globals.browser, ...globals.node} }}, ...compat.extends("airbnb"), eslintConfigPrettier, ]; ```

I tried to lint the eslint.config.mjs file above using ESLint in MacVim with the ALE plugin.

What did you expect to happen?

I'm using MacVim with ALE and using ESLint to lint JavaScript and JSON files. I expect to be able to lint configuration files like eslint.config.mjs and .prettierrc.

What actually happened?

If I open the eslint.config.mjs file posted above , I get an error on line 10, const __filename = fileURLToPath(import.meta.url);. The error says, Parsing Error: Unexpected token import.

This is my .prettierrc:

{
  "bracketSameLine": true
}

If I open the .prettierrc file above or a similar .stylelintrc.json file, I get another error, File ignored because of a matching ignore pattern. Use "--no-ignore" to disable file ignore settings or use "--no-warn-ignored" to suppress this warning.

I can fix the eslint.config.mjs issues by deleting line 16 in my eslint.config.mjs: ...compat.extends("airbnb"),. But if I do this, I lose the Airbnb config for all files I lint, and the issue with files like .prettierrc and .stylelintrc.json is still there! Is there another way to fix these issue?

Link to Minimal Reproducible Example

https://eslint.org/play/#eyJ0ZXh0IjoiaW1wb3J0IGdsb2JhbHMgZnJvbSBcImdsb2JhbHNcIjtcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwidXJsXCI7XG5pbXBvcnQgeyBGbGF0Q29tcGF0IH0gZnJvbSBcIkBlc2xpbnQvZXNsaW50cmNcIjtcbmltcG9ydCBwbHVnaW5KcyBmcm9tIFwiQGVzbGludC9qc1wiO1xuaW1wb3J0IGVzbGludENvbmZpZ1ByZXR0aWVyIGZyb20gXCJlc2xpbnQtY29uZmlnLXByZXR0aWVyXCI7XG5cbi8vIG1pbWljIENvbW1vbkpTIHZhcmlhYmxlcyAtLSBub3QgbmVlZGVkIGlmIHVzaW5nIENvbW1vbkpTXG5jb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKF9fZmlsZW5hbWUpO1xuY29uc3QgY29tcGF0ID0gbmV3IEZsYXRDb21wYXQoe2Jhc2VEaXJlY3Rvcnk6IF9fZGlybmFtZSwgcmVjb21tZW5kZWRDb25maWc6IHBsdWdpbkpzLmNvbmZpZ3MucmVjb21tZW5kZWR9KTtcblxuZXhwb3J0IGRlZmF1bHQgW1xuICB7bGFuZ3VhZ2VPcHRpb25zOiB7IGdsb2JhbHM6IHsuLi5nbG9iYWxzLmJyb3dzZXIsIC4uLmdsb2JhbHMubm9kZX0gfX0sXG4gIC4uLmNvbXBhdC5leHRlbmRzKFwiYWlyYm5iXCIpLFxuICBlc2xpbnRDb25maWdQcmV0dGllcixcbl07XG4iLCJvcHRpb25zIjp7InJ1bGVzIjp7ImNvbnN0cnVjdG9yLXN1cGVyIjpbImVycm9yIl0sImZvci1kaXJlY3Rpb24iOlsiZXJyb3IiXSwiZ2V0dGVyLXJldHVybiI6WyJlcnJvciJdLCJuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yIjpbImVycm9yIl0sIm5vLWNhc2UtZGVjbGFyYXRpb25zIjpbImVycm9yIl0sIm5vLWNsYXNzLWFzc2lnbiI6WyJlcnJvciJdLCJuby1jb21wYXJlLW5lZy16ZXJvIjpbImVycm9yIl0sIm5vLWNvbmQtYXNzaWduIjpbImVycm9yIl0sIm5vLWNvbnN0LWFzc2lnbiI6WyJlcnJvciJdLCJuby1jb25zdGFudC1iaW5hcnktZXhwcmVzc2lvbiI6WyJlcnJvciJdLCJuby1jb25zdGFudC1jb25kaXRpb24iOlsiZXJyb3IiXSwibm8tY29udHJvbC1yZWdleCI6WyJlcnJvciJdLCJuby1kZWJ1Z2dlciI6WyJlcnJvciJdLCJuby1kZWxldGUtdmFyIjpbImVycm9yIl0sIm5vLWR1cGUtYXJncyI6WyJlcnJvciJdLCJuby1kdXBlLWNsYXNzLW1lbWJlcnMiOlsiZXJyb3IiXSwibm8tZHVwZS1lbHNlLWlmIjpbImVycm9yIl0sIm5vLWR1cGUta2V5cyI6WyJlcnJvciJdLCJuby1kdXBsaWNhdGUtY2FzZSI6WyJlcnJvciJdLCJuby1lbXB0eSI6WyJlcnJvciJdLCJuby1lbXB0eS1jaGFyYWN0ZXItY2xhc3MiOlsiZXJyb3IiXSwibm8tZW1wdHktcGF0dGVybiI6WyJlcnJvciJdLCJuby1lbXB0eS1zdGF0aWMtYmxvY2siOlsiZXJyb3IiXSwibm8tZXgtYXNzaWduIjpbImVycm9yIl0sIm5vLWV4dHJhLWJvb2xlYW4tY2FzdCI6WyJlcnJvciJdLCJuby1mYWxsdGhyb3VnaCI6WyJlcnJvciJdLCJuby1mdW5jLWFzc2lnbiI6WyJlcnJvciJdLCJuby1nbG9iYWwtYXNzaWduIjpbImVycm9yIl0sIm5vLWltcG9ydC1hc3NpZ24iOlsiZXJyb3IiXSwibm8taW52YWxpZC1yZWdleHAiOlsiZXJyb3IiXSwibm8taXJyZWd1bGFyLXdoaXRlc3BhY2UiOlsiZXJyb3IiXSwibm8tbG9zcy1vZi1wcmVjaXNpb24iOlsiZXJyb3IiXSwibm8tbWlzbGVhZGluZy1jaGFyYWN0ZXItY2xhc3MiOlsiZXJyb3IiXSwibm8tbmV3LW5hdGl2ZS1ub25jb25zdHJ1Y3RvciI6WyJlcnJvciJdLCJuby1ub25vY3RhbC1kZWNpbWFsLWVzY2FwZSI6WyJlcnJvciJdLCJuby1vYmotY2FsbHMiOlsiZXJyb3IiXSwibm8tb2N0YWwiOlsiZXJyb3IiXSwibm8tcHJvdG90eXBlLWJ1aWx0aW5zIjpbImVycm9yIl0sIm5vLXJlZGVjbGFyZSI6WyJlcnJvciJdLCJuby1yZWdleC1zcGFjZXMiOlsiZXJyb3IiXSwibm8tc2VsZi1hc3NpZ24iOlsiZXJyb3IiXSwibm8tc2V0dGVyLXJldHVybiI6WyJlcnJvciJdLCJuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lcyI6WyJlcnJvciJdLCJuby1zcGFyc2UtYXJyYXlzIjpbImVycm9yIl0sIm5vLXRoaXMtYmVmb3JlLXN1cGVyIjpbImVycm9yIl0sIm5vLXVuZGVmIjpbImVycm9yIl0sIm5vLXVuZXhwZWN0ZWQtbXVsdGlsaW5lIjpbImVycm9yIl0sIm5vLXVucmVhY2hhYmxlIjpbImVycm9yIl0sIm5vLXVuc2FmZS1maW5hbGx5IjpbImVycm9yIl0sIm5vLXVuc2FmZS1uZWdhdGlvbiI6WyJlcnJvciJdLCJuby11bnNhZmUtb3B0aW9uYWwtY2hhaW5pbmciOlsiZXJyb3IiXSwibm8tdW51c2VkLWxhYmVscyI6WyJlcnJvciJdLCJuby11bnVzZWQtcHJpdmF0ZS1jbGFzcy1tZW1iZXJzIjpbImVycm9yIl0sIm5vLXVudXNlZC12YXJzIjpbImVycm9yIl0sIm5vLXVzZWxlc3MtYmFja3JlZmVyZW5jZSI6WyJlcnJvciJdLCJuby11c2VsZXNzLWNhdGNoIjpbImVycm9yIl0sIm5vLXVzZWxlc3MtZXNjYXBlIjpbImVycm9yIl0sIm5vLXdpdGgiOlsiZXJyb3IiXSwicmVxdWlyZS15aWVsZCI6WyJlcnJvciJdLCJ1c2UtaXNuYW4iOlsiZXJyb3IiXSwidmFsaWQtdHlwZW9mIjpbImVycm9yIl19LCJsYW5ndWFnZU9wdGlvbnMiOnsicGFyc2VyT3B0aW9ucyI6eyJlY21hRmVhdHVyZXMiOnt9fX19fQ==

Participation

Additional comments

No response

Tanujkanti4441 commented 2 weeks ago

Hi @TheButterflyMon, thanks for the issue.

I noticed that error does not occur in ES version 2020 or more and airbnb has ecmaVersion: 2018 in their configuration setting the ecmaVersion to 2020 or more can solve the issue probably. Let us know if this works.

TheButterflyMon commented 2 weeks ago

I uninstalled and reinstalled everything. Here are the new version numbers: Node version: 20.12.2 npm version: 10.7.0

I also uninstalled and reinstalled ESLint. The version number is the same, but this time it did not ask me to define a style for my project. Here is what it asked me:

✔ How would you like to use ESLint? · problems
✔ What type of modules does your project use? · esm
✔ Which framework does your project use? · react
✔ Does your project use TypeScript? · javascript
✔ Where does your code run? · browser, node
The config that you've selected requires the following dependencies:

globals, @eslint/js, eslint-plugin-react, eslint
✔ Would you like to install them now? · No / Yes
✔ Which package manager do you want to use? · npm

The error, Parsing Error: Unexpected token import is gone, but the File ignored because of a matching ignore pattern. Use "--no-ignore" to disable file ignore settings ... is still there in all configuration files I open, like .prettierrc and .stylelintrc.json. I don't have a .eslintignore file and I'm not ignoring anything. I've even added --no-ignore to my ALE options, let g:ale_javascript_eslint_options = '--no-ignore'.

Here's my new eslint.config.mjs file:

import globals from "globals";
import pluginJs from "@eslint/js";
import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
import eslintConfigPrettier from "eslint-config-prettier";

export default [
  {languageOptions: { globals: {...globals.browser, ...globals.node} }},
  pluginJs.configs.recommended,
  pluginReactConfig,
  eslintConfigPrettier
];