Kelly Selden
Kelly Selden

Reputation: 1276

eslint disable extends in override

In the case where you have an override where you want to "downgrade" the js parser, how do you turn off the extends from the parent? parserOptions is easy to override because it is key-based. extends as an empty array does nothing, as it tries to append an empty list to the original. If you set it to null, you get a config parser error.

module.exports = {
  root: true,
  parserOptions: {
    ecmaVersion: 2018,
    sourceType: 'module'
  },
  extends: [
    'eslint:recommended'
  ],
  overrides: [
    {
      files: ['vendor/**/*.js'],
      parserOptions: {
        ecmaVersion: 5,
        sourceType: 'script'
      },
      extends: [] // I want 'eslint:recommended' removed.
    }
  ]
};

The workaround involves looping over any extended rulesets and turning them all off.

module.exports = {
  root: true,
  parserOptions: {
    ecmaVersion: 2018,
    sourceType: 'module'
  },
  extends: [
    'eslint:recommended'
  ],
  overrides: [
    {
      files: ['vendor/**/*.js'],
      parserOptions: {
        ecmaVersion: 5,
        sourceType: 'script'
      },
      rules: Object.keys(require(path.resolve(path.dirname(require.resolve('eslint')), '../conf/eslint-recommended')).rules).reduce((rules, rule) => {
        rules[rule] = 0;
        return rules;
      }, {})
    }
  ]
};

Is there a cleaner way to do this?

Upvotes: 22

Views: 12058

Answers (2)

n0099
n0099

Reputation: 1363

With ESLint v9 flat config:

const extend = [
    eslintJs.configs.recommended,
];

export default [{
    files: ['**/*.js'],
    excludedFiles: 'vendor/**/*.js',
    ...Object.assign({}, ...extend)
}, {
    files: ['vendor/**/*.js'],
}];

Upvotes: 0

plasticrake
plasticrake

Reputation: 228

Here are two ways to accomplish this:

  1. Separate files: You can place a different .eslintrc.js file inside vendor/ with root: true. That will ignore the .eslintrc.js at your project root.

  2. Separate overrides:

module.exports = {
  root: true,
  overrides: [
    {
      files: ['*.js'],
      excludedFiles: 'vendor/**/*.js',
      // OR
      // files: ['src/**/*.js']
      parserOptions: {
        ecmaVersion: 2018,
        sourceType: 'module',
      },
      extends: ['eslint:recommended'],
    },
    {
      files: ['vendor/**/*.js'],
      parserOptions: {
        ecmaVersion: 5,
        sourceType: 'script',
      },
    },
  ],
};

Upvotes: 21

Related Questions