// https://eslint.org/docs/latest/use/configure/configuration-files-new // https://eslint.org/docs/latest/use/configure/migration-guide import js from '@eslint/js'; import globals from 'globals'; import stylistic from '@stylistic/eslint-plugin'; export default [ // https://eslint.org/docs/latest/use/configure/configuration-files-new#globally-ignoring-files-with-ignores // object with just `ignores` applies to all configuration objects // had `ln -s .gitignore .eslintignore` before, but .eslintignore no longer supported { ignores: ['data/**', 'megalinter-reports/**'], }, js.configs.recommended, // TODO still needed? { // files: ['*.js'], languageOptions: { globals: { ...globals.node, ...globals.browser, }, }, plugins: { '@stylistic': stylistic, }, // https://eslint.org/docs/latest/rules/ // https://eslint.style/packages/js rules: { 'no-unused-vars': ['error', { argsIgnorePattern: '^_' }], 'prefer-const': 'error', '@stylistic/array-bracket-newline': ['error', 'consistent'], '@stylistic/array-bracket-spacing': 'error', '@stylistic/array-element-newline': ['error', 'consistent'], '@stylistic/arrow-parens': ['error', 'as-needed'], '@stylistic/arrow-spacing': 'error', '@stylistic/block-spacing': 'error', '@stylistic/brace-style': 'error', '@stylistic/comma-dangle': ['error', 'always-multiline'], '@stylistic/comma-spacing': 'error', '@stylistic/comma-style': 'error', '@stylistic/eol-last': 'error', '@stylistic/func-call-spacing': 'error', '@stylistic/function-paren-newline': ['error', 'consistent'], '@stylistic/implicit-arrow-linebreak': 'error', '@stylistic/indent': ['error', 2], '@stylistic/key-spacing': 'error', '@stylistic/keyword-spacing': 'error', '@stylistic/linebreak-style': 'error', '@stylistic/no-extra-parens': 'error', '@stylistic/no-extra-semi': 'error', '@stylistic/no-mixed-spaces-and-tabs': 'error', '@stylistic/no-multi-spaces': 'error', '@stylistic/no-multiple-empty-lines': 'error', '@stylistic/no-tabs': 'error', '@stylistic/no-trailing-spaces': 'error', '@stylistic/no-whitespace-before-property': 'error', '@stylistic/nonblock-statement-body-position': 'error', '@stylistic/object-curly-newline': 'error', '@stylistic/object-curly-spacing': ['error', 'always'], '@stylistic/object-property-newline': ['error', { allowAllPropertiesOnSameLine: true }], '@stylistic/quote-props': ['error', 'as-needed'], '@stylistic/quotes': ['error', 'single'], '@stylistic/rest-spread-spacing': 'error', '@stylistic/semi': 'error', '@stylistic/semi-spacing': 'error', '@stylistic/semi-style': 'error', '@stylistic/space-before-blocks': 'error', '@stylistic/space-before-function-paren': ['error', { anonymous: 'never', named: 'never', asyncArrow: 'always' }], '@stylistic/space-in-parens': 'error', '@stylistic/space-infix-ops': 'error', '@stylistic/space-unary-ops': 'error', '@stylistic/spaced-comment': 'error', '@stylistic/switch-colon-spacing': 'error', '@stylistic/template-curly-spacing': 'error', '@stylistic/template-tag-spacing': 'error', '@stylistic/wrap-regex': 'error', }, }, ];