diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 70e4dd7d3..66f6af0e8 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -26,8 +26,18 @@ jobs: name: Test strategy: matrix: - node: [17, 18, 20] + node: [18, 20] os: [ubuntu-latest] + eslint: [8] + include: + # On next ESLint version + - eslint: ^9.0.0-0 + node: 20 + os: ubuntu-latest + # On old Node version + - eslint: 8 + node: 17 + os: ubuntu-latest runs-on: ${{ matrix.os }} steps: @@ -39,6 +49,8 @@ jobs: node-version: ${{ matrix.node }} - name: Install Packages run: npm install --legacy-peer-deps + - name: Install ESLint v${{ matrix.eslint }} + run: npm install --save-dev eslint@${{ matrix.eslint }} --legacy-peer-deps - name: Test run: npm test diff --git a/lib/utils/index.js b/lib/utils/index.js index 4fec4e1fa..d43541888 100644 --- a/lib/utils/index.js +++ b/lib/utils/index.js @@ -673,6 +673,7 @@ module.exports = { */ wrapCoreRule, wrapStylisticOrCoreRule, + getCoreRule, /** * Checks whether the given value is defined. * @template T diff --git a/tests/eslint-compat.js b/tests/eslint-compat.js index 86b16265d..d05bc12a4 100644 --- a/tests/eslint-compat.js +++ b/tests/eslint-compat.js @@ -1,15 +1,66 @@ // @ts-check const eslint = require('eslint') +const semver = require('semver') + +let ESLint = eslint.ESLint +let Linter = eslint.Linter +let RuleTester = eslint.RuleTester +if (semver.lt(eslint.Linter.version, '9.0.0-0')) { + ESLint = eslint.ESLint ? getESLintClassForV8() : getESLintClassForV6() + Linter = getLinterClassForV8() + RuleTester = getRuleTesterClassForV8() +} module.exports = { - ESLint: eslint.ESLint || getESLintClassForV6(), - RuleTester: eslint.RuleTester + ESLint, + RuleTester, + Linter } +/** @returns {typeof eslint.ESLint} */ +function getESLintClassForV8(BaseESLintClass = eslint.ESLint) { + return class ESLintForV8 extends BaseESLintClass { + static get version() { + return BaseESLintClass.version + } + constructor(options) { + super(adjustOptions(options)) + } + } + + // eslint-disable-next-line unicorn/consistent-function-scoping + function adjustOptions(options) { + const newOptions = { + ...options, + useEslintrc: false + } + if (newOptions.overrideConfig) { + newOptions.overrideConfig = { ...newOptions.overrideConfig } + let plugins + if (newOptions.overrideConfig.plugins) { + plugins = newOptions.overrideConfig.plugins + delete newOptions.overrideConfig.plugins + } + newOptions.overrideConfig = processCompatibleConfig( + newOptions.overrideConfig + ) + if (plugins) { + newOptions.overrideConfig.plugins = Object.keys(plugins) + newOptions.plugins = plugins + } + + // adjust + delete newOptions.overrideConfig.files + delete newOptions.overrideConfig.processor + } + return newOptions + } +} /** @returns {typeof eslint.ESLint} */ function getESLintClassForV6() { class ESLintForV6 { static get version() { + // @ts-expect-error return eslint.CLIEngine.version } @@ -26,7 +77,7 @@ function getESLintClassForV6() { plugins: pluginsMap, ...otherOptions } = options || {} - /** @type {eslint.CLIEngine.Options} */ + const newOptions = { fix: Boolean(fix), reportUnusedDisableDirectives: reportUnusedDisableDirectives @@ -47,6 +98,8 @@ function getESLintClassForV6() { : undefined, ...overrideConfig } + + // @ts-expect-error this.engine = new eslint.CLIEngine(newOptions) for (const [name, plugin] of Object.entries(pluginsMap || {})) { @@ -59,12 +112,105 @@ function getESLintClassForV6() { * @returns {ReturnType} */ async lintText(...params) { - const result = this.engine.executeOnText(params[0], params[1].filePath) + const result = this.engine.executeOnText(params[0], params[1]?.filePath) return result.results } } /** @type {typeof eslint.ESLint} */ const eslintClass = /** @type {any} */ (ESLintForV6) - return eslintClass + return getESLintClassForV8(eslintClass) +} + +/** @returns {typeof eslint.Linter} */ +function getLinterClassForV8() { + return class LinterForV8 extends eslint.Linter { + static get version() { + return eslint.Linter.version + } + verify(code, config, option) { + return super.verify(code, processCompatibleConfig(config, this), option) + } + } +} + +function getRuleTesterClassForV8() { + return class RuleTesterForV8 extends eslint.RuleTester { + constructor(options) { + const defineRules = [] + super( + processCompatibleConfig(options, { + defineRule(...args) { + defineRules.push(args) + } + }) + ) + for (const args of defineRules) { + // @ts-expect-error + this.linter.defineRule(...args) + } + } + run(name, rule, tests) { + super.run(name, rule, { + valid: (tests.valid || []).map((test) => + typeof test === 'string' ? test : adjustOptions(test) + ), + invalid: (tests.invalid || []).map((test) => adjustOptions(test)) + }) + } + } + // eslint-disable-next-line unicorn/consistent-function-scoping + function adjustOptions(test) { + return processCompatibleConfig(test) + } +} + +function processCompatibleConfig(config, linter) { + const newConfig = { ...config } + if (newConfig.languageOptions) { + const languageOptions = newConfig.languageOptions + delete newConfig.languageOptions + newConfig.parserOptions = { + ...newConfig.parserOptions, + ...languageOptions, + ...languageOptions.parserOptions + } + if (languageOptions.globals) { + newConfig.globals = { + ...newConfig.globals, + ...languageOptions.globals + } + } + if (languageOptions.parser) { + newConfig.parser = getParserName(languageOptions.parser) + if (!languageOptions.parserOptions?.parser) { + delete newConfig.parserOptions.parser + } + linter?.defineParser?.(newConfig.parser, require(newConfig.parser)) + } + } + if (newConfig.plugins) { + const plugins = newConfig.plugins + delete newConfig.plugins + for (const [pluginName, plugin] of Object.entries(plugins)) { + for (const [ruleName, rule] of Object.entries(plugin.rules || {})) { + linter.defineRule(`${pluginName}/${ruleName}`, rule) + } + } + } + newConfig.env = { ...newConfig.env, es6: true } + return newConfig +} + +function getParserName(parser) { + const name = parser.meta?.name || parser.name + if (name === 'typescript-eslint/parser') { + return require.resolve('@typescript-eslint/parser') + } else if ( + name == null && + // @ts-expect-error + parser === require('@typescript-eslint/parser') + ) + return require.resolve('@typescript-eslint/parser') + return require.resolve(name) } diff --git a/tests/fixtures/script-indent/jsx-01.vue b/tests/fixtures/script-indent/jsx-01.vue index 7cd302aa3..d5e73c650 100644 --- a/tests/fixtures/script-indent/jsx-01.vue +++ b/tests/fixtures/script-indent/jsx-01.vue @@ -1,4 +1,4 @@ - + `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', code: ``, options: ['PascalCase'], - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', code: ``, options: ['kebab-case'], - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } } ], @@ -181,14 +187,14 @@ ruleTester.run('component-definition-name-casing', rule, { name: 'FooBar' } `, - parserOptions, errors: [ { message: 'Property name "foo-bar" is not PascalCase.', type: 'Literal', line: 3 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -198,14 +204,14 @@ ruleTester.run('component-definition-name-casing', rule, { } `, output: null, - parserOptions, errors: [ { message: 'Property name "foo bar" is not PascalCase.', type: 'Literal', line: 3 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -215,14 +221,14 @@ ruleTester.run('component-definition-name-casing', rule, { } `, output: null, - parserOptions, errors: [ { message: 'Property name "foo!bar" is not PascalCase.', type: 'Literal', line: 3 } - ] + ], + languageOptions }, { filename: 'test.js', @@ -232,14 +238,14 @@ ruleTester.run('component-definition-name-casing', rule, { }) `, output: null, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: 'Property name "foo!bar" is not PascalCase.', type: 'Literal', line: 3 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.vue', @@ -253,14 +259,14 @@ ruleTester.run('component-definition-name-casing', rule, { name: 'FooBar' } `, - parserOptions, errors: [ { message: 'Property name "foo_bar" is not PascalCase.', type: 'Literal', line: 3 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -275,14 +281,14 @@ ruleTester.run('component-definition-name-casing', rule, { } `, options: ['PascalCase'], - parserOptions, errors: [ { message: 'Property name "foo_bar" is not PascalCase.', type: 'Literal', line: 3 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -297,150 +303,156 @@ ruleTester.run('component-definition-name-casing', rule, { } `, options: ['kebab-case'], - parserOptions, errors: [ { message: 'Property name "foo_bar" is not kebab-case.', type: 'Literal', line: 3 } - ] + ], + languageOptions }, { filename: 'test.vue', code: `Vue.component('foo-bar', component)`, output: `Vue.component('FooBar', component)`, - parserOptions, errors: [ { message: 'Property name "foo-bar" is not PascalCase.', type: 'Literal', line: 1 } - ] + ], + languageOptions }, { filename: 'test.vue', code: `app.component('foo-bar', component)`, output: `app.component('FooBar', component)`, - parserOptions, errors: [ { message: 'Property name "foo-bar" is not PascalCase.', type: 'Literal', line: 1 } - ] + ], + languageOptions }, { filename: 'test.vue', code: `(Vue as VueConstructor).component('foo-bar', component)`, output: `(Vue as VueConstructor).component('FooBar', component)`, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions, errors: [ { message: 'Property name "foo-bar" is not PascalCase.', type: 'Literal', line: 1 } - ] + ], + languageOptions: { + parser: require('@typescript-eslint/parser'), + ...languageOptions + } }, { filename: 'test.vue', code: `Vue.component('foo-bar', {})`, output: `Vue.component('FooBar', {})`, - parserOptions, errors: [ { message: 'Property name "foo-bar" is not PascalCase.', type: 'Literal', line: 1 } - ] + ], + languageOptions }, { filename: 'test.vue', code: `app.component('foo-bar', {})`, output: `app.component('FooBar', {})`, - parserOptions, errors: [ { message: 'Property name "foo-bar" is not PascalCase.', type: 'Literal', line: 1 } - ] + ], + languageOptions }, { filename: 'test.js', code: `Vue.component('foo_bar', {})`, output: `Vue.component('FooBar', {})`, options: ['PascalCase'], - parserOptions, errors: [ { message: 'Property name "foo_bar" is not PascalCase.', type: 'Literal', line: 1 } - ] + ], + languageOptions }, { filename: 'test.vue', code: `Vue.component('foo_bar', {})`, output: `Vue.component('foo-bar', {})`, options: ['kebab-case'], - parserOptions, errors: [ { message: 'Property name "foo_bar" is not kebab-case.', type: 'Literal', line: 1 } - ] + ], + languageOptions }, { filename: 'test.vue', code: `Vue.component(\`foo_bar\`, {})`, output: `Vue.component(\`foo-bar\`, {})`, options: ['kebab-case'], - parserOptions, errors: [ { message: 'Property name "foo_bar" is not kebab-case.', type: 'TemplateLiteral', line: 1 } - ] + ], + languageOptions }, { filename: 'test.vue', code: ``, output: ``, options: ['PascalCase'], - parser: require.resolve('vue-eslint-parser'), - parserOptions, errors: [ { message: 'Property name "foo-bar" is not PascalCase.', line: 1 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', code: ``, output: ``, options: ['kebab-case'], - parser: require.resolve('vue-eslint-parser'), - parserOptions, errors: [ { message: 'Property name "FooBar" is not kebab-case.', line: 1 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } } ] }) diff --git a/tests/lib/rules/component-name-in-template-casing.js b/tests/lib/rules/component-name-in-template-casing.js index 992063808..44a23d532 100644 --- a/tests/lib/rules/component-name-in-template-casing.js +++ b/tests/lib/rules/component-name-in-template-casing.js @@ -5,11 +5,11 @@ const rule = require('../../../lib/rules/component-name-in-template-casing') const semver = require('semver') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2018, sourceType: 'module' } @@ -231,8 +231,10 @@ tester.run('component-name-in-template-casing', rule, { `, options: ['PascalCase', { registeredComponentsOnly: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ] @@ -1011,8 +1013,10 @@ tester.run('component-name-in-template-casing', rule, { `, options: ['PascalCase', { registeredComponentsOnly: false }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, output: ` `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -50,8 +52,10 @@ tester.run('define-emits-declaration', rule, { `, options: ['type-based'], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -74,8 +78,10 @@ tester.run('define-emits-declaration', rule, { `, options: ['type-based'], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -89,8 +95,10 @@ tester.run('define-emits-declaration', rule, { `, options: ['type-literal'], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -103,8 +111,10 @@ tester.run('define-emits-declaration', rule, { }) `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -121,8 +131,10 @@ tester.run('define-emits-declaration', rule, { } `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ], @@ -164,15 +176,17 @@ tester.run('define-emits-declaration', rule, { `, options: ['type-literal'], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Use type based declaration instead of runtime declaration.', line: 3 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -185,15 +199,17 @@ tester.run('define-emits-declaration', rule, { `, options: ['runtime'], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Use runtime declaration instead of type based declaration.', line: 3 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -206,9 +222,6 @@ tester.run('define-emits-declaration', rule, { `, options: ['type-literal'], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: @@ -220,7 +233,12 @@ tester.run('define-emits-declaration', rule, { 'Use new type literal declaration instead of the old call signature declaration.', line: 5 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -233,16 +251,18 @@ tester.run('define-emits-declaration', rule, { `, options: ['type-literal'], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Use new type literal declaration instead of the old call signature declaration.', line: 5 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -252,16 +272,18 @@ tester.run('define-emits-declaration', rule, { `, options: ['type-literal'], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Use new type literal declaration instead of the old call signature declaration.', line: 3 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } } ] }) diff --git a/tests/lib/rules/define-macros-order.js b/tests/lib/rules/define-macros-order.js index 878c0ea93..09ac0208d 100644 --- a/tests/lib/rules/define-macros-order.js +++ b/tests/lib/rules/define-macros-order.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/define-macros-order') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -70,8 +70,10 @@ tester.run('define-macros-order', rule, { console.log('test') `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -137,8 +139,10 @@ tester.run('define-macros-order', rule, { `, options: optionsEmitsFirst, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -229,8 +233,10 @@ tester.run('define-macros-order', rule, { defineExposeLast: true } ], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ], @@ -391,15 +397,17 @@ tester.run('define-macros-order', rule, { `, options: optionsEmitsFirst, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: message('defineEmits'), line: 12 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -427,15 +435,17 @@ tester.run('define-macros-order', rule, { interface SomeOtherInterface {}; `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: message('defineProps'), line: 10 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -480,15 +490,17 @@ tester.run('define-macros-order', rule, { `, options: optionsEmitsFirst, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: message('defineEmits'), line: 16 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', diff --git a/tests/lib/rules/define-props-declaration.js b/tests/lib/rules/define-props-declaration.js index b34c05c3a..3af4513ea 100644 --- a/tests/lib/rules/define-props-declaration.js +++ b/tests/lib/rules/define-props-declaration.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/define-props-declaration') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -26,8 +26,10 @@ tester.run('define-props-declaration', rule, { }>() `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -40,8 +42,10 @@ tester.run('define-props-declaration', rule, { `, options: ['type-based'], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -75,8 +79,10 @@ tester.run('define-props-declaration', rule, { }) `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -94,8 +100,10 @@ tester.run('define-props-declaration', rule, { } `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ], @@ -143,15 +151,17 @@ tester.run('define-props-declaration', rule, { `, options: ['runtime'], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Use runtime declaration instead of type-based declaration.', line: 3 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } } ] }) diff --git a/tests/lib/rules/dot-location.js b/tests/lib/rules/dot-location.js index 381e9988e..b2002d185 100644 --- a/tests/lib/rules/dot-location.js +++ b/tests/lib/rules/dot-location.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/dot-location') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('dot-location', rule, { diff --git a/tests/lib/rules/dot-notation.js b/tests/lib/rules/dot-notation.js index ff32b85ef..993aade52 100644 --- a/tests/lib/rules/dot-notation.js +++ b/tests/lib/rules/dot-notation.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/dot-notation') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('dot-notation', rule, { diff --git a/tests/lib/rules/enforce-style-attribute.js b/tests/lib/rules/enforce-style-attribute.js index 994b785ed..f12f66998 100644 --- a/tests/lib/rules/enforce-style-attribute.js +++ b/tests/lib/rules/enforce-style-attribute.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/enforce-style-attribute') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/eqeqeq.js b/tests/lib/rules/eqeqeq.js index 092c6f0d5..afd458248 100644 --- a/tests/lib/rules/eqeqeq.js +++ b/tests/lib/rules/eqeqeq.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/eqeqeq') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('eqeqeq', rule, { diff --git a/tests/lib/rules/first-attribute-linebreak.js b/tests/lib/rules/first-attribute-linebreak.js index 2c4ca0d04..a322aa498 100644 --- a/tests/lib/rules/first-attribute-linebreak.js +++ b/tests/lib/rules/first-attribute-linebreak.js @@ -4,12 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/first-attribute-linebreak') const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('first-attribute-linebreak', rule, { diff --git a/tests/lib/rules/func-call-spacing.js b/tests/lib/rules/func-call-spacing.js index 2730decb7..6c219e372 100644 --- a/tests/lib/rules/func-call-spacing.js +++ b/tests/lib/rules/func-call-spacing.js @@ -8,8 +8,7 @@ const semver = require('semver') const rule = require('../../../lib/rules/func-call-spacing') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('func-call-spacing', rule, { diff --git a/tests/lib/rules/html-button-has-type.js b/tests/lib/rules/html-button-has-type.js index 3b5fcef6e..a5d83777d 100644 --- a/tests/lib/rules/html-button-has-type.js +++ b/tests/lib/rules/html-button-has-type.js @@ -6,11 +6,10 @@ const rule = require('../../../lib/rules/html-button-has-type') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('html-button-has-type', rule, { valid: [ diff --git a/tests/lib/rules/html-closing-bracket-newline.js b/tests/lib/rules/html-closing-bracket-newline.js index 3a032ba86..faf898bc5 100644 --- a/tests/lib/rules/html-closing-bracket-newline.js +++ b/tests/lib/rules/html-closing-bracket-newline.js @@ -6,13 +6,10 @@ 'use strict' const rule = require('../../../lib/rules/html-closing-bracket-newline') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2015 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('html-closing-bracket-newline', rule, { diff --git a/tests/lib/rules/html-closing-bracket-spacing.js b/tests/lib/rules/html-closing-bracket-spacing.js index 8d359cbd0..09e2702e0 100644 --- a/tests/lib/rules/html-closing-bracket-spacing.js +++ b/tests/lib/rules/html-closing-bracket-spacing.js @@ -4,14 +4,11 @@ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/html-closing-bracket-spacing') const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2015 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('html-closing-bracket-spacing', rule, { diff --git a/tests/lib/rules/html-comment-content-newline.js b/tests/lib/rules/html-comment-content-newline.js index ce3eaea01..362e27adf 100644 --- a/tests/lib/rules/html-comment-content-newline.js +++ b/tests/lib/rules/html-comment-content-newline.js @@ -6,13 +6,10 @@ const rule = require('../../../lib/rules/html-comment-content-newline') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2015 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('html-comment-content-newline', rule, { valid: [ diff --git a/tests/lib/rules/html-comment-content-spacing.js b/tests/lib/rules/html-comment-content-spacing.js index ed3e5d4c4..1036555e8 100644 --- a/tests/lib/rules/html-comment-content-spacing.js +++ b/tests/lib/rules/html-comment-content-spacing.js @@ -6,13 +6,10 @@ const rule = require('../../../lib/rules/html-comment-content-spacing') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2015 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('html-comment-content-spacing', rule, { valid: [ diff --git a/tests/lib/rules/html-comment-indent.js b/tests/lib/rules/html-comment-indent.js index 12880167e..6abe16a6c 100644 --- a/tests/lib/rules/html-comment-indent.js +++ b/tests/lib/rules/html-comment-indent.js @@ -6,13 +6,10 @@ const rule = require('../../../lib/rules/html-comment-indent') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2015 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('html-comment-indent', rule, { valid: [ diff --git a/tests/lib/rules/html-end-tags.js b/tests/lib/rules/html-end-tags.js index 0d795875d..ce5979632 100644 --- a/tests/lib/rules/html-end-tags.js +++ b/tests/lib/rules/html-end-tags.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/html-end-tags') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('html-end-tags', rule, { diff --git a/tests/lib/rules/html-indent.js b/tests/lib/rules/html-indent.js index 688f44f6b..b8763dfb2 100644 --- a/tests/lib/rules/html-indent.js +++ b/tests/lib/rules/html-indent.js @@ -7,7 +7,7 @@ const fs = require('fs') const path = require('path') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/html-indent') const FIXTURE_ROOT = path.resolve(__dirname, '../../fixtures/html-indent/') @@ -99,11 +99,13 @@ function unIndent(strings) { } const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, - ecmaFeatures: { - globalReturn: true + parserOptions: { + ecmaFeatures: { + globalReturn: true + } } } }) diff --git a/tests/lib/rules/html-quotes.js b/tests/lib/rules/html-quotes.js index b151245f0..1c57f0a26 100644 --- a/tests/lib/rules/html-quotes.js +++ b/tests/lib/rules/html-quotes.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/html-quotes') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('html-quotes', rule, { diff --git a/tests/lib/rules/html-self-closing.js b/tests/lib/rules/html-self-closing.js index 11ae3c6cf..0f0898b53 100644 --- a/tests/lib/rules/html-self-closing.js +++ b/tests/lib/rules/html-self-closing.js @@ -6,10 +6,10 @@ 'use strict' const rule = require('../../../lib/rules/html-self-closing') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }) const ALL_CODE = ` `, options: [{ extensions: ['vue'] }], - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'MyComponent.vue', @@ -172,8 +182,10 @@ ruleTester.run('match-component-file-name', rule, { `, options: [{ extensions: ['vue'] }], - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'MyComponent.vue', @@ -186,8 +198,10 @@ ruleTester.run('match-component-file-name', rule, { `, options: [{ extensions: ['vue'] }], - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'MyComponent.vue', @@ -200,8 +214,10 @@ ruleTester.run('match-component-file-name', rule, { `, options: [{ extensions: ['vue'] }], - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'MyComponent.vue', @@ -214,8 +230,10 @@ ruleTester.run('match-component-file-name', rule, { `, options: [{ extensions: ['vue'] }], - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'MyComponent.vue', @@ -228,8 +246,10 @@ ruleTester.run('match-component-file-name', rule, { `, options: [{ extensions: ['vue'] }], - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, // .js @@ -241,14 +261,14 @@ ruleTester.run('match-component-file-name', rule, { template: '
' }) `, - parserOptions // options default to [['jsx']] + languageOptions // options default to [['jsx']] }, { filename: 'MyComponent.js', code: ` Vue.mixin({}) `, - parserOptions // options default to [['jsx']] + languageOptions // options default to [['jsx']] }, { filename: 'MyComponent.js', @@ -257,7 +277,7 @@ ruleTester.run('match-component-file-name', rule, { template: '
' }) `, - parserOptions // options default to [['jsx']] + languageOptions // options default to [['jsx']] }, { filename: 'MyComponent.js', @@ -268,7 +288,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['vue'] }], // missing 'js' in options - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -276,7 +296,7 @@ ruleTester.run('match-component-file-name', rule, { Vue.mixin({}) `, options: [{ extensions: ['vue'] }], // missing 'js' in options - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -286,7 +306,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['vue'] }], // missing 'js' in options - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -296,7 +316,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -307,7 +327,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -318,7 +338,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -329,7 +349,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -340,7 +360,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -351,7 +371,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -359,7 +379,7 @@ ruleTester.run('match-component-file-name', rule, { Vue.mixin({}) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -369,7 +389,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -379,7 +399,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -389,7 +409,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -399,7 +419,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -409,7 +429,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -419,7 +439,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -429,7 +449,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -439,7 +459,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -449,7 +469,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'MyComponent.js', @@ -459,7 +479,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, { filename: 'index.js', @@ -478,7 +498,7 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions + languageOptions }, // casing @@ -490,7 +510,7 @@ ruleTester.run('match-component-file-name', rule, { render() { return
} } `, - parserOptions: jsxParserOptions + languageOptions: jsxLanguageOptions }, { filename: 'my-component.jsx', @@ -500,7 +520,7 @@ ruleTester.run('match-component-file-name', rule, { render() { return
} } `, - parserOptions: jsxParserOptions + languageOptions: jsxLanguageOptions }, { filename: 'MyComponent.jsx', @@ -510,7 +530,7 @@ ruleTester.run('match-component-file-name', rule, { render() { return
} } `, - parserOptions: jsxParserOptions + languageOptions: jsxLanguageOptions }, { filename: 'my-component.jsx', @@ -521,7 +541,7 @@ ruleTester.run('match-component-file-name', rule, { } `, options: [{ shouldMatchCase: true }], - parserOptions: jsxParserOptions + languageOptions: jsxLanguageOptions }, { filename: 'MyComponent.jsx', @@ -532,20 +552,22 @@ ruleTester.run('match-component-file-name', rule, { } `, options: [{ shouldMatchCase: true }], - parserOptions: jsxParserOptions + languageOptions: jsxLanguageOptions }, // https://github.com/vuejs/eslint-plugin-vue/issues/1018 { filename: 'test.jsx', code: `fn1(component.data)`, - parserOptions + languageOptions }, { filename: 'MyComponent.vue', code: ``, options: [{ extensions: ['vue'] }], - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } } ], @@ -559,7 +581,6 @@ ruleTester.run('match-component-file-name', rule, { render() { return
} } `, - parserOptions: jsxParserOptions, errors: [ { message: @@ -576,7 +597,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions: jsxLanguageOptions }, { filename: 'MyComponent.jsx', @@ -587,7 +609,6 @@ ruleTester.run('match-component-file-name', rule, { } `, options: [{ extensions: ['jsx'] }], - parserOptions: jsxParserOptions, errors: [ { message: @@ -604,7 +625,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions: jsxLanguageOptions }, { filename: 'MyComponent.jsx', @@ -615,7 +637,6 @@ ruleTester.run('match-component-file-name', rule, { } `, options: [{ extensions: ['jsx'] }], - parserOptions: jsxParserOptions, errors: [ { message: @@ -632,7 +653,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions: jsxLanguageOptions }, { filename: 'MyComponent.jsx', @@ -643,7 +665,6 @@ ruleTester.run('match-component-file-name', rule, { } `, options: [{ extensions: ['jsx'] }], - parserOptions: jsxParserOptions, errors: [ { message: @@ -660,7 +681,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions: jsxLanguageOptions }, // .vue @@ -675,8 +697,6 @@ ruleTester.run('match-component-file-name', rule, { `, options: [{ extensions: ['vue'] }], - parser: require.resolve('vue-eslint-parser'), - parserOptions, errors: [ { message: @@ -695,7 +715,11 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'MyComponent.vue', @@ -708,8 +732,6 @@ ruleTester.run('match-component-file-name', rule, { `, options: [{ extensions: ['vue'] }], - parser: require.resolve('vue-eslint-parser'), - parserOptions, errors: [ { message: @@ -728,7 +750,11 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'MyComponent.vue', @@ -741,8 +767,6 @@ ruleTester.run('match-component-file-name', rule, { `, options: [{ extensions: ['vue'] }], - parser: require.resolve('vue-eslint-parser'), - parserOptions, errors: [ { message: @@ -761,7 +785,11 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, // .js @@ -774,7 +802,6 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions, errors: [ { message: @@ -791,7 +818,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions }, { filename: 'MyComponent.js', @@ -802,7 +830,6 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions, errors: [ { message: @@ -819,7 +846,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions }, { filename: 'MyComponent.js', @@ -830,7 +858,6 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions, errors: [ { message: @@ -847,7 +874,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions }, { filename: 'MyComponent.js', @@ -857,7 +885,6 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions, errors: [ { message: @@ -873,7 +900,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions }, { filename: 'MyComponent.js', @@ -883,7 +911,6 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions, errors: [ { message: @@ -899,7 +926,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions }, { filename: 'MyComponent.js', @@ -909,7 +937,6 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions, errors: [ { message: @@ -925,7 +952,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions }, { filename: 'MyComponent.js', @@ -935,7 +963,6 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions, errors: [ { message: @@ -951,7 +978,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions }, { filename: 'MyComponent.js', @@ -961,7 +989,6 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions, errors: [ { message: @@ -977,7 +1004,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions }, { filename: 'MyComponent.js', @@ -987,7 +1015,6 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions, errors: [ { message: @@ -1003,7 +1030,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions }, { filename: 'MyComponent.js', @@ -1013,7 +1041,6 @@ ruleTester.run('match-component-file-name', rule, { }) `, options: [{ extensions: ['js'] }], - parserOptions, errors: [ { message: @@ -1029,7 +1056,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions }, // casing @@ -1042,7 +1070,6 @@ ruleTester.run('match-component-file-name', rule, { } `, options: [{ shouldMatchCase: true }], - parserOptions: jsxParserOptions, errors: [ { message: @@ -1059,7 +1086,8 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions: jsxLanguageOptions }, { filename: 'my-component.jsx', @@ -1070,7 +1098,6 @@ ruleTester.run('match-component-file-name', rule, { } `, options: [{ shouldMatchCase: true }], - parserOptions: jsxParserOptions, errors: [ { message: @@ -1087,14 +1114,13 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions: jsxLanguageOptions }, { filename: 'MyComponent.vue', code: ``, options: [{ extensions: ['vue'] }], - parser: require.resolve('vue-eslint-parser'), - parserOptions, errors: [ { message: @@ -1106,7 +1132,11 @@ ruleTester.run('match-component-file-name', rule, { } ] } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } } ] }) diff --git a/tests/lib/rules/match-component-import-name.js b/tests/lib/rules/match-component-import-name.js index a05bfec1a..a6ca5da07 100644 --- a/tests/lib/rules/match-component-import-name.js +++ b/tests/lib/rules/match-component-import-name.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/match-component-import-name') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/max-attributes-per-line.js b/tests/lib/rules/max-attributes-per-line.js index fdee711e7..7440b05cf 100644 --- a/tests/lib/rules/max-attributes-per-line.js +++ b/tests/lib/rules/max-attributes-per-line.js @@ -4,12 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/max-attributes-per-line') const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('max-attributes-per-line', rule, { diff --git a/tests/lib/rules/max-len.js b/tests/lib/rules/max-len.js index a1141ec22..ac634ff75 100644 --- a/tests/lib/rules/max-len.js +++ b/tests/lib/rules/max-len.js @@ -3,12 +3,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/max-len') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2017, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2017, + sourceType: 'module' + } }) tester.run('max-len', rule, { diff --git a/tests/lib/rules/max-lines-per-block.js b/tests/lib/rules/max-lines-per-block.js index 01d868e62..2470586fb 100644 --- a/tests/lib/rules/max-lines-per-block.js +++ b/tests/lib/rules/max-lines-per-block.js @@ -3,12 +3,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/max-lines-per-block') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/multi-word-component-names.js b/tests/lib/rules/multi-word-component-names.js index 3d68364bc..70dc3fef3 100644 --- a/tests/lib/rules/multi-word-component-names.js +++ b/tests/lib/rules/multi-word-component-names.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/multi-word-component-names') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/multiline-html-element-content-newline.js b/tests/lib/rules/multiline-html-element-content-newline.js index 2d68c7685..36aa9cfe4 100644 --- a/tests/lib/rules/multiline-html-element-content-newline.js +++ b/tests/lib/rules/multiline-html-element-content-newline.js @@ -4,13 +4,10 @@ 'use strict' const rule = require('../../../lib/rules/multiline-html-element-content-newline') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2015 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('multiline-html-element-content-newline', rule, { diff --git a/tests/lib/rules/multiline-ternary.js b/tests/lib/rules/multiline-ternary.js index d79e82eff..87e3fe485 100644 --- a/tests/lib/rules/multiline-ternary.js +++ b/tests/lib/rules/multiline-ternary.js @@ -9,8 +9,8 @@ const rule = require('../../../lib/rules/multiline-ternary') const semver = require('semver') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/mustache-interpolation-spacing.js b/tests/lib/rules/mustache-interpolation-spacing.js index ec888a5af..421b5a0d1 100644 --- a/tests/lib/rules/mustache-interpolation-spacing.js +++ b/tests/lib/rules/mustache-interpolation-spacing.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/mustache-interpolation-spacing') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('mustache-interpolation-spacing', rule, { diff --git a/tests/lib/rules/new-line-between-multi-line-property.js b/tests/lib/rules/new-line-between-multi-line-property.js index 31983d7b0..dc220e47b 100644 --- a/tests/lib/rules/new-line-between-multi-line-property.js +++ b/tests/lib/rules/new-line-between-multi-line-property.js @@ -5,10 +5,13 @@ 'use strict' const rule = require('../../../lib/rules/new-line-between-multi-line-property') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2015, + sourceType: 'module' + } }) ruleTester.run('new-line-between-multi-line-property', rule, { diff --git a/tests/lib/rules/next-tick-style.js b/tests/lib/rules/next-tick-style.js index 28e2d338c..c143c8a40 100644 --- a/tests/lib/rules/next-tick-style.js +++ b/tests/lib/rules/next-tick-style.js @@ -6,12 +6,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/next-tick-style') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2017, sourceType: 'module' } diff --git a/tests/lib/rules/no-arrow-functions-in-watch.js b/tests/lib/rules/no-arrow-functions-in-watch.js index 0103ea849..a76de6ad0 100644 --- a/tests/lib/rules/no-arrow-functions-in-watch.js +++ b/tests/lib/rules/no-arrow-functions-in-watch.js @@ -3,10 +3,10 @@ */ const rule = require('../../../lib/rules/no-arrow-functions-in-watch') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/no-async-in-computed-properties.js b/tests/lib/rules/no-async-in-computed-properties.js index 2e150b021..d3b1a3087 100644 --- a/tests/lib/rules/no-async-in-computed-properties.js +++ b/tests/lib/rules/no-async-in-computed-properties.js @@ -5,13 +5,13 @@ 'use strict' const rule = require('../../../lib/rules/no-async-in-computed-properties') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const parserOptions = { +const parser = require('vue-eslint-parser') +const languageOptions = { ecmaVersion: 2020, sourceType: 'module' } -const parser = require.resolve('vue-eslint-parser') const ruleTester = new RuleTester() @@ -28,7 +28,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -61,7 +61,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -75,7 +75,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { })); } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -93,7 +93,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -114,7 +114,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -129,7 +129,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -142,7 +142,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -155,7 +155,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -172,7 +172,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -189,7 +189,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -202,7 +202,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -215,7 +215,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { code: ` @@ -223,7 +223,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { data1: new Promise(), data2: Promise.resolve(), })`, - parserOptions + languageOptions }, { code: ` @@ -298,7 +298,7 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions + languageOptions }, { // https://github.com/vuejs/eslint-plugin-vue/issues/1690 @@ -319,8 +319,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { }, } `, - parser, - parserOptions: { + languageOptions: { + parser, sourceType: 'module', ecmaVersion: 2020 } @@ -339,7 +339,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: @@ -350,7 +349,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected await operator in "foo" computed property.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -363,7 +363,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: @@ -374,7 +373,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected Promise object in "foo" computed property.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -387,13 +387,13 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -406,8 +406,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, - errors: ['Unexpected asynchronous action in "foo" computed property.'] + errors: ['Unexpected asynchronous action in "foo" computed property.'], + languageOptions }, { filename: 'test.vue', @@ -420,8 +420,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, - errors: ['Unexpected asynchronous action in "foo" computed property.'] + errors: ['Unexpected asynchronous action in "foo" computed property.'], + languageOptions }, { filename: 'test.vue', @@ -434,13 +434,13 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -453,13 +453,13 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -472,13 +472,13 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -491,13 +491,13 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -510,13 +510,13 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -529,13 +529,13 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -548,13 +548,13 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -569,13 +569,13 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', line: 6 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -590,13 +590,13 @@ ruleTester.run('no-async-in-computed-properties', rule, { } }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', line: 6 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.vue', @@ -611,13 +611,13 @@ ruleTester.run('no-async-in-computed-properties', rule, { } }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', line: 6 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.vue', @@ -632,7 +632,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } }) `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in "foo" computed property.', @@ -642,7 +641,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected asynchronous action in "foo" computed property.', line: 6 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -657,7 +657,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } }) `, - parserOptions, errors: [ { message: @@ -680,7 +679,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected asynchronous action in "foo" computed property.', line: 6 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -700,7 +700,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected timed function in "foo" computed property.', @@ -734,7 +733,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected timed function in "foo" computed property.', line: 12 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -754,7 +754,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ 'Unexpected timed function in "foo" computed property.', 'Unexpected timed function in "foo" computed property.', @@ -764,7 +763,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { 'Unexpected timed function in "foo" computed property.', 'Unexpected timed function in "foo" computed property.', 'Unexpected timed function in "foo" computed property.' - ] + ], + languageOptions }, { filename: 'test.vue', @@ -784,7 +784,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ 'Unexpected timed function in "foo" computed property.', 'Unexpected timed function in "foo" computed property.', @@ -794,7 +793,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { 'Unexpected timed function in "foo" computed property.', 'Unexpected timed function in "foo" computed property.', 'Unexpected timed function in "foo" computed property.' - ] + ], + languageOptions }, { filename: 'test.vue', @@ -812,7 +812,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: @@ -841,7 +840,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected await operator in computed function.', line: 10 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -855,7 +855,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: @@ -866,7 +865,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected Promise object in computed function.', line: 6 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -883,7 +883,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in computed function.', @@ -893,7 +892,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected asynchronous action in computed function.', line: 9 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -914,7 +914,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in computed function.', @@ -924,7 +923,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected asynchronous action in computed function.', line: 12 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -945,7 +945,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected timed function in computed function.', @@ -979,7 +978,8 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected timed function in computed function.', line: 13 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -993,14 +993,14 @@ ruleTester.run('no-async-in-computed-properties', rule, { } } `, - parserOptions, errors: [ { message: 'Unexpected async function declaration in computed function.', line: 5 } - ] + ], + languageOptions }, { @@ -1017,8 +1017,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { }) `, - parser, - parserOptions, errors: [ { message: @@ -1047,7 +1045,11 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected await operator in computed function.', line: 9 } - ] + ], + languageOptions: { + parser, + ...languageOptions + } }, { filename: 'test.vue', @@ -1059,8 +1061,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { }) `, - parser, - parserOptions, errors: [ { message: @@ -1071,7 +1071,11 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected Promise object in computed function.', line: 5 } - ] + ], + languageOptions: { + parser, + ...languageOptions + } }, { filename: 'test.vue', @@ -1086,8 +1090,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { }) `, - parser, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in computed function.', @@ -1097,7 +1099,11 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected asynchronous action in computed function.', line: 8 } - ] + ], + languageOptions: { + parser, + ...languageOptions + } }, { filename: 'test.vue', @@ -1116,8 +1122,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { }) `, - parser, - parserOptions, errors: [ { message: 'Unexpected asynchronous action in computed function.', @@ -1127,7 +1131,11 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected asynchronous action in computed function.', line: 11 } - ] + ], + languageOptions: { + parser, + ...languageOptions + } }, { filename: 'test.vue', @@ -1146,8 +1154,6 @@ ruleTester.run('no-async-in-computed-properties', rule, { }) `, - parser, - parserOptions, errors: [ { message: 'Unexpected timed function in computed function.', @@ -1181,7 +1187,11 @@ ruleTester.run('no-async-in-computed-properties', rule, { message: 'Unexpected timed function in computed function.', line: 12 } - ] + ], + languageOptions: { + parser, + ...languageOptions + } }, { filename: 'test.vue', @@ -1193,15 +1203,17 @@ ruleTester.run('no-async-in-computed-properties', rule, { }) `, - parser, - parserOptions, errors: [ { message: 'Unexpected async function declaration in computed function.', line: 4 } - ] + ], + languageOptions: { + parser, + ...languageOptions + } } ] }) diff --git a/tests/lib/rules/no-bare-strings-in-template.js b/tests/lib/rules/no-bare-strings-in-template.js index 38d71aa46..6c8497531 100644 --- a/tests/lib/rules/no-bare-strings-in-template.js +++ b/tests/lib/rules/no-bare-strings-in-template.js @@ -3,12 +3,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-bare-strings-in-template') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('no-bare-strings-in-template', rule, { diff --git a/tests/lib/rules/no-boolean-default.js b/tests/lib/rules/no-boolean-default.js index 9f33b90fa..c1f1a1784 100644 --- a/tests/lib/rules/no-boolean-default.js +++ b/tests/lib/rules/no-boolean-default.js @@ -7,10 +7,10 @@ const semver = require('semver') const rule = require('../../../lib/rules/no-boolean-default') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } @@ -234,7 +234,7 @@ ruleTester.run('no-boolean-default', rule, { }) `, - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -249,7 +249,7 @@ ruleTester.run('no-boolean-default', rule, { `, options: ['default-false'], - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -262,9 +262,11 @@ ruleTester.run('no-boolean-default', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -280,9 +282,11 @@ ruleTester.run('no-boolean-default', rule, { `, options: ['default-false'], - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -297,9 +301,11 @@ ruleTester.run('no-boolean-default', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -314,9 +320,11 @@ ruleTester.run('no-boolean-default', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ], @@ -416,14 +424,14 @@ ruleTester.run('no-boolean-default', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), errors: [ { message: 'Boolean prop should not set a default (Vue defaults it to false).', line: 6 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -438,13 +446,13 @@ ruleTester.run('no-boolean-default', rule, { `, options: ['default-false'], - parser: require.resolve('vue-eslint-parser'), errors: [ { message: 'Boolean prop should only be defaulted to false.', line: 6 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } }, ...(semver.lt( require('@typescript-eslint/parser/package.json').version, @@ -464,9 +472,11 @@ ruleTester.run('no-boolean-default', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, errors: [ { @@ -488,9 +498,11 @@ ruleTester.run('no-boolean-default', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, options: ['default-false'], errors: [ diff --git a/tests/lib/rules/no-child-content.js b/tests/lib/rules/no-child-content.js index c6d739418..2e46f6cb0 100644 --- a/tests/lib/rules/no-child-content.js +++ b/tests/lib/rules/no-child-content.js @@ -4,12 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-child-content') const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('no-child-content', rule, { diff --git a/tests/lib/rules/no-computed-properties-in-data.js b/tests/lib/rules/no-computed-properties-in-data.js index a352d4419..769731804 100644 --- a/tests/lib/rules/no-computed-properties-in-data.js +++ b/tests/lib/rules/no-computed-properties-in-data.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-computed-properties-in-data') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-console.js b/tests/lib/rules/no-console.js index 7b6acfeab..1ff32feeb 100644 --- a/tests/lib/rules/no-console.js +++ b/tests/lib/rules/no-console.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-console') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-constant-condition.js b/tests/lib/rules/no-constant-condition.js index 312a6ee05..8d25479f8 100644 --- a/tests/lib/rules/no-constant-condition.js +++ b/tests/lib/rules/no-constant-condition.js @@ -3,12 +3,11 @@ */ 'use strict' -const { RuleTester } = require('eslint') +const { RuleTester } = require('../../eslint-compat') const rule = require('../../../lib/rules/no-constant-condition.js') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 6 } }) tester.run('no-constant-condition', rule, { diff --git a/tests/lib/rules/no-custom-modifiers-on-v-model.js b/tests/lib/rules/no-custom-modifiers-on-v-model.js index a07e459b9..88d269ebf 100644 --- a/tests/lib/rules/no-custom-modifiers-on-v-model.js +++ b/tests/lib/rules/no-custom-modifiers-on-v-model.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-custom-modifiers-on-v-model') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('no-custom-modifiers-on-v-model', rule, { diff --git a/tests/lib/rules/no-deprecated-data-object-declaration.js b/tests/lib/rules/no-deprecated-data-object-declaration.js index e80253570..1c2007aab 100644 --- a/tests/lib/rules/no-deprecated-data-object-declaration.js +++ b/tests/lib/rules/no-deprecated-data-object-declaration.js @@ -6,9 +6,9 @@ const rule = require('../../../lib/rules/no-deprecated-data-object-declaration') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const parserOptions = { +const languageOptions = { ecmaVersion: 2018, sourceType: 'module' } @@ -27,7 +27,7 @@ ruleTester.run('no-deprecated-data-object-declaration', rule, { } }).mount('#app') `, - parserOptions + languageOptions }, { filename: 'test.js', @@ -41,7 +41,7 @@ ruleTester.run('no-deprecated-data-object-declaration', rule, { } }).mount('#app') `, - parserOptions + languageOptions }, { filename: 'test.js', @@ -55,7 +55,7 @@ ruleTester.run('no-deprecated-data-object-declaration', rule, { } }) `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -68,7 +68,7 @@ ruleTester.run('no-deprecated-data-object-declaration', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -77,7 +77,7 @@ ruleTester.run('no-deprecated-data-object-declaration', rule, { ...foo } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -86,7 +86,7 @@ ruleTester.run('no-deprecated-data-object-declaration', rule, { data } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -97,7 +97,7 @@ ruleTester.run('no-deprecated-data-object-declaration', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -111,7 +111,7 @@ ruleTester.run('no-deprecated-data-object-declaration', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -125,7 +125,7 @@ ruleTester.run('no-deprecated-data-object-declaration', rule, { } } `, - parserOptions + languageOptions } ], @@ -150,14 +150,14 @@ return { } }) `, - parserOptions, errors: [ { message: "Object declaration on 'data' property is deprecated. Using function declaration instead.", line: 4 } - ] + ], + languageOptions }, { filename: 'test.js', @@ -177,14 +177,14 @@ return { } }) `, - parserOptions, errors: [ { message: "Object declaration on 'data' property is deprecated. Using function declaration instead.", line: 3 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -204,14 +204,14 @@ return { } } `, - parserOptions, errors: [ { message: "Object declaration on 'data' property is deprecated. Using function declaration instead.", line: 3 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -231,14 +231,14 @@ return (/*b*/{ } } `, - parserOptions, errors: [ { message: "Object declaration on 'data' property is deprecated. Using function declaration instead.", line: 3 } - ] + ], + languageOptions }, { filename: 'test.js', @@ -258,14 +258,14 @@ return { } }) `, - parserOptions, errors: [ { message: "Object declaration on 'data' property is deprecated. Using function declaration instead.", line: 3 } - ] + ], + languageOptions }, { filename: 'test.js', @@ -285,14 +285,14 @@ return { } }).mount('#app') `, - parserOptions, errors: [ { message: "Object declaration on 'data' property is deprecated. Using function declaration instead.", line: 3 } - ] + ], + languageOptions } ] }) diff --git a/tests/lib/rules/no-deprecated-destroyed-lifecycle.js b/tests/lib/rules/no-deprecated-destroyed-lifecycle.js index 2a48fa79f..a956b37ed 100644 --- a/tests/lib/rules/no-deprecated-destroyed-lifecycle.js +++ b/tests/lib/rules/no-deprecated-destroyed-lifecycle.js @@ -6,11 +6,14 @@ const rule = require('../../../lib/rules/no-deprecated-destroyed-lifecycle') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) ruleTester.run('no-deprecated-destroyed-lifecycle', rule, { valid: [ diff --git a/tests/lib/rules/no-deprecated-dollar-listeners-api.js b/tests/lib/rules/no-deprecated-dollar-listeners-api.js index 01f42894c..f9dd0ff40 100644 --- a/tests/lib/rules/no-deprecated-dollar-listeners-api.js +++ b/tests/lib/rules/no-deprecated-dollar-listeners-api.js @@ -6,11 +6,14 @@ const rule = require('../../../lib/rules/no-deprecated-dollar-listeners-api') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) ruleTester.run('no-deprecated-dollar-listeners-api', rule, { valid: [ diff --git a/tests/lib/rules/no-deprecated-dollar-scopedslots-api.js b/tests/lib/rules/no-deprecated-dollar-scopedslots-api.js index 94d4c96b0..7dea6146e 100644 --- a/tests/lib/rules/no-deprecated-dollar-scopedslots-api.js +++ b/tests/lib/rules/no-deprecated-dollar-scopedslots-api.js @@ -6,11 +6,14 @@ const rule = require('../../../lib/rules/no-deprecated-dollar-scopedslots-api') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) ruleTester.run('no-deprecated-dollar-scopedslots-api', rule, { valid: [ diff --git a/tests/lib/rules/no-deprecated-events-api.js b/tests/lib/rules/no-deprecated-events-api.js index 2f28b4215..4b4fd288f 100644 --- a/tests/lib/rules/no-deprecated-events-api.js +++ b/tests/lib/rules/no-deprecated-events-api.js @@ -6,9 +6,9 @@ const rule = require('../../../lib/rules/no-deprecated-events-api') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const parserOptions = { +const languageOptions = { ecmaVersion: 2020, sourceType: 'module' } @@ -25,7 +25,7 @@ ruleTester.run('no-deprecated-events-api', rule, { } }) `, - parserOptions + languageOptions }, { filename: 'test.js', @@ -38,7 +38,7 @@ ruleTester.run('no-deprecated-events-api', rule, { } }) `, - parserOptions + languageOptions }, { filename: 'test.js', @@ -55,7 +55,7 @@ ruleTester.run('no-deprecated-events-api', rule, { } }) `, - parserOptions + languageOptions }, { filename: 'test.js', @@ -66,7 +66,7 @@ ruleTester.run('no-deprecated-events-api', rule, { } }) `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -77,7 +77,7 @@ ruleTester.run('no-deprecated-events-api', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -93,7 +93,7 @@ ruleTester.run('no-deprecated-events-api', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -104,7 +104,7 @@ ruleTester.run('no-deprecated-events-api', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.js', @@ -118,7 +118,7 @@ ruleTester.run('no-deprecated-events-api', rule, { } }) `, - parserOptions + languageOptions } ], @@ -134,14 +134,14 @@ ruleTester.run('no-deprecated-events-api', rule, { } }) `, - parserOptions, errors: [ { message: 'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.', line: 4 } - ] + ], + languageOptions }, { filename: 'test.js', @@ -152,14 +152,14 @@ ruleTester.run('no-deprecated-events-api', rule, { } }) `, - parserOptions, errors: [ { message: 'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.', line: 4 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -172,14 +172,14 @@ ruleTester.run('no-deprecated-events-api', rule, { } } `, - parserOptions, errors: [ { message: 'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.', line: 4 } - ] + ], + languageOptions }, { filename: 'test.js', @@ -193,14 +193,14 @@ ruleTester.run('no-deprecated-events-api', rule, { } }) `, - parserOptions, errors: [ { message: 'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.js', @@ -213,12 +213,12 @@ ruleTester.run('no-deprecated-events-api', rule, { } }) `, - parserOptions, errors: [ 'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.', 'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.', 'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.' - ] + ], + languageOptions }, { filename: 'test.js', @@ -231,12 +231,12 @@ ruleTester.run('no-deprecated-events-api', rule, { } }) `, - parserOptions, errors: [ 'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.', 'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.', 'The Events api `$on`, `$off` `$once` is deprecated. Using external library instead, for example mitt.' - ] + ], + languageOptions } ] }) diff --git a/tests/lib/rules/no-deprecated-filter.js b/tests/lib/rules/no-deprecated-filter.js index 66469f841..cf2a33518 100644 --- a/tests/lib/rules/no-deprecated-filter.js +++ b/tests/lib/rules/no-deprecated-filter.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-deprecated-filter') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('no-deprecated-filter', rule, { @@ -25,8 +24,10 @@ ruleTester.run('no-deprecated-filter', rule, { { filename: 'test.vue', code: '', - parserOptions: { - vueFeatures: { filter: false } + languageOptions: { + parserOptions: { + vueFeatures: { filter: false } + } } } ], diff --git a/tests/lib/rules/no-deprecated-functional-template.js b/tests/lib/rules/no-deprecated-functional-template.js index 410b4b456..00cf539ff 100644 --- a/tests/lib/rules/no-deprecated-functional-template.js +++ b/tests/lib/rules/no-deprecated-functional-template.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-deprecated-functional-template') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2019 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) ruleTester.run('no-deprecated-functional-template', rule, { diff --git a/tests/lib/rules/no-deprecated-html-element-is.js b/tests/lib/rules/no-deprecated-html-element-is.js index 91b1c9266..be8ea3e71 100644 --- a/tests/lib/rules/no-deprecated-html-element-is.js +++ b/tests/lib/rules/no-deprecated-html-element-is.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-deprecated-html-element-is') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2019 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) ruleTester.run('no-deprecated-html-element-is', rule, { diff --git a/tests/lib/rules/no-deprecated-inline-template.js b/tests/lib/rules/no-deprecated-inline-template.js index d164c7a9a..fad9c77a7 100644 --- a/tests/lib/rules/no-deprecated-inline-template.js +++ b/tests/lib/rules/no-deprecated-inline-template.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-deprecated-inline-template') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2019 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) ruleTester.run('no-deprecated-inline-template', rule, { diff --git a/tests/lib/rules/no-deprecated-model-definition.js b/tests/lib/rules/no-deprecated-model-definition.js index ebdcb8599..ae4e56b3a 100644 --- a/tests/lib/rules/no-deprecated-model-definition.js +++ b/tests/lib/rules/no-deprecated-model-definition.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-deprecated-model-definition') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-deprecated-props-default-this.js b/tests/lib/rules/no-deprecated-props-default-this.js index 9b663cdf7..b887868d5 100644 --- a/tests/lib/rules/no-deprecated-props-default-this.js +++ b/tests/lib/rules/no-deprecated-props-default-this.js @@ -5,11 +5,14 @@ 'use strict' const rule = require('../../../lib/rules/no-deprecated-props-default-this') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) ruleTester.run('no-deprecated-props-default-this', rule, { diff --git a/tests/lib/rules/no-deprecated-router-link-tag-prop.js b/tests/lib/rules/no-deprecated-router-link-tag-prop.js index 9154cf31c..cf022f79a 100644 --- a/tests/lib/rules/no-deprecated-router-link-tag-prop.js +++ b/tests/lib/rules/no-deprecated-router-link-tag-prop.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-deprecated-router-link-tag-prop') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-deprecated-scope-attribute.js b/tests/lib/rules/no-deprecated-scope-attribute.js index 9cc8b92d4..f823a6878 100644 --- a/tests/lib/rules/no-deprecated-scope-attribute.js +++ b/tests/lib/rules/no-deprecated-scope-attribute.js @@ -1,13 +1,10 @@ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-deprecated-scope-attribute') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2015 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-deprecated-scope-attribute', rule, { diff --git a/tests/lib/rules/no-deprecated-slot-attribute.js b/tests/lib/rules/no-deprecated-slot-attribute.js index be9b4241a..324983444 100644 --- a/tests/lib/rules/no-deprecated-slot-attribute.js +++ b/tests/lib/rules/no-deprecated-slot-attribute.js @@ -1,13 +1,10 @@ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-deprecated-slot-attribute.js') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2015 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-deprecated-slot-attribute', rule, { diff --git a/tests/lib/rules/no-deprecated-slot-scope-attribute.js b/tests/lib/rules/no-deprecated-slot-scope-attribute.js index 728aaccd3..dccc46a0c 100644 --- a/tests/lib/rules/no-deprecated-slot-scope-attribute.js +++ b/tests/lib/rules/no-deprecated-slot-scope-attribute.js @@ -1,13 +1,10 @@ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-deprecated-slot-scope-attribute') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2015 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-deprecated-slot-scope-attribute', rule, { diff --git a/tests/lib/rules/no-deprecated-v-bind-sync.js b/tests/lib/rules/no-deprecated-v-bind-sync.js index c02342a86..3d775d975 100644 --- a/tests/lib/rules/no-deprecated-v-bind-sync.js +++ b/tests/lib/rules/no-deprecated-v-bind-sync.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-deprecated-v-bind-sync') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('no-deprecated-v-bind-sync', rule, { diff --git a/tests/lib/rules/no-deprecated-v-is.js b/tests/lib/rules/no-deprecated-v-is.js index cdc47b9aa..8dd07a478 100644 --- a/tests/lib/rules/no-deprecated-v-is.js +++ b/tests/lib/rules/no-deprecated-v-is.js @@ -1,13 +1,10 @@ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-deprecated-v-is') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2015 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-deprecated-v-is', rule, { diff --git a/tests/lib/rules/no-deprecated-v-on-native-modifier.js b/tests/lib/rules/no-deprecated-v-on-native-modifier.js index 1342f25bf..b9863d9ed 100644 --- a/tests/lib/rules/no-deprecated-v-on-native-modifier.js +++ b/tests/lib/rules/no-deprecated-v-on-native-modifier.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-deprecated-v-on-native-modifier') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('no-deprecated-v-on-native-modifier', rule, { diff --git a/tests/lib/rules/no-deprecated-v-on-number-modifiers.js b/tests/lib/rules/no-deprecated-v-on-number-modifiers.js index 986b5e335..4fd4bfb8e 100644 --- a/tests/lib/rules/no-deprecated-v-on-number-modifiers.js +++ b/tests/lib/rules/no-deprecated-v-on-number-modifiers.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-deprecated-v-on-number-modifiers') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('no-deprecated-v-on-number-modifiers', rule, { diff --git a/tests/lib/rules/no-deprecated-vue-config-keycodes.js b/tests/lib/rules/no-deprecated-vue-config-keycodes.js index 37c8bf3c4..ee00e5c37 100644 --- a/tests/lib/rules/no-deprecated-vue-config-keycodes.js +++ b/tests/lib/rules/no-deprecated-vue-config-keycodes.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-deprecated-vue-config-keycodes') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) ruleTester.run('no-deprecated-vue-config-keycodes', rule, { diff --git a/tests/lib/rules/no-dupe-keys.js b/tests/lib/rules/no-dupe-keys.js index 72ea22620..2eae55863 100644 --- a/tests/lib/rules/no-dupe-keys.js +++ b/tests/lib/rules/no-dupe-keys.js @@ -5,10 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-dupe-keys') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } @@ -401,7 +401,7 @@ ruleTester.run('no-dupe-keys', rule, { const bar = 0 `, - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -414,8 +414,10 @@ ruleTester.run('no-dupe-keys', rule, { const bar = 0 `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -425,7 +427,7 @@ ruleTester.run('no-dupe-keys', rule, { const { foo, bar } = props `, - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -436,7 +438,7 @@ ruleTester.run('no-dupe-keys', rule, { const bar = props.bar `, - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -447,7 +449,7 @@ ruleTester.run('no-dupe-keys', rule, { const { foo, bar } = toRefs(props) `, - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -459,7 +461,7 @@ ruleTester.run('no-dupe-keys', rule, { const bar = toRef(props, 'bar') `, - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -468,7 +470,7 @@ ruleTester.run('no-dupe-keys', rule, { const {foo,bar} = defineProps(['foo', 'bar']) `, - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -477,7 +479,7 @@ ruleTester.run('no-dupe-keys', rule, { const {foo=42,bar='abc'} = defineProps(['foo', 'bar']) `, - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -494,8 +496,10 @@ ruleTester.run('no-dupe-keys', rule, { const foo = props.foo `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } } ], @@ -1007,14 +1011,14 @@ ruleTester.run('no-dupe-keys', rule, { const foo = 0 `, - parser: require.resolve('vue-eslint-parser'), errors: [ { message: "Duplicate key 'foo'. May cause name collision in script or template tag.", line: 6 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -1035,7 +1039,6 @@ ruleTester.run('no-dupe-keys', rule, { const bar = () => 'bar'; `, - parser: require.resolve('vue-eslint-parser'), errors: [ { message: @@ -1052,7 +1055,8 @@ ruleTester.run('no-dupe-keys', rule, { "Duplicate key 'bar'. May cause name collision in script or template tag.", line: 15 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -1067,8 +1071,6 @@ ruleTester.run('no-dupe-keys', rule, { const bar = 'bar'; `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { message: @@ -1080,7 +1082,11 @@ ruleTester.run('no-dupe-keys', rule, { "Duplicate key 'bar'. May cause name collision in script or template tag.", line: 9 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -1091,14 +1097,14 @@ ruleTester.run('no-dupe-keys', rule, { const bar = 42 `, - parser: require.resolve('vue-eslint-parser'), errors: [ { message: "Duplicate key 'bar'. May cause name collision in script or template tag.", line: 5 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } } ] }) diff --git a/tests/lib/rules/no-dupe-v-else-if.js b/tests/lib/rules/no-dupe-v-else-if.js index 214657a9c..8e1388b4f 100644 --- a/tests/lib/rules/no-dupe-v-else-if.js +++ b/tests/lib/rules/no-dupe-v-else-if.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-dupe-v-else-if') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2019, sourceType: 'module' } diff --git a/tests/lib/rules/no-duplicate-attr-inheritance.js b/tests/lib/rules/no-duplicate-attr-inheritance.js index 7fc112123..e38711a54 100644 --- a/tests/lib/rules/no-duplicate-attr-inheritance.js +++ b/tests/lib/rules/no-duplicate-attr-inheritance.js @@ -6,11 +6,11 @@ const rule = require('../../../lib/rules/no-duplicate-attr-inheritance') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/no-duplicate-attributes.js b/tests/lib/rules/no-duplicate-attributes.js index b47611184..ddb82db16 100644 --- a/tests/lib/rules/no-duplicate-attributes.js +++ b/tests/lib/rules/no-duplicate-attributes.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-duplicate-attributes') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-duplicate-attributes', rule, { diff --git a/tests/lib/rules/no-empty-component-block.js b/tests/lib/rules/no-empty-component-block.js index 8ba6a2f2c..e54fd9df6 100644 --- a/tests/lib/rules/no-empty-component-block.js +++ b/tests/lib/rules/no-empty-component-block.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-empty-component-block') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2018 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2018 } }) tester.run('no-empty-component-block', rule, { diff --git a/tests/lib/rules/no-empty-pattern.js b/tests/lib/rules/no-empty-pattern.js index b3747965e..3013b60ad 100644 --- a/tests/lib/rules/no-empty-pattern.js +++ b/tests/lib/rules/no-empty-pattern.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-empty-pattern') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2018 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2018 } }) tester.run('no-empty-pattern', rule, { diff --git a/tests/lib/rules/no-export-in-script-setup.js b/tests/lib/rules/no-export-in-script-setup.js index 76e7b0ee4..e6f2f1e19 100644 --- a/tests/lib/rules/no-export-in-script-setup.js +++ b/tests/lib/rules/no-export-in-script-setup.js @@ -5,13 +5,13 @@ 'use strict' const semver = require('semver') -const eslint = require('eslint') +const eslint = require('../../eslint-compat') const rule = require('../../../lib/rules/no-export-in-script-setup') const RuleTester = eslint.RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module' } @@ -57,9 +57,11 @@ ruleTester.run('no-export-in-script-setup', rule, { export interface Bar {} `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ] @@ -72,9 +74,11 @@ ruleTester.run('no-export-in-script-setup', rule, { export interface Bar {} `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ]) @@ -141,10 +145,6 @@ ruleTester.run('no-export-in-script-setup', rule, { export {} `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: '` `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -116,7 +116,7 @@ tester.run('no-expose-after-await', rule, { function defineExpose() {} `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -127,7 +127,7 @@ tester.run('no-expose-after-await', rule, { onMounted(() => {}) `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } } ], invalid: [ @@ -179,14 +179,14 @@ tester.run('no-expose-after-await', rule, { defineExpose({ /* ... */ }) `, - parserOptions: { ecmaVersion: 2022 }, errors: [ { message: '`defineExpose` is forbidden after an `await` expression.', line: 4, column: 7 } - ] + ], + languageOptions: { ecmaVersion: 2022 } } ] }) diff --git a/tests/lib/rules/no-extra-parens.js b/tests/lib/rules/no-extra-parens.js index 0cf6d702c..dda150694 100644 --- a/tests/lib/rules/no-extra-parens.js +++ b/tests/lib/rules/no-extra-parens.js @@ -3,12 +3,11 @@ */ 'use strict' -const { RuleTester } = require('eslint') +const { RuleTester } = require('../../eslint-compat') const rule = require('../../../lib/rules/no-extra-parens') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-extra-parens', rule, { diff --git a/tests/lib/rules/no-invalid-model-keys.js b/tests/lib/rules/no-invalid-model-keys.js index 1ae7cb522..44469346f 100644 --- a/tests/lib/rules/no-invalid-model-keys.js +++ b/tests/lib/rules/no-invalid-model-keys.js @@ -5,10 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-invalid-model-keys') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/no-irregular-whitespace.js b/tests/lib/rules/no-irregular-whitespace.js index 52c6dd0e4..2dc454e1e 100644 --- a/tests/lib/rules/no-irregular-whitespace.js +++ b/tests/lib/rules/no-irregular-whitespace.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-irregular-whitespace') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2018 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2018 } }) const IRREGULAR_WHITESPACES = [ diff --git a/tests/lib/rules/no-lifecycle-after-await.js b/tests/lib/rules/no-lifecycle-after-await.js index e75995a5f..9314eb5bd 100644 --- a/tests/lib/rules/no-lifecycle-after-await.js +++ b/tests/lib/rules/no-lifecycle-after-await.js @@ -3,12 +3,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-lifecycle-after-await') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('no-lifecycle-after-await', rule, { @@ -116,7 +119,7 @@ tester.run('no-lifecycle-after-await', rule, { await doSomething() `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -129,7 +132,7 @@ tester.run('no-lifecycle-after-await', rule, { onMounted(() => { /* ... */ }) // not error `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -142,7 +145,7 @@ tester.run('no-lifecycle-after-await', rule, { onMounted(() => { /* ... */ }) // not error `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -154,7 +157,7 @@ tester.run('no-lifecycle-after-await', rule, { onMounted(() => { /* ... */ }) // not error `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } } ], invalid: [ diff --git a/tests/lib/rules/no-lone-template.js b/tests/lib/rules/no-lone-template.js index 947934fcd..12fd4f89f 100644 --- a/tests/lib/rules/no-lone-template.js +++ b/tests/lib/rules/no-lone-template.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-lone-template') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2019, sourceType: 'module' } diff --git a/tests/lib/rules/no-loss-of-precision.js b/tests/lib/rules/no-loss-of-precision.js index 5608f8e11..749914193 100644 --- a/tests/lib/rules/no-loss-of-precision.js +++ b/tests/lib/rules/no-loss-of-precision.js @@ -9,8 +9,8 @@ const semver = require('semver') const rule = require('../../../lib/rules/no-loss-of-precision') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-multi-spaces.js b/tests/lib/rules/no-multi-spaces.js index 255bff813..be4440858 100644 --- a/tests/lib/rules/no-multi-spaces.js +++ b/tests/lib/rules/no-multi-spaces.js @@ -5,11 +5,14 @@ 'use strict' const rule = require('../../../lib/rules/no-multi-spaces') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2015, + sourceType: 'module' + } }) ruleTester.run('no-multi-spaces', rule, { diff --git a/tests/lib/rules/no-multiple-objects-in-class.js b/tests/lib/rules/no-multiple-objects-in-class.js index f044e316f..0c1a4d1b4 100644 --- a/tests/lib/rules/no-multiple-objects-in-class.js +++ b/tests/lib/rules/no-multiple-objects-in-class.js @@ -4,11 +4,14 @@ 'use strict' const rule = require('../../../lib/rules/no-multiple-objects-in-class') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2015, + sourceType: 'module' + } }) ruleTester.run('no-multiple-objects-in-class', rule, { diff --git a/tests/lib/rules/no-multiple-slot-args.js b/tests/lib/rules/no-multiple-slot-args.js index 8674513cf..cbd0bbfba 100644 --- a/tests/lib/rules/no-multiple-slot-args.js +++ b/tests/lib/rules/no-multiple-slot-args.js @@ -6,11 +6,14 @@ const rule = require('../../../lib/rules/no-multiple-slot-args') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) ruleTester.run('no-multiple-slot-args', rule, { valid: [ diff --git a/tests/lib/rules/no-multiple-template-root.js b/tests/lib/rules/no-multiple-template-root.js index e57afd188..7ab80af7e 100644 --- a/tests/lib/rules/no-multiple-template-root.js +++ b/tests/lib/rules/no-multiple-template-root.js @@ -6,11 +6,10 @@ const rule = require('../../../lib/rules/no-multiple-template-root') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('no-multiple-template-root', rule, { valid: [ diff --git a/tests/lib/rules/no-mutating-props.js b/tests/lib/rules/no-mutating-props.js index 7c4884847..1ecca1787 100644 --- a/tests/lib/rules/no-mutating-props.js +++ b/tests/lib/rules/no-mutating-props.js @@ -5,11 +5,11 @@ 'use strict' const rule = require('../../../lib/rules/no-mutating-props') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -1031,15 +1031,17 @@ ruleTester.run('no-mutating-props', rule, { props.value++ `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Unexpected mutation of "value" prop.', line: 6 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', diff --git a/tests/lib/rules/no-parsing-error.js b/tests/lib/rules/no-parsing-error.js index 54500f18c..1408fb7d8 100644 --- a/tests/lib/rules/no-parsing-error.js +++ b/tests/lib/rules/no-parsing-error.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-parsing-error') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-parsing-error', rule, { diff --git a/tests/lib/rules/no-potential-component-option-typo.js b/tests/lib/rules/no-potential-component-option-typo.js index 68ea21901..0b9fad541 100644 --- a/tests/lib/rules/no-potential-component-option-typo.js +++ b/tests/lib/rules/no-potential-component-option-typo.js @@ -6,11 +6,14 @@ const rule = require('../../../lib/rules/no-potential-component-option-typo') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2018, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2018, + sourceType: 'module' + } }) tester.run('no-potential-component-option-typo', rule, { diff --git a/tests/lib/rules/no-ref-as-operand.js b/tests/lib/rules/no-ref-as-operand.js index ef74cd4f4..f08a9e1c2 100644 --- a/tests/lib/rules/no-ref-as-operand.js +++ b/tests/lib/rules/no-ref-as-operand.js @@ -3,12 +3,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-ref-as-operand') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('no-ref-as-operand', rule, { diff --git a/tests/lib/rules/no-ref-object-destructure.js b/tests/lib/rules/no-ref-object-destructure.js index 4ef92acff..e9b6e0d59 100644 --- a/tests/lib/rules/no-ref-object-destructure.js +++ b/tests/lib/rules/no-ref-object-destructure.js @@ -4,11 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-ref-object-destructure') const tester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-ref-object-reactivity-loss.js b/tests/lib/rules/no-ref-object-reactivity-loss.js index ef946188b..c06e456bb 100644 --- a/tests/lib/rules/no-ref-object-reactivity-loss.js +++ b/tests/lib/rules/no-ref-object-reactivity-loss.js @@ -4,11 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-ref-object-reactivity-loss') const tester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2020, sourceType: 'module' } @@ -319,7 +319,6 @@ tester.run('no-ref-object-reactivity-loss', rule, { mod.value // OK ) `, - parser: require.resolve('vue-eslint-parser'), errors: [ { message: @@ -331,7 +330,8 @@ tester.run('no-ref-object-reactivity-loss', rule, { 'Getting a value from the ref object in the same scope will cause the value to lose reactivity.', line: 7 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } }, // Reactivity Transform { diff --git a/tests/lib/rules/no-required-prop-with-default.js b/tests/lib/rules/no-required-prop-with-default.js index f1f5b655a..af33872f2 100644 --- a/tests/lib/rules/no-required-prop-with-default.js +++ b/tests/lib/rules/no-required-prop-with-default.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-required-prop-with-default') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -33,8 +33,10 @@ tester.run('no-required-prop-with-default', rule, { ); `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -53,8 +55,10 @@ tester.run('no-required-prop-with-default', rule, { ); `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -72,8 +76,10 @@ tester.run('no-required-prop-with-default', rule, { ); `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -93,8 +99,10 @@ tester.run('no-required-prop-with-default', rule, { ); `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -113,8 +121,10 @@ tester.run('no-required-prop-with-default', rule, { ); `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -135,8 +145,10 @@ tester.run('no-required-prop-with-default', rule, { ); `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -211,15 +223,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "name" should be optional.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -252,15 +266,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "name" should be optional.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -293,15 +309,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "na::me" should be optional.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -336,15 +354,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "name" should be optional.', line: 5 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -375,15 +395,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "name" should be optional.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -416,15 +438,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "name" should be optional.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -457,15 +481,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "na"me2" should be optional.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -498,15 +524,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "foo" should be optional.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -539,15 +567,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "name" should be optional.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -580,15 +610,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "name" should be optional.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -621,15 +653,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "a" should be optional.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -662,15 +696,17 @@ tester.run('no-required-prop-with-default', rule, { `, options: [{ autofix: true }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Prop "a" should be optional.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', diff --git a/tests/lib/rules/no-reserved-component-names.js b/tests/lib/rules/no-reserved-component-names.js index d9114810b..14ab1334f 100644 --- a/tests/lib/rules/no-reserved-component-names.js +++ b/tests/lib/rules/no-reserved-component-names.js @@ -5,7 +5,7 @@ 'use strict' const rule = require('../../../lib/rules/no-reserved-component-names') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const htmlElements = require('../../../lib/utils/html-elements.json') const RESERVED_NAMES_IN_HTML = new Set([ @@ -425,7 +425,7 @@ const vue2BuiltInComponents = [ const vue3BuiltInComponents = ['teleport', 'Teleport', 'suspense', 'Suspense'] -const parserOptions = { +const languageOptions = { ecmaVersion: 2018, sourceType: 'module' } @@ -439,7 +439,7 @@ ruleTester.run('no-reserved-component-names', rule, { export default { } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -448,7 +448,7 @@ ruleTester.run('no-reserved-component-names', rule, { ...name } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -457,7 +457,7 @@ ruleTester.run('no-reserved-component-names', rule, { name: 'FooBar' } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -472,17 +472,17 @@ ruleTester.run('no-reserved-component-names', rule, { disallowVue3BuiltInComponents: true } ], - parserOptions + languageOptions }, { filename: 'test.vue', code: `Vue.component('FooBar', {})`, - parserOptions + languageOptions }, { filename: 'test.vue', code: `app.component('FooBar', {})`, - parserOptions + languageOptions }, { filename: 'test.js', @@ -491,12 +491,12 @@ ruleTester.run('no-reserved-component-names', rule, { name: 'foo!bar' }) `, - parserOptions + languageOptions }, { filename: 'test.vue', code: `Vue.component(\`fooBar\${foo}\`, component)`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -507,8 +507,10 @@ ruleTester.run('no-reserved-component-names', rule, { } `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', @@ -519,14 +521,16 @@ ruleTester.run('no-reserved-component-names', rule, { } `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, // https://github.com/vuejs/eslint-plugin-vue/issues/1018 { filename: 'test.js', code: `fn1(component.data)`, - parserOptions + languageOptions }, ...vue2BuiltInComponents.map((name) => ({ filename: `${name}.vue`, @@ -535,7 +539,7 @@ ruleTester.run('no-reserved-component-names', rule, { name: '${name}' } `, - parserOptions + languageOptions })), ...vue3BuiltInComponents.map((name) => ({ filename: `${name}.vue`, @@ -544,7 +548,7 @@ ruleTester.run('no-reserved-component-names', rule, { name: '${name}' } `, - parserOptions + languageOptions })), ...vue3BuiltInComponents.map((name) => ({ filename: `${name}.vue`, @@ -553,26 +557,32 @@ ruleTester.run('no-reserved-component-names', rule, { name: '${name}' } `, - parserOptions, + languageOptions, options: [{ disallowVueBuiltInComponents: true }] })), { filename: 'test.vue', code: ``, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', code: ``, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', code: ``, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } } ], @@ -584,7 +594,7 @@ ruleTester.run('no-reserved-component-names', rule, { name: '${name}' } `, - parserOptions, + languageOptions, errors: [ { messageId: RESERVED_NAMES_IN_HTML.has(name) @@ -599,7 +609,7 @@ ruleTester.run('no-reserved-component-names', rule, { ...invalidElements.map((name) => ({ filename: 'test.vue', code: `Vue.component('${name}', component)`, - parserOptions, + languageOptions, errors: [ { messageId: RESERVED_NAMES_IN_HTML.has(name) @@ -614,7 +624,7 @@ ruleTester.run('no-reserved-component-names', rule, { ...invalidElements.map((name) => ({ filename: 'test.vue', code: `app.component('${name}', component)`, - parserOptions, + languageOptions, errors: [ { messageId: RESERVED_NAMES_IN_HTML.has(name) @@ -629,7 +639,7 @@ ruleTester.run('no-reserved-component-names', rule, { ...invalidElements.map((name) => ({ filename: 'test.vue', code: `Vue.component(\`${name}\`, {})`, - parserOptions, + languageOptions, errors: [ { messageId: RESERVED_NAMES_IN_HTML.has(name) @@ -644,7 +654,7 @@ ruleTester.run('no-reserved-component-names', rule, { ...invalidElements.map((name) => ({ filename: 'test.vue', code: `app.component(\`${name}\`, {})`, - parserOptions, + languageOptions, errors: [ { messageId: RESERVED_NAMES_IN_HTML.has(name) @@ -663,7 +673,7 @@ ruleTester.run('no-reserved-component-names', rule, { '${name}': {}, } }`, - parserOptions, + languageOptions, errors: [ { messageId: RESERVED_NAMES_IN_HTML.has(name) @@ -678,8 +688,10 @@ ruleTester.run('no-reserved-component-names', rule, { ...invalidElements.map((name) => ({ filename: `${name}.vue`, code: ``, - parser: require.resolve('vue-eslint-parser'), - parserOptions, + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + }, errors: [ { messageId: RESERVED_NAMES_IN_HTML.has(name) @@ -697,7 +709,7 @@ ruleTester.run('no-reserved-component-names', rule, { name: '${name}' } `, - parserOptions, + languageOptions, options: [{ disallowVueBuiltInComponents: true }], errors: [ { @@ -715,7 +727,7 @@ ruleTester.run('no-reserved-component-names', rule, { name: '${name}' } `, - parserOptions, + languageOptions, options: [{ disallowVue3BuiltInComponents: true }], errors: [ { @@ -733,7 +745,7 @@ ruleTester.run('no-reserved-component-names', rule, { name: '${name}' } `, - parserOptions, + languageOptions, options: [{ disallowVue3BuiltInComponents: true }], errors: [ { diff --git a/tests/lib/rules/no-reserved-keys.js b/tests/lib/rules/no-reserved-keys.js index 47199d240..ded4a9692 100644 --- a/tests/lib/rules/no-reserved-keys.js +++ b/tests/lib/rules/no-reserved-keys.js @@ -6,9 +6,9 @@ const semver = require('semver') const rule = require('../../../lib/rules/no-reserved-keys') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const parserOptions = { +const languageOptions = { ecmaVersion: 2018, sourceType: 'module' } @@ -37,7 +37,7 @@ ruleTester.run('no-reserved-keys', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -60,7 +60,7 @@ ruleTester.run('no-reserved-keys', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -81,7 +81,7 @@ ruleTester.run('no-reserved-keys', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -107,7 +107,7 @@ ruleTester.run('no-reserved-keys', rule, { } } `, - parserOptions + languageOptions } ], @@ -121,13 +121,13 @@ ruleTester.run('no-reserved-keys', rule, { } }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: "Key '$el' is reserved.", line: 4 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -140,13 +140,13 @@ ruleTester.run('no-reserved-keys', rule, { } }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: "Key '$el' is reserved.", line: 5 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -159,13 +159,13 @@ ruleTester.run('no-reserved-keys', rule, { } }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: "Key '$el' is reserved.", line: 5 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -176,13 +176,13 @@ ruleTester.run('no-reserved-keys', rule, { } }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: "Keys starting with '_' are reserved in '_foo' group.", line: 4 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -195,13 +195,13 @@ ruleTester.run('no-reserved-keys', rule, { } }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: "Keys starting with '_' are reserved in '_foo' group.", line: 5 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -212,13 +212,13 @@ ruleTester.run('no-reserved-keys', rule, { }) }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: "Keys starting with '_' are reserved in '_foo' group.", line: 4 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -229,13 +229,13 @@ ruleTester.run('no-reserved-keys', rule, { }) }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: "Keys starting with '_' are reserved in '_foo' group.", line: 4 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -247,13 +247,13 @@ ruleTester.run('no-reserved-keys', rule, { }) `, options: [{ reserved: ['bar'], groups: ['foo'] }], - parserOptions: { ecmaVersion: 6 }, errors: [ { message: "Key 'bar' is reserved.", line: 4 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.vue', @@ -264,14 +264,13 @@ ruleTester.run('no-reserved-keys', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6 }, errors: [ { message: "Key '$el' is reserved.", line: 4 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 6 } }, { filename: 'test.vue', @@ -280,17 +279,19 @@ ruleTester.run('no-reserved-keys', rule, { defineProps<{$el: string}>() `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 6, - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: "Key '$el' is reserved.", line: 3 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, ...(semver.lt( require('@typescript-eslint/parser/package.json').version, @@ -308,10 +309,12 @@ ruleTester.run('no-reserved-keys', rule, { defineProps() `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, errors: [ { @@ -330,10 +333,12 @@ ruleTester.run('no-reserved-keys', rule, { defineProps() `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, errors: [ { diff --git a/tests/lib/rules/no-reserved-props.js b/tests/lib/rules/no-reserved-props.js index 595ac9409..aa8252f0c 100644 --- a/tests/lib/rules/no-reserved-props.js +++ b/tests/lib/rules/no-reserved-props.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-reserved-props') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -65,9 +65,11 @@ tester.run('no-reserved-props', rule, { defineProps() `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -96,9 +98,11 @@ tester.run('no-reserved-props', rule, { defineProps() `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ], @@ -257,10 +261,6 @@ tester.run('no-reserved-props', rule, { defineProps() `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: "'ref' is a reserved attribute and cannot be used as props.", @@ -272,7 +272,13 @@ tester.run('no-reserved-props', rule, { line: 5, column: 9 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', diff --git a/tests/lib/rules/no-restricted-block.js b/tests/lib/rules/no-restricted-block.js index be4286ac2..5a8035292 100644 --- a/tests/lib/rules/no-restricted-block.js +++ b/tests/lib/rules/no-restricted-block.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-restricted-block') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('no-restricted-block', rule, { diff --git a/tests/lib/rules/no-restricted-call-after-await.js b/tests/lib/rules/no-restricted-call-after-await.js index 5409f7f29..faa0b2670 100644 --- a/tests/lib/rules/no-restricted-call-after-await.js +++ b/tests/lib/rules/no-restricted-call-after-await.js @@ -4,12 +4,15 @@ 'use strict' const path = require('path') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-restricted-call-after-await') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('no-restricted-call-after-await', rule, { @@ -136,7 +139,7 @@ tester.run('no-restricted-call-after-await', rule, { `, options: [{ module: 'vue-i18n', path: 'useI18n' }], - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -148,7 +151,7 @@ tester.run('no-restricted-call-after-await', rule, { `, options: [{ module: 'vue-i18n', path: 'useI18n' }], - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } } ], invalid: [ diff --git a/tests/lib/rules/no-restricted-class.js b/tests/lib/rules/no-restricted-class.js index 2d53598c8..d7e079261 100644 --- a/tests/lib/rules/no-restricted-class.js +++ b/tests/lib/rules/no-restricted-class.js @@ -5,11 +5,14 @@ 'use strict' const rule = require('../../../lib/rules/no-restricted-class') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) ruleTester.run('no-restricted-class', rule, { diff --git a/tests/lib/rules/no-restricted-component-names.js b/tests/lib/rules/no-restricted-component-names.js index 07030c4bb..609db8aa6 100644 --- a/tests/lib/rules/no-restricted-component-names.js +++ b/tests/lib/rules/no-restricted-component-names.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-restricted-component-names') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-restricted-component-options.js b/tests/lib/rules/no-restricted-component-options.js index 484f6700c..39d4cbffe 100644 --- a/tests/lib/rules/no-restricted-component-options.js +++ b/tests/lib/rules/no-restricted-component-options.js @@ -3,12 +3,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-restricted-component-options') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('no-restricted-component-options', rule, { diff --git a/tests/lib/rules/no-restricted-custom-event.js b/tests/lib/rules/no-restricted-custom-event.js index 2e022206f..8f9cddfb7 100644 --- a/tests/lib/rules/no-restricted-custom-event.js +++ b/tests/lib/rules/no-restricted-custom-event.js @@ -3,12 +3,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-restricted-custom-event') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('no-restricted-custom-event', rule, { diff --git a/tests/lib/rules/no-restricted-html-elements.js b/tests/lib/rules/no-restricted-html-elements.js index 3dee64643..c3e3e9eeb 100644 --- a/tests/lib/rules/no-restricted-html-elements.js +++ b/tests/lib/rules/no-restricted-html-elements.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-restricted-html-elements') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-restricted-html-elements', rule, { diff --git a/tests/lib/rules/no-restricted-props.js b/tests/lib/rules/no-restricted-props.js index 934a255b0..a50b22911 100644 --- a/tests/lib/rules/no-restricted-props.js +++ b/tests/lib/rules/no-restricted-props.js @@ -4,15 +4,18 @@ 'use strict' const semver = require('semver') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-restricted-props') const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('no-restricted-props', rule, { @@ -387,9 +390,6 @@ tester.run('no-restricted-props', rule, { `, options: [{ name: 'foo', suggest: 'Foo' }], - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: 'Using `foo` props is not allowed.', @@ -407,7 +407,12 @@ tester.run('no-restricted-props', rule, { } ] } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, ...(semver.lt( require('@typescript-eslint/parser/package.json').version, @@ -425,8 +430,10 @@ tester.run('no-restricted-props', rule, { defineProps() `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, options: [{ name: 'foo', suggest: 'Foo' }], errors: [ @@ -463,8 +470,10 @@ tester.run('no-restricted-props', rule, { ) `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, options: [{ name: 'foo', suggest: 'Foo' }], errors: [ @@ -508,8 +517,10 @@ tester.run('no-restricted-props', rule, { ) `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, options: [{ name: 'foo', suggest: 'Foo' }], errors: [ @@ -553,8 +564,10 @@ tester.run('no-restricted-props', rule, { } `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, options: [{ name: 'foo', suggest: 'Foo' }], errors: [ diff --git a/tests/lib/rules/no-restricted-static-attribute.js b/tests/lib/rules/no-restricted-static-attribute.js index f484bbb87..54f942969 100644 --- a/tests/lib/rules/no-restricted-static-attribute.js +++ b/tests/lib/rules/no-restricted-static-attribute.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-restricted-static-attribute') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('no-restricted-static-attribute', rule, { diff --git a/tests/lib/rules/no-restricted-syntax.js b/tests/lib/rules/no-restricted-syntax.js index 647bdc4b6..a585cdf96 100644 --- a/tests/lib/rules/no-restricted-syntax.js +++ b/tests/lib/rules/no-restricted-syntax.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-restricted-syntax') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-restricted-syntax', rule, { diff --git a/tests/lib/rules/no-restricted-v-bind.js b/tests/lib/rules/no-restricted-v-bind.js index 5c408ed2d..f53461102 100644 --- a/tests/lib/rules/no-restricted-v-bind.js +++ b/tests/lib/rules/no-restricted-v-bind.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-restricted-v-bind') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('no-restricted-v-bind', rule, { diff --git a/tests/lib/rules/no-restricted-v-on.js b/tests/lib/rules/no-restricted-v-on.js index 1d73d5c15..159165c45 100644 --- a/tests/lib/rules/no-restricted-v-on.js +++ b/tests/lib/rules/no-restricted-v-on.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-restricted-v-on') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-root-v-if.js b/tests/lib/rules/no-root-v-if.js index 766c5b2ad..43119b7d0 100644 --- a/tests/lib/rules/no-root-v-if.js +++ b/tests/lib/rules/no-root-v-if.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-root-v-if') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-root-v-if', rule, { diff --git a/tests/lib/rules/no-setup-props-destructure.js b/tests/lib/rules/no-setup-props-destructure.js index 5d9a704d1..3e3989342 100644 --- a/tests/lib/rules/no-setup-props-destructure.js +++ b/tests/lib/rules/no-setup-props-destructure.js @@ -3,12 +3,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-setup-props-destructure') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('no-setup-props-destructure', rule, { diff --git a/tests/lib/rules/no-setup-props-reactivity-loss.js b/tests/lib/rules/no-setup-props-reactivity-loss.js index 2e2480631..408ccb09e 100644 --- a/tests/lib/rules/no-setup-props-reactivity-loss.js +++ b/tests/lib/rules/no-setup-props-reactivity-loss.js @@ -3,12 +3,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-setup-props-reactivity-loss') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('no-setup-props-reactivity-loss', rule, { diff --git a/tests/lib/rules/no-shared-component-data.js b/tests/lib/rules/no-shared-component-data.js index 49ad5c67a..50f433036 100644 --- a/tests/lib/rules/no-shared-component-data.js +++ b/tests/lib/rules/no-shared-component-data.js @@ -6,9 +6,9 @@ const rule = require('../../../lib/rules/no-shared-component-data') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const parserOptions = { +const languageOptions = { ecmaVersion: 2018, sourceType: 'module' } @@ -27,7 +27,7 @@ ruleTester.run('no-shared-component-data', rule, { } }) `, - parserOptions + languageOptions }, { filename: 'test.js', @@ -41,7 +41,7 @@ ruleTester.run('no-shared-component-data', rule, { } }) `, - parserOptions + languageOptions }, { filename: 'test.js', @@ -64,7 +64,7 @@ ruleTester.run('no-shared-component-data', rule, { } }) `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -77,7 +77,7 @@ ruleTester.run('no-shared-component-data', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -86,7 +86,7 @@ ruleTester.run('no-shared-component-data', rule, { ...foo } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -95,7 +95,7 @@ ruleTester.run('no-shared-component-data', rule, { data } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -106,7 +106,7 @@ ruleTester.run('no-shared-component-data', rule, { } } `, - parserOptions + languageOptions } ], @@ -129,13 +129,13 @@ return { } }) `, - parserOptions, errors: [ { message: '`data` property in component must be a function.', line: 3 } - ] + ], + languageOptions }, { filename: 'test.js', @@ -155,13 +155,13 @@ return { } }) `, - parserOptions, errors: [ { message: '`data` property in component must be a function.', line: 3 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -181,13 +181,13 @@ return { } } `, - parserOptions, errors: [ { message: '`data` property in component must be a function.', line: 3 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -207,13 +207,13 @@ return (/*b*/{ } } `, - parserOptions, errors: [ { message: '`data` property in component must be a function.', line: 3 } - ] + ], + languageOptions } ] }) diff --git a/tests/lib/rules/no-side-effects-in-computed-properties.js b/tests/lib/rules/no-side-effects-in-computed-properties.js index a72004060..7ba6c0827 100644 --- a/tests/lib/rules/no-side-effects-in-computed-properties.js +++ b/tests/lib/rules/no-side-effects-in-computed-properties.js @@ -5,16 +5,15 @@ 'use strict' const rule = require('../../../lib/rules/no-side-effects-in-computed-properties') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const parserOptions = { +const languageOptions = { ecmaVersion: 2020, sourceType: 'module' } const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { parser: require('vue-eslint-parser'), ...languageOptions } }) ruleTester.run('no-side-effects-in-computed-properties', rule, { @@ -392,13 +391,13 @@ ruleTester.run('no-side-effects-in-computed-properties', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), errors: [ { line: 5, message: 'Unexpected side effect in "test1" computed property.' } - ] + ], + languageOptions: { parser: require('@typescript-eslint/parser') } }, { diff --git a/tests/lib/rules/no-spaces-around-equal-signs-in-attribute.js b/tests/lib/rules/no-spaces-around-equal-signs-in-attribute.js index da77bcdbe..9372a1c98 100644 --- a/tests/lib/rules/no-spaces-around-equal-signs-in-attribute.js +++ b/tests/lib/rules/no-spaces-around-equal-signs-in-attribute.js @@ -4,10 +4,10 @@ 'use strict' const rule = require('../../../lib/rules/no-spaces-around-equal-signs-in-attribute') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }) tester.run('no-spaces-around-equal-signs-in-attribute', rule, { diff --git a/tests/lib/rules/no-sparse-arrays.js b/tests/lib/rules/no-sparse-arrays.js index 7c0020fd5..3a08561d1 100644 --- a/tests/lib/rules/no-sparse-arrays.js +++ b/tests/lib/rules/no-sparse-arrays.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-sparse-arrays') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-sparse-arrays', rule, { diff --git a/tests/lib/rules/no-static-inline-styles.js b/tests/lib/rules/no-static-inline-styles.js index 31e08b38e..c215d4bd3 100644 --- a/tests/lib/rules/no-static-inline-styles.js +++ b/tests/lib/rules/no-static-inline-styles.js @@ -4,14 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-static-inline-styles') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-static-inline-styles', rule, { diff --git a/tests/lib/rules/no-template-key.js b/tests/lib/rules/no-template-key.js index 01add78e9..62f9f2a87 100644 --- a/tests/lib/rules/no-template-key.js +++ b/tests/lib/rules/no-template-key.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-template-key') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-template-key', rule, { diff --git a/tests/lib/rules/no-template-shadow.js b/tests/lib/rules/no-template-shadow.js index 6844b5f9f..3cc5218d1 100644 --- a/tests/lib/rules/no-template-shadow.js +++ b/tests/lib/rules/no-template-shadow.js @@ -5,11 +5,11 @@ 'use strict' const rule = require('../../../lib/rules/no-template-shadow') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/no-template-target-blank.js b/tests/lib/rules/no-template-target-blank.js index b9896d7ed..42d84f6b2 100644 --- a/tests/lib/rules/no-template-target-blank.js +++ b/tests/lib/rules/no-template-target-blank.js @@ -6,11 +6,10 @@ const rule = require('../../../lib/rules/no-template-target-blank') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('no-template-target-blank', rule, { diff --git a/tests/lib/rules/no-textarea-mustache.js b/tests/lib/rules/no-textarea-mustache.js index ac34728e5..cc389f223 100644 --- a/tests/lib/rules/no-textarea-mustache.js +++ b/tests/lib/rules/no-textarea-mustache.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-textarea-mustache') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-textarea-mustache', rule, { diff --git a/tests/lib/rules/no-this-in-before-route-enter.js b/tests/lib/rules/no-this-in-before-route-enter.js index f3861672e..490385345 100644 --- a/tests/lib/rules/no-this-in-before-route-enter.js +++ b/tests/lib/rules/no-this-in-before-route-enter.js @@ -9,7 +9,7 @@ //------------------------------------------------------------------------------ const rule = require('../../../lib/rules/no-this-in-before-route-enter') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester //------------------------------------------------------------------------------ // Tests @@ -59,8 +59,11 @@ export default { ` const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) ruleTester.run('no-this-in-before-route-enter', rule, { valid: [ diff --git a/tests/lib/rules/no-undef-components.js b/tests/lib/rules/no-undef-components.js index 0941f003d..8b332ba42 100644 --- a/tests/lib/rules/no-undef-components.js +++ b/tests/lib/rules/no-undef-components.js @@ -4,13 +4,13 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-undef-components') const semver = require('semver') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -656,11 +656,13 @@ tester.run('no-undef-components', rule, { `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ], @@ -751,12 +753,14 @@ tester.run('no-undef-components', rule, { `, - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, - parser: require.resolve('vue-eslint-parser'), errors: [ { message: @@ -803,19 +807,21 @@ tester.run('no-undef-components', rule, { `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: "The '' component has been used, but 'Foo' only refers to a type.", line: 7 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module', + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, // options API diff --git a/tests/lib/rules/no-undef-properties.js b/tests/lib/rules/no-undef-properties.js index 816d8b552..83812a248 100644 --- a/tests/lib/rules/no-undef-properties.js +++ b/tests/lib/rules/no-undef-properties.js @@ -4,15 +4,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-undef-properties') const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -555,8 +555,10 @@ tester.run('no-undef-properties', rule, {
{{ foo }}
{{ unknown }}
`, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, diff --git a/tests/lib/rules/no-unsupported-features.js b/tests/lib/rules/no-unsupported-features.js index 77ee72055..c99f5f973 100644 --- a/tests/lib/rules/no-unsupported-features.js +++ b/tests/lib/rules/no-unsupported-features.js @@ -7,14 +7,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-unsupported-features') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features', rule, { diff --git a/tests/lib/rules/no-unsupported-features/define-model.js b/tests/lib/rules/no-unsupported-features/define-model.js index 0307d1f9f..a82aad26f 100644 --- a/tests/lib/rules/no-unsupported-features/define-model.js +++ b/tests/lib/rules/no-unsupported-features/define-model.js @@ -4,16 +4,13 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('define-model', '^3.3.0') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/define-model', rule, { diff --git a/tests/lib/rules/no-unsupported-features/define-options.js b/tests/lib/rules/no-unsupported-features/define-options.js index a53bd776c..6a270a071 100644 --- a/tests/lib/rules/no-unsupported-features/define-options.js +++ b/tests/lib/rules/no-unsupported-features/define-options.js @@ -4,14 +4,14 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('define-options', '^3.2.0') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2019, sourceType: 'module' } diff --git a/tests/lib/rules/no-unsupported-features/define-slots.js b/tests/lib/rules/no-unsupported-features/define-slots.js index 2fef117c7..95d61199d 100644 --- a/tests/lib/rules/no-unsupported-features/define-slots.js +++ b/tests/lib/rules/no-unsupported-features/define-slots.js @@ -4,16 +4,13 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('define-slots', '^3.2.0') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/define-slots', rule, { diff --git a/tests/lib/rules/no-unsupported-features/dynamic-directive-arguments.js b/tests/lib/rules/no-unsupported-features/dynamic-directive-arguments.js index 61b39e738..ced8dce9e 100644 --- a/tests/lib/rules/no-unsupported-features/dynamic-directive-arguments.js +++ b/tests/lib/rules/no-unsupported-features/dynamic-directive-arguments.js @@ -4,7 +4,7 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') @@ -13,10 +13,7 @@ const buildOptions = utils.optionsBuilder( '^2.5.0' ) const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/dynamic-directive-arguments', rule, { diff --git a/tests/lib/rules/no-unsupported-features/is-attribute-with-vue-prefix.js b/tests/lib/rules/no-unsupported-features/is-attribute-with-vue-prefix.js index adcc64835..1ee6cc0cc 100644 --- a/tests/lib/rules/no-unsupported-features/is-attribute-with-vue-prefix.js +++ b/tests/lib/rules/no-unsupported-features/is-attribute-with-vue-prefix.js @@ -4,7 +4,7 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') @@ -13,10 +13,7 @@ const buildOptions = utils.optionsBuilder( '^3.1.0' ) const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/is-attribute-with-vue-prefix', rule, { diff --git a/tests/lib/rules/no-unsupported-features/script-setup.js b/tests/lib/rules/no-unsupported-features/script-setup.js index 51ffb1cea..183fa88f2 100644 --- a/tests/lib/rules/no-unsupported-features/script-setup.js +++ b/tests/lib/rules/no-unsupported-features/script-setup.js @@ -4,16 +4,13 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('script-setup', '^3.0.0') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/script-setup', rule, { diff --git a/tests/lib/rules/no-unsupported-features/slot-scope-attribute.js b/tests/lib/rules/no-unsupported-features/slot-scope-attribute.js index 8f8b0b136..c1e05f10d 100644 --- a/tests/lib/rules/no-unsupported-features/slot-scope-attribute.js +++ b/tests/lib/rules/no-unsupported-features/slot-scope-attribute.js @@ -4,16 +4,13 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('slot-scope-attribute', '^2.4.0') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/slot-scope-attribute', rule, { diff --git a/tests/lib/rules/no-unsupported-features/style-css-vars-injection.js b/tests/lib/rules/no-unsupported-features/style-css-vars-injection.js index df94061f7..c9ba478ad 100644 --- a/tests/lib/rules/no-unsupported-features/style-css-vars-injection.js +++ b/tests/lib/rules/no-unsupported-features/style-css-vars-injection.js @@ -4,14 +4,14 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('style-css-vars-injection', '^3.0.3') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2019, sourceType: 'module' } diff --git a/tests/lib/rules/no-unsupported-features/v-bind-attr-modifier.js b/tests/lib/rules/no-unsupported-features/v-bind-attr-modifier.js index 912c98d9e..7b9931e3c 100644 --- a/tests/lib/rules/no-unsupported-features/v-bind-attr-modifier.js +++ b/tests/lib/rules/no-unsupported-features/v-bind-attr-modifier.js @@ -4,16 +4,13 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('v-bind-attr-modifier', '^3.1.0') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/v-bind-attr-modifier', rule, { diff --git a/tests/lib/rules/no-unsupported-features/v-bind-prop-modifier-shorthand.js b/tests/lib/rules/no-unsupported-features/v-bind-prop-modifier-shorthand.js index 58ffda146..7b1742412 100644 --- a/tests/lib/rules/no-unsupported-features/v-bind-prop-modifier-shorthand.js +++ b/tests/lib/rules/no-unsupported-features/v-bind-prop-modifier-shorthand.js @@ -4,7 +4,7 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') @@ -13,10 +13,7 @@ const buildOptions = utils.optionsBuilder( '^2.6.0' ) const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/v-bind-prop-modifier-shorthand', rule, { diff --git a/tests/lib/rules/no-unsupported-features/v-bind-same-name-shorthand.js b/tests/lib/rules/no-unsupported-features/v-bind-same-name-shorthand.js index 088ba7cbc..3c5e2c8a4 100644 --- a/tests/lib/rules/no-unsupported-features/v-bind-same-name-shorthand.js +++ b/tests/lib/rules/no-unsupported-features/v-bind-same-name-shorthand.js @@ -4,7 +4,7 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') @@ -13,10 +13,7 @@ const buildOptions = utils.optionsBuilder( '^3.3.0' ) const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/v-bind-same-name-shorthand', rule, { diff --git a/tests/lib/rules/no-unsupported-features/v-is.js b/tests/lib/rules/no-unsupported-features/v-is.js index 3212a7578..c9cf3fdc5 100644 --- a/tests/lib/rules/no-unsupported-features/v-is.js +++ b/tests/lib/rules/no-unsupported-features/v-is.js @@ -4,16 +4,13 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('v-is', '^2.6.0') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/v-is', rule, { diff --git a/tests/lib/rules/no-unsupported-features/v-memo.js b/tests/lib/rules/no-unsupported-features/v-memo.js index 8c3ea1249..3b9569cb0 100644 --- a/tests/lib/rules/no-unsupported-features/v-memo.js +++ b/tests/lib/rules/no-unsupported-features/v-memo.js @@ -4,16 +4,13 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('v-memo', '^3.1.0') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/v-memo', rule, { diff --git a/tests/lib/rules/no-unsupported-features/v-model-argument.js b/tests/lib/rules/no-unsupported-features/v-model-argument.js index ceb79784e..e7fe0a4ec 100644 --- a/tests/lib/rules/no-unsupported-features/v-model-argument.js +++ b/tests/lib/rules/no-unsupported-features/v-model-argument.js @@ -4,16 +4,13 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('v-model-argument', '^2.6.0') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/v-model-argument', rule, { diff --git a/tests/lib/rules/no-unsupported-features/v-model-custom-modifiers.js b/tests/lib/rules/no-unsupported-features/v-model-custom-modifiers.js index 521272738..066230306 100644 --- a/tests/lib/rules/no-unsupported-features/v-model-custom-modifiers.js +++ b/tests/lib/rules/no-unsupported-features/v-model-custom-modifiers.js @@ -4,16 +4,13 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('v-model-custom-modifiers', '^2.6.0') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/v-model-custom-modifiers', rule, { diff --git a/tests/lib/rules/no-unsupported-features/v-slot.js b/tests/lib/rules/no-unsupported-features/v-slot.js index a382a7eda..71be84273 100644 --- a/tests/lib/rules/no-unsupported-features/v-slot.js +++ b/tests/lib/rules/no-unsupported-features/v-slot.js @@ -4,16 +4,13 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const rule = require('../../../../lib/rules/no-unsupported-features') const utils = require('./utils') const buildOptions = utils.optionsBuilder('v-slot', '^2.5.0') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('no-unsupported-features/v-slot', rule, { diff --git a/tests/lib/rules/no-unused-components.js b/tests/lib/rules/no-unused-components.js index c87166cbd..4078af76f 100644 --- a/tests/lib/rules/no-unused-components.js +++ b/tests/lib/rules/no-unused-components.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-unused-components') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/no-unused-emit-declarations.js b/tests/lib/rules/no-unused-emit-declarations.js index f3189ea82..17b2f441b 100644 --- a/tests/lib/rules/no-unused-emit-declarations.js +++ b/tests/lib/rules/no-unused-emit-declarations.js @@ -4,15 +4,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-unused-emit-declarations') const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -345,7 +345,9 @@ tester.run('no-unused-emit-declarations', rule, { }>() const change = () => emit('foo'); `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -665,7 +667,6 @@ tester.run('no-unused-emit-declarations', rule, { }>() const change = () => emit('foo'); `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { messageId: 'unused', @@ -673,7 +674,10 @@ tester.run('no-unused-emit-declarations', rule, { column: 11, endColumn: 36 } - ] + ], + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -699,7 +703,6 @@ tester.run('no-unused-emit-declarations', rule, { defineEmits<{(e: 'foo'): void}>() `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { messageId: 'unused', @@ -707,7 +710,10 @@ tester.run('no-unused-emit-declarations', rule, { column: 22, endColumn: 38 } - ] + ], + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', diff --git a/tests/lib/rules/no-unused-properties.js b/tests/lib/rules/no-unused-properties.js index 93a5279f0..65b185298 100644 --- a/tests/lib/rules/no-unused-properties.js +++ b/tests/lib/rules/no-unused-properties.js @@ -4,7 +4,7 @@ */ 'use strict' -const { RuleTester, Linter } = require('eslint') +const { RuleTester, Linter } = require('../../eslint-compat') const assert = require('assert') const rule = require('../../../lib/rules/no-unused-properties') const { @@ -12,8 +12,8 @@ const { } = require('../../test-utils/typescript') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -2131,8 +2131,10 @@ tester.run('no-unused-properties', rule, { `, - parserOptions: { - parser: '@typescript-eslint/parser' + languageOptions: { + parserOptions: { + parser: '@typescript-eslint/parser' + } } }, @@ -3900,16 +3902,18 @@ tester.run('no-unused-properties', rule, { // https://github.com/vuejs/eslint-plugin-vue/issues/1789 describe('`vue/no-unused-properties` and `vue/no-unused-components` should not conflict.', () => { const linter = new Linter() - linter.defineParser('vue-eslint-parser', require('vue-eslint-parser')) - linter.defineRule( - 'vue/no-unused-components', - require('../../../lib/rules/no-unused-components') - ) - linter.defineRule('vue/no-unused-properties', rule) - const config = { - parser: 'vue-eslint-parser', - parserOptions: { + files: ['**/*.vue'], + plugins: { + vue: { + rules: { + 'no-unused-components': require('../../../lib/rules/no-unused-components'), + 'no-unused-properties': rule + } + } + }, + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' }, diff --git a/tests/lib/rules/no-unused-refs.js b/tests/lib/rules/no-unused-refs.js index 2547ef05d..7e092ee87 100644 --- a/tests/lib/rules/no-unused-refs.js +++ b/tests/lib/rules/no-unused-refs.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-unused-refs') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-unused-vars.js b/tests/lib/rules/no-unused-vars.js index 5a128e762..39cf9a4c7 100644 --- a/tests/lib/rules/no-unused-vars.js +++ b/tests/lib/rules/no-unused-vars.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-unused-vars') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-unused-vars', rule, { diff --git a/tests/lib/rules/no-use-computed-property-like-method.js b/tests/lib/rules/no-use-computed-property-like-method.js index 4b49c9dbc..63ddc0dd2 100644 --- a/tests/lib/rules/no-use-computed-property-like-method.js +++ b/tests/lib/rules/no-use-computed-property-like-method.js @@ -3,12 +3,15 @@ * See LICENSE file in root directory for full license. */ -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-use-computed-property-like-method') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('no-use-computed-property-like-method', rule, { diff --git a/tests/lib/rules/no-use-v-else-with-v-for.js b/tests/lib/rules/no-use-v-else-with-v-for.js index 8778cc125..896ac122d 100644 --- a/tests/lib/rules/no-use-v-else-with-v-for.js +++ b/tests/lib/rules/no-use-v-else-with-v-for.js @@ -1,11 +1,10 @@ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-use-v-else-with-v-for') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-use-v-else-with-v-for', rule, { diff --git a/tests/lib/rules/no-use-v-if-with-v-for.js b/tests/lib/rules/no-use-v-if-with-v-for.js index 17cc77240..6d2661a4c 100644 --- a/tests/lib/rules/no-use-v-if-with-v-for.js +++ b/tests/lib/rules/no-use-v-if-with-v-for.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-use-v-if-with-v-for') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-use-v-if-with-v-for', rule, { diff --git a/tests/lib/rules/no-useless-concat.js b/tests/lib/rules/no-useless-concat.js index 28ac8240d..eca6901bb 100644 --- a/tests/lib/rules/no-useless-concat.js +++ b/tests/lib/rules/no-useless-concat.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-useless-concat') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-useless-concat', rule, { diff --git a/tests/lib/rules/no-useless-mustaches.js b/tests/lib/rules/no-useless-mustaches.js index 2627eeedf..a40d93f7d 100644 --- a/tests/lib/rules/no-useless-mustaches.js +++ b/tests/lib/rules/no-useless-mustaches.js @@ -3,12 +3,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-useless-mustaches.js') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-useless-template-attributes.js b/tests/lib/rules/no-useless-template-attributes.js index 7639b0f33..bb34c4170 100644 --- a/tests/lib/rules/no-useless-template-attributes.js +++ b/tests/lib/rules/no-useless-template-attributes.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-useless-template-attributes') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-useless-v-bind.js b/tests/lib/rules/no-useless-v-bind.js index 63a55dce9..907125cc1 100644 --- a/tests/lib/rules/no-useless-v-bind.js +++ b/tests/lib/rules/no-useless-v-bind.js @@ -3,12 +3,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-useless-v-bind.js') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-v-for-template-key-on-child.js b/tests/lib/rules/no-v-for-template-key-on-child.js index b3bbf3fec..7c65a2012 100644 --- a/tests/lib/rules/no-v-for-template-key-on-child.js +++ b/tests/lib/rules/no-v-for-template-key-on-child.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-v-for-template-key-on-child') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-v-for-template-key-on-child', rule, { diff --git a/tests/lib/rules/no-v-for-template-key.js b/tests/lib/rules/no-v-for-template-key.js index c784087f6..8de3ddc9c 100644 --- a/tests/lib/rules/no-v-for-template-key.js +++ b/tests/lib/rules/no-v-for-template-key.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-v-for-template-key') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('no-v-for-template-key', rule, { diff --git a/tests/lib/rules/no-v-html.js b/tests/lib/rules/no-v-html.js index 8e62fb770..d9ae67ca1 100644 --- a/tests/lib/rules/no-v-html.js +++ b/tests/lib/rules/no-v-html.js @@ -4,12 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-v-html') const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('no-v-html', rule, { diff --git a/tests/lib/rules/no-v-model-argument.js b/tests/lib/rules/no-v-model-argument.js index 2f02abb83..f8bb7f140 100644 --- a/tests/lib/rules/no-v-model-argument.js +++ b/tests/lib/rules/no-v-model-argument.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/no-v-model-argument') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('no-v-model-argument', rule, { diff --git a/tests/lib/rules/no-v-text-v-html-on-component.js b/tests/lib/rules/no-v-text-v-html-on-component.js index 1dafc17d8..ebf2901ba 100644 --- a/tests/lib/rules/no-v-text-v-html-on-component.js +++ b/tests/lib/rules/no-v-text-v-html-on-component.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-v-text-v-html-on-component') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/no-v-text.js b/tests/lib/rules/no-v-text.js index df355f99e..76756d188 100644 --- a/tests/lib/rules/no-v-text.js +++ b/tests/lib/rules/no-v-text.js @@ -5,12 +5,11 @@ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-v-text') const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('no-v-text', rule, { diff --git a/tests/lib/rules/no-watch-after-await.js b/tests/lib/rules/no-watch-after-await.js index 97ec9c608..06da09cf3 100644 --- a/tests/lib/rules/no-watch-after-await.js +++ b/tests/lib/rules/no-watch-after-await.js @@ -3,12 +3,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/no-watch-after-await') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('no-watch-after-await', rule, { @@ -127,7 +130,7 @@ tester.run('no-watch-after-await', rule, { await doSomething() `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -140,7 +143,7 @@ tester.run('no-watch-after-await', rule, { watchEffect(() => { /* ... */ }) // not error `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -153,7 +156,7 @@ tester.run('no-watch-after-await', rule, { watchEffect(() => { /* ... */ }) // not error `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -167,7 +170,7 @@ tester.run('no-watch-after-await', rule, { watch(foo, () => { /* ... */ }) `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } } ], invalid: [ diff --git a/tests/lib/rules/object-curly-newline.js b/tests/lib/rules/object-curly-newline.js index 9fcacb77e..6363a50e9 100644 --- a/tests/lib/rules/object-curly-newline.js +++ b/tests/lib/rules/object-curly-newline.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/object-curly-newline') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('object-curly-newline', rule, { diff --git a/tests/lib/rules/object-curly-spacing.js b/tests/lib/rules/object-curly-spacing.js index eb26eab96..181587eb2 100644 --- a/tests/lib/rules/object-curly-spacing.js +++ b/tests/lib/rules/object-curly-spacing.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/object-curly-spacing') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('object-curly-spacing', rule, { diff --git a/tests/lib/rules/object-property-newline.js b/tests/lib/rules/object-property-newline.js index 2de002caf..31e37dfb1 100644 --- a/tests/lib/rules/object-property-newline.js +++ b/tests/lib/rules/object-property-newline.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/object-property-newline') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('object-property-newline', rule, { diff --git a/tests/lib/rules/object-shorthand.js b/tests/lib/rules/object-shorthand.js index 62a9a9efa..f216048f0 100644 --- a/tests/lib/rules/object-shorthand.js +++ b/tests/lib/rules/object-shorthand.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/object-shorthand') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/one-component-per-file.js b/tests/lib/rules/one-component-per-file.js index 579c470fc..7c62e69a9 100644 --- a/tests/lib/rules/one-component-per-file.js +++ b/tests/lib/rules/one-component-per-file.js @@ -5,10 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/one-component-per-file') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/operator-linebreak.js b/tests/lib/rules/operator-linebreak.js index 8b0c731e6..68843a7ef 100644 --- a/tests/lib/rules/operator-linebreak.js +++ b/tests/lib/rules/operator-linebreak.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/operator-linebreak') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('operator-linebreak', rule, { diff --git a/tests/lib/rules/order-in-components.js b/tests/lib/rules/order-in-components.js index 669383e52..25010f483 100644 --- a/tests/lib/rules/order-in-components.js +++ b/tests/lib/rules/order-in-components.js @@ -5,14 +5,13 @@ 'use strict' const rule = require('../../../lib/rules/order-in-components') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const ruleTester = new RuleTester() - -const parserOptions = { +const languageOptions = { ecmaVersion: 2020, sourceType: 'module' } +const ruleTester = new RuleTester({ languageOptions }) ruleTester.run('order-in-components', rule, { valid: [ @@ -32,7 +31,7 @@ ruleTester.run('order-in-components', rule, { }, } `, - parserOptions + languageOptions }, { filename: 'example.vue', @@ -75,21 +74,21 @@ ruleTester.run('order-in-components', rule, { renderError, }; `, - parserOptions + languageOptions }, { filename: 'test.vue', code: ` export default {} `, - parserOptions + languageOptions }, { filename: 'test.vue', code: ` export default 'example-text' `, - parserOptions + languageOptions }, { filename: 'test.jsx', @@ -103,7 +102,7 @@ ruleTester.run('order-in-components', rule, { }, } `, - parserOptions + languageOptions }, { filename: 'test.js', @@ -118,14 +117,14 @@ ruleTester.run('order-in-components', rule, { } }) `, - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', code: ` Vue.component('example') `, - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -141,7 +140,7 @@ ruleTester.run('order-in-components', rule, { } }) `, - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -157,14 +156,14 @@ ruleTester.run('order-in-components', rule, { } }) `, - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', code: ` new Vue() `, - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { filename: 'example.vue', @@ -176,8 +175,7 @@ ruleTester.run('order-in-components', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { parser: require('vue-eslint-parser') } } ], @@ -210,14 +208,14 @@ ruleTester.run('order-in-components', rule, { }, } `, - parserOptions, errors: [ { message: 'The "props" property should be above the "data" property on line 4.', line: 9 } - ] + ], + languageOptions }, { filename: 'test.jsx', @@ -257,11 +255,6 @@ ruleTester.run('order-in-components', rule, { }, } `, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - ecmaFeatures: { jsx: true } - }, errors: [ { message: @@ -278,7 +271,14 @@ ruleTester.run('order-in-components', rule, { 'The "props" property should be above the "data" property on line 9.', line: 14 } - ] + ], + languageOptions: { + ecmaVersion: 6, + sourceType: 'module', + parserOptions: { + ecmaFeatures: { jsx: true } + } + } }, { filename: 'test.js', @@ -306,14 +306,14 @@ ruleTester.run('order-in-components', rule, { template: '
' }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: 'The "components" property should be above the "data" property on line 4.', line: 9 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -341,14 +341,14 @@ ruleTester.run('order-in-components', rule, { template: '
' }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: 'The "components" property should be above the "data" property on line 4.', line: 9 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -378,14 +378,14 @@ ruleTester.run('order-in-components', rule, { template: '
' }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: 'The "components" property should be above the "data" property on line 5.', line: 10 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -415,7 +415,6 @@ ruleTester.run('order-in-components', rule, { template: '
' }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: @@ -427,7 +426,8 @@ ruleTester.run('order-in-components', rule, { 'The "components" property should be above the "data" property on line 5.', line: 10 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'example.vue', @@ -467,14 +467,14 @@ ruleTester.run('order-in-components', rule, { }, }; `, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 16 } - ] + ], + languageOptions }, { filename: 'example.vue', @@ -495,14 +495,14 @@ ruleTester.run('order-in-components', rule, { }; `, options: [{ order: ['data', 'test', 'name'] }], - parserOptions, errors: [ { message: 'The "test" property should be above the "name" property on line 5.', line: 6 } - ] + ], + languageOptions }, { filename: 'example.vue', @@ -524,14 +524,14 @@ ruleTester.run('order-in-components', rule, { } }; `, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 4.', line: 7 } - ] + ], + languageOptions }, { filename: 'example.vue', @@ -553,27 +553,27 @@ ruleTester.run('order-in-components', rule, { }/*test*/ }; `, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 4.', line: 7 } - ] + ], + languageOptions }, { filename: 'example.vue', code: `export default {data(){},name:'burger'};`, output: `export default {name:'burger',data(){}};`, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 1.', line: 1 } - ] + ], + languageOptions }, { // side-effects CallExpression @@ -587,14 +587,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects NewExpression @@ -608,14 +608,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects UpdateExpression @@ -629,14 +629,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects AssignmentExpression @@ -650,14 +650,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects TaggedTemplateExpression @@ -671,14 +671,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects key @@ -692,14 +692,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects object deep props @@ -713,14 +713,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects array elements @@ -734,14 +734,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects call at middle @@ -755,14 +755,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects delete @@ -776,14 +776,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects within BinaryExpression @@ -797,14 +797,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects within ConditionalExpression @@ -818,14 +818,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // side-effects within TemplateLiteral @@ -839,14 +839,14 @@ ruleTester.run('order-in-components', rule, { }; `, output: null, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 6 } - ] + ], + languageOptions }, { // without side-effects @@ -867,14 +867,14 @@ ruleTester.run('order-in-components', rule, { test: fn(), }; `, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 5 } - ] + ], + languageOptions }, { // don't side-effects @@ -913,14 +913,14 @@ ruleTester.run('order-in-components', rule, { testOptionalChaining: a?.b?.c, }; `, - parserOptions, errors: [ { message: 'The "name" property should be above the "data" property on line 3.', line: 15 } - ] + ], + languageOptions }, { filename: 'example.vue', @@ -944,18 +944,20 @@ ruleTester.run('order-in-components', rule, { }; `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ...parserOptions, - parser: { ts: require.resolve('@typescript-eslint/parser') } - }, errors: [ { message: 'The "props" property should be above the "setup" property on line 4.', line: 5 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { + parser: { ts: require.resolve('@typescript-eslint/parser') } + } + } }, { filename: 'example.vue', @@ -975,15 +977,14 @@ ruleTester.run('order-in-components', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions, errors: [ { message: 'The "name" property should be above the "inheritAttrs" property on line 4.', line: 5 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } } ] }) diff --git a/tests/lib/rules/padding-line-between-blocks.js b/tests/lib/rules/padding-line-between-blocks.js index f53461bae..e78422e87 100644 --- a/tests/lib/rules/padding-line-between-blocks.js +++ b/tests/lib/rules/padding-line-between-blocks.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/padding-line-between-blocks') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('padding-line-between-blocks', rule, { diff --git a/tests/lib/rules/padding-line-between-tags.js b/tests/lib/rules/padding-line-between-tags.js index 70c7a57bb..2bb656201 100644 --- a/tests/lib/rules/padding-line-between-tags.js +++ b/tests/lib/rules/padding-line-between-tags.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/padding-line-between-tags') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/padding-lines-in-component-definition.js b/tests/lib/rules/padding-lines-in-component-definition.js index 7b2eda6c8..702897431 100644 --- a/tests/lib/rules/padding-lines-in-component-definition.js +++ b/tests/lib/rules/padding-lines-in-component-definition.js @@ -4,15 +4,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/padding-lines-in-component-definition') const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -1069,7 +1069,7 @@ tester.run('padding-lines-in-component-definition', rule, { b: { type: String, }, - // eslint-disable-next-line padding-lines-in-component-definition + // foo c: { type: String, }, @@ -1098,7 +1098,7 @@ tester.run('padding-lines-in-component-definition', rule, { type: String, }, - // eslint-disable-next-line padding-lines-in-component-definition + // foo c: { type: String, }, diff --git a/tests/lib/rules/prefer-define-options.js b/tests/lib/rules/prefer-define-options.js index f3d9d88b0..5b7f20e0d 100644 --- a/tests/lib/rules/prefer-define-options.js +++ b/tests/lib/rules/prefer-define-options.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/prefer-define-options') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/prefer-import-from-vue.js b/tests/lib/rules/prefer-import-from-vue.js index 5c87404c2..519d0a877 100644 --- a/tests/lib/rules/prefer-import-from-vue.js +++ b/tests/lib/rules/prefer-import-from-vue.js @@ -4,11 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/prefer-import-from-vue') const tester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/prefer-prop-type-boolean-first.js b/tests/lib/rules/prefer-prop-type-boolean-first.js index 1c66f8417..e01759450 100644 --- a/tests/lib/rules/prefer-prop-type-boolean-first.js +++ b/tests/lib/rules/prefer-prop-type-boolean-first.js @@ -4,15 +4,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/prefer-prop-type-boolean-first') const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/prefer-separate-static-class.js b/tests/lib/rules/prefer-separate-static-class.js index 498fc90dd..5b5a508ac 100644 --- a/tests/lib/rules/prefer-separate-static-class.js +++ b/tests/lib/rules/prefer-separate-static-class.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/prefer-separate-static-class') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/prefer-template.js b/tests/lib/rules/prefer-template.js index e35fa6d1f..0c4b3366b 100644 --- a/tests/lib/rules/prefer-template.js +++ b/tests/lib/rules/prefer-template.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/prefer-template') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('prefer-template', rule, { diff --git a/tests/lib/rules/prefer-true-attribute-shorthand.js b/tests/lib/rules/prefer-true-attribute-shorthand.js index 0bad5c173..342b0246c 100644 --- a/tests/lib/rules/prefer-true-attribute-shorthand.js +++ b/tests/lib/rules/prefer-true-attribute-shorthand.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/prefer-true-attribute-shorthand') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/prop-name-casing.js b/tests/lib/rules/prop-name-casing.js index d3ba65936..0ec845938 100644 --- a/tests/lib/rules/prop-name-casing.js +++ b/tests/lib/rules/prop-name-casing.js @@ -6,9 +6,9 @@ const semver = require('semver') const rule = require('../../../lib/rules/prop-name-casing') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const parserOptions = { +const languageOptions = { ecmaVersion: 2018, sourceType: 'module' } @@ -23,7 +23,7 @@ ruleTester.run('prop-name-casing', rule, { props: ['greetingText'] } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -32,7 +32,7 @@ ruleTester.run('prop-name-casing', rule, { props: some_props } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -43,7 +43,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -53,7 +53,7 @@ ruleTester.run('prop-name-casing', rule, { } `, options: ['camelCase'], - parserOptions + languageOptions }, { filename: 'test.vue', @@ -63,7 +63,7 @@ ruleTester.run('prop-name-casing', rule, { } `, options: ['snake_case'], - parserOptions + languageOptions }, { filename: 'test.vue', @@ -74,7 +74,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -86,7 +86,7 @@ ruleTester.run('prop-name-casing', rule, { } `, options: ['camelCase'], - parserOptions + languageOptions }, { filename: 'test.vue', @@ -98,7 +98,7 @@ ruleTester.run('prop-name-casing', rule, { } `, options: ['snake_case'], - parserOptions + languageOptions }, { // computed property name @@ -110,7 +110,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // computed property name @@ -122,7 +122,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // TemplateLiteral computed property does not warn @@ -134,7 +134,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // shorthand @@ -146,7 +146,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // valiable computed property name does not warn @@ -158,7 +158,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // valiable computed property name does not warn @@ -170,7 +170,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // BinaryExpression computed property name does not warn @@ -182,7 +182,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // CallExpression computed property name does not warn @@ -194,7 +194,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // ThisExpression computed property name does not warn @@ -206,7 +206,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // ArrayExpression computed property name does not warn @@ -218,7 +218,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // number Literal computed property name @@ -230,7 +230,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // boolean Literal computed property name @@ -242,7 +242,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // null Literal computed property name @@ -254,7 +254,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // Japanese characters @@ -266,7 +266,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // emoji @@ -278,7 +278,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // #862 @@ -290,7 +290,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { // #932 @@ -302,7 +302,7 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -314,7 +314,7 @@ ruleTester.run('prop-name-casing', rule, { } `, options: ['snake_case'], - parserOptions + languageOptions }, { filename: 'test.vue', @@ -325,8 +325,10 @@ ruleTester.run('prop-name-casing', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', @@ -335,8 +337,10 @@ ruleTester.run('prop-name-casing', rule, { defineProps(['greetingText']) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', @@ -348,10 +352,12 @@ ruleTester.run('prop-name-casing', rule, { defineProps() `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ...parserOptions, - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ], @@ -366,14 +372,14 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions, errors: [ { message: 'Prop "greeting_text" is not in camelCase.', type: 'Property', line: 4 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -385,14 +391,14 @@ ruleTester.run('prop-name-casing', rule, { } `, options: ['camelCase'], - parserOptions, errors: [ { message: 'Prop "greeting_text" is not in camelCase.', type: 'Property', line: 4 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -402,14 +408,14 @@ ruleTester.run('prop-name-casing', rule, { } `, options: ['camelCase'], - parserOptions, errors: [ { message: 'Prop "greeting_text" is not in camelCase.', type: 'Literal', line: 3 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -421,14 +427,14 @@ ruleTester.run('prop-name-casing', rule, { } `, options: ['snake_case'], - parserOptions, errors: [ { message: 'Prop "greetingText" is not in snake_case.', type: 'Property', line: 4 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -440,14 +446,14 @@ ruleTester.run('prop-name-casing', rule, { } `, options: ['camelCase'], - parserOptions, errors: [ { message: 'Prop "greeting-text" is not in camelCase.', type: 'Property', line: 4 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -459,14 +465,14 @@ ruleTester.run('prop-name-casing', rule, { } `, options: ['snake_case'], - parserOptions, errors: [ { message: 'Prop "greeting-text" is not in snake_case.', type: 'Property', line: 4 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -477,14 +483,14 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions, errors: [ { message: 'Prop "greeting_text" is not in camelCase.', type: 'Property', line: 4 } - ] + ], + languageOptions }, { // computed property name @@ -496,14 +502,14 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions, errors: [ { message: 'Prop "greeting-text" is not in camelCase.', type: 'Property', line: 4 } - ] + ], + languageOptions }, { // shorthand @@ -515,14 +521,14 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions, errors: [ { message: 'Prop "greeting_text" is not in camelCase.', type: 'Property', line: 4 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -533,14 +539,14 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions, errors: [ { message: 'Prop "abc-123-def" is not in camelCase.', type: 'Property', line: 4 } - ] + ], + languageOptions }, { // Parentheses computed property name @@ -552,14 +558,14 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions, errors: [ { message: 'Prop "greeting-text" is not in camelCase.', type: 'Property', line: 4 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -570,8 +576,8 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions, - errors: ['Prop "_item" is not in camelCase.'] + errors: ['Prop "_item" is not in camelCase.'], + languageOptions }, { filename: 'test.vue', @@ -583,8 +589,8 @@ ruleTester.run('prop-name-casing', rule, { } `, options: ['snake_case'], - parserOptions, - errors: ['Prop "_itemName" is not in snake_case.'] + errors: ['Prop "_itemName" is not in snake_case.'], + languageOptions }, { // TemplateLiteral computed property @@ -596,8 +602,8 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions, - errors: ['Prop "greeting-text" is not in camelCase.'] + errors: ['Prop "greeting-text" is not in camelCase.'], + languageOptions }, { // RegExp Literal computed property name @@ -609,8 +615,8 @@ ruleTester.run('prop-name-casing', rule, { } } `, - parserOptions, - errors: ['Prop "/greeting-text/" is not in camelCase.'] + errors: ['Prop "/greeting-text/" is not in camelCase.'], + languageOptions }, { filename: 'test.vue', @@ -621,14 +627,16 @@ ruleTester.run('prop-name-casing', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions, errors: [ { message: 'Prop "greeting_text" is not in camelCase.', line: 4 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', @@ -637,14 +645,16 @@ ruleTester.run('prop-name-casing', rule, { defineProps(['greeting_text']) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions, errors: [ { message: 'Prop "greeting_text" is not in camelCase.', line: 3 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, ...(semver.lt( require('@typescript-eslint/parser/package.json').version, @@ -662,10 +672,12 @@ ruleTester.run('prop-name-casing', rule, { defineProps() `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ...parserOptions, - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, errors: [ { diff --git a/tests/lib/rules/quote-props.js b/tests/lib/rules/quote-props.js index 378affe72..9d5caa890 100644 --- a/tests/lib/rules/quote-props.js +++ b/tests/lib/rules/quote-props.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/quote-props') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/require-component-is.js b/tests/lib/rules/require-component-is.js index 081b0baa7..e4de51629 100644 --- a/tests/lib/rules/require-component-is.js +++ b/tests/lib/rules/require-component-is.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/require-component-is') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('require-component-is', rule, { diff --git a/tests/lib/rules/require-default-prop.js b/tests/lib/rules/require-default-prop.js index abb1fcb37..97aea4919 100644 --- a/tests/lib/rules/require-default-prop.js +++ b/tests/lib/rules/require-default-prop.js @@ -6,13 +6,13 @@ const semver = require('semver') const rule = require('../../../lib/rules/require-default-prop') -const RuleTester = require('eslint').RuleTester -const parserOptions = { +const RuleTester = require('../../eslint-compat').RuleTester +const languageOptions = { ecmaVersion: 2020, sourceType: 'module' } -const ruleTester = new RuleTester({ parserOptions }) +const ruleTester = new RuleTester({ languageOptions }) ruleTester.run('require-default-prop', rule, { valid: [ { @@ -54,8 +54,6 @@ ruleTester.run('require-default-prop', rule, { }, i: Boolean, j: [Boolean], - // eslint-disable-next-line require-default-prop - k: Number } } ` @@ -118,7 +116,10 @@ ruleTester.run('require-default-prop', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser') + + languageOptions: { + parser: require('@typescript-eslint/parser') + } }, { filename: 'test.vue', @@ -132,7 +133,9 @@ ruleTester.run('require-default-prop', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('@typescript-eslint/parser') + } }, { filename: 'test.vue', @@ -180,7 +183,7 @@ ruleTester.run('require-default-prop', rule, { export default { props: ['foo'] }`, - parserOptions + languageOptions }, // sparse array @@ -209,8 +212,10 @@ ruleTester.run('require-default-prop', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', @@ -219,8 +224,10 @@ ruleTester.run('require-default-prop', rule, { defineProps(['foo']) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', @@ -232,10 +239,12 @@ ruleTester.run('require-default-prop', rule, { defineProps() `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ...parserOptions, - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -248,10 +257,10 @@ ruleTester.run('require-default-prop', rule, { withDefaults(defineProps(), {foo:42}) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ...parserOptions, - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } } }, { @@ -268,10 +277,10 @@ ruleTester.run('require-default-prop', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ...parserOptions, - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } } }, { @@ -298,10 +307,10 @@ ruleTester.run('require-default-prop', rule, { }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ...parserOptions, - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } } }, { @@ -315,10 +324,10 @@ ruleTester.run('require-default-prop', rule, { const props = defineProps(); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ...parserOptions, - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } } } ], @@ -383,13 +392,15 @@ ruleTester.run('require-default-prop', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), errors: [ { message: `Prop 'a' requires default value to be set.`, line: 4 } - ] + ], + languageOptions: { + parser: require('@typescript-eslint/parser') + } }, { filename: 'test.vue', @@ -402,13 +413,13 @@ ruleTester.run('require-default-prop', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), errors: [ { message: `Prop 'a' requires default value to be set.`, line: 4 } - ] + ], + languageOptions: { parser: require('@typescript-eslint/parser') } }, // computed properties @@ -522,14 +533,16 @@ ruleTester.run('require-default-prop', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions, errors: [ { message: "Prop 'foo' requires default value to be set.", line: 4 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, ...(semver.lt( require('@typescript-eslint/parser/package.json').version, @@ -547,10 +560,12 @@ ruleTester.run('require-default-prop', rule, { withDefaults(defineProps(), {bar:42}) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ...parserOptions, - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } }, errors: [ { diff --git a/tests/lib/rules/require-direct-export.js b/tests/lib/rules/require-direct-export.js index bf25849df..cec06c7a0 100644 --- a/tests/lib/rules/require-direct-export.js +++ b/tests/lib/rules/require-direct-export.js @@ -5,13 +5,15 @@ 'use strict' const rule = require('../../../lib/rules/require-direct-export') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module', - ecmaFeatures: { jsx: true } + parserOptions: { + ecmaFeatures: { jsx: true } + } } }) ruleTester.run('require-direct-export', rule, { diff --git a/tests/lib/rules/require-emit-validator.js b/tests/lib/rules/require-emit-validator.js index d539b55ea..0a509a6c1 100644 --- a/tests/lib/rules/require-emit-validator.js +++ b/tests/lib/rules/require-emit-validator.js @@ -9,7 +9,7 @@ const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester() ruleTester.run('require-emit-validator', rule, { @@ -25,7 +25,7 @@ ruleTester.run('require-emit-validator', rule, { } } `, - parserOptions: { ecmaVersion: 2018, sourceType: 'module' } + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } }, { filename: 'test.vue', @@ -36,7 +36,7 @@ ruleTester.run('require-emit-validator', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -49,7 +49,7 @@ ruleTester.run('require-emit-validator', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -60,7 +60,7 @@ ruleTester.run('require-emit-validator', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -71,7 +71,7 @@ ruleTester.run('require-emit-validator', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -80,7 +80,7 @@ ruleTester.run('require-emit-validator', rule, { emits } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -89,7 +89,7 @@ ruleTester.run('require-emit-validator', rule, { emits: externalEmits } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -98,7 +98,7 @@ ruleTester.run('require-emit-validator', rule, { emits: [] } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -107,7 +107,7 @@ ruleTester.run('require-emit-validator', rule, { emits: {} } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -118,8 +118,11 @@ ruleTester.run('require-emit-validator', rule, { } }) `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -132,8 +135,11 @@ ruleTester.run('require-emit-validator', rule, { }, }) `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -145,7 +151,7 @@ ruleTester.run('require-emit-validator', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -157,7 +163,7 @@ ruleTester.run('require-emit-validator', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -166,11 +172,11 @@ ruleTester.run('require-emit-validator', rule, { const emit = defineEmits<(e: 'foo')=>void>() `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } } }, { @@ -191,7 +197,6 @@ ruleTester.run('require-emit-validator', rule, { emits: ['foo', bar, \`baz\`, foo()] } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'missing', @@ -213,7 +218,8 @@ ruleTester.run('require-emit-validator', rule, { data: { name: 'Unknown emit' }, line: 3 } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.js', @@ -222,7 +228,6 @@ ruleTester.run('require-emit-validator', rule, { emits: ['foo', bar, \`baz\`, foo()] }) `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'missing', @@ -244,7 +249,8 @@ ruleTester.run('require-emit-validator', rule, { data: { name: 'Unknown emit' }, line: 3 } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -254,7 +260,6 @@ ruleTester.run('require-emit-validator', rule, { foo: null } }`, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'skipped', @@ -272,7 +277,8 @@ ruleTester.run('require-emit-validator', rule, { } ] } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -283,7 +289,6 @@ ruleTester.run('require-emit-validator', rule, { bar: (payload) => {} } }`, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'skipped', @@ -302,7 +307,8 @@ ruleTester.run('require-emit-validator', rule, { } ] } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -315,14 +321,14 @@ ruleTester.run('require-emit-validator', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'missing', data: { name: 'foo' }, line: 4 } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -333,15 +339,18 @@ ruleTester.run('require-emit-validator', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'missing', data: { name: 'foo' }, line: 4 } - ] + ], + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -350,18 +359,18 @@ ruleTester.run('require-emit-validator', rule, { const emit = defineEmits(['foo']) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 6, - sourceType: 'module' - }, errors: [ { messageId: 'missing', data: { name: 'foo' }, line: 3 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -370,18 +379,18 @@ ruleTester.run('require-emit-validator', rule, { const emit = defineEmits({foo:null}) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 6, - sourceType: 'module' - }, errors: [ { messageId: 'skipped', data: { name: 'foo' }, line: 3 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } } ] }) diff --git a/tests/lib/rules/require-explicit-emits.js b/tests/lib/rules/require-explicit-emits.js index 89ae47627..83af984ed 100644 --- a/tests/lib/rules/require-explicit-emits.js +++ b/tests/lib/rules/require-explicit-emits.js @@ -4,15 +4,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/require-explicit-emits') const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -434,7 +434,9 @@ tester.run('require-explicit-emits', rule, { }>() `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -446,7 +448,9 @@ tester.run('require-explicit-emits', rule, { defineEmits<(e: 'foo') => void>() `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -459,7 +463,9 @@ tester.run('require-explicit-emits', rule, { defineEmits<(e: 'foo' | 'bar') => void>() `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -472,7 +478,9 @@ tester.run('require-explicit-emits', rule, { const emit = defineEmits<(e: 'foo' | 'bar') => void>() `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, // unknown emits definition @@ -620,7 +628,9 @@ tester.run('require-explicit-emits', rule, { emit('bar', 42) `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { // new syntax in Vue 3.3 @@ -633,7 +643,9 @@ tester.run('require-explicit-emits', rule, { emit('bar', 42) `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { code: ` @@ -1847,14 +1859,16 @@ emits: {'foo': null} }>() `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { message: 'The "bar" event has been triggered but not declared on `defineEmits`.', line: 3 } - ] + ], + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -1866,14 +1880,16 @@ emits: {'foo': null} defineEmits<(e: 'foo') => void>() `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { message: 'The "bar" event has been triggered but not declared on `defineEmits`.', line: 3 } - ] + ], + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -1901,14 +1917,16 @@ emits: {'foo': null} emit('bar') `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { message: 'The "bar" event has been triggered but not declared on `defineEmits`.', line: 5 } - ] + ], + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -1949,14 +1967,16 @@ emits: {'foo': null} emit('bar') `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { message: 'The "bar" event has been triggered but not declared on `defineEmits`.', line: 5 } - ] + ], + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { // new syntax in Vue 3.3 @@ -1969,14 +1989,16 @@ emits: {'foo': null} emit('bar') `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { message: 'The "bar" event has been triggered but not declared on `defineEmits`.', line: 6 } - ] + ], + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { code: ` @@ -2007,14 +2029,16 @@ emits: {'foo': null} const emit = defineEmits<(e: 'foo') => void>() `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { message: 'The "bar" event has been triggered but not declared on `defineEmits`.', line: 3 } - ] + ], + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } } ] }) diff --git a/tests/lib/rules/require-explicit-slots.js b/tests/lib/rules/require-explicit-slots.js index 1849ea9a1..91ce0ce0b 100644 --- a/tests/lib/rules/require-explicit-slots.js +++ b/tests/lib/rules/require-explicit-slots.js @@ -4,15 +4,17 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/require-explicit-slots') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - parser: require.resolve('@typescript-eslint/parser'), + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, - sourceType: 'module' + sourceType: 'module', + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }) @@ -126,8 +128,10 @@ tester.run('require-explicit-slots', rule, { `, - parserOptions: { - parser: null + languageOptions: { + parserOptions: { + parser: null + } } } ], diff --git a/tests/lib/rules/require-expose.js b/tests/lib/rules/require-expose.js index 76932cd95..4e0d54738 100644 --- a/tests/lib/rules/require-expose.js +++ b/tests/lib/rules/require-expose.js @@ -5,11 +5,11 @@ 'use strict' const rule = require('../../../lib/rules/require-expose') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/require-macro-variable-name.js b/tests/lib/rules/require-macro-variable-name.js index ed99a64e5..3a37d5c1d 100644 --- a/tests/lib/rules/require-macro-variable-name.js +++ b/tests/lib/rules/require-macro-variable-name.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/require-macro-variable-name') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/require-name-property.js b/tests/lib/rules/require-name-property.js index 19f5b7c6d..fe0357a30 100644 --- a/tests/lib/rules/require-name-property.js +++ b/tests/lib/rules/require-name-property.js @@ -5,9 +5,9 @@ 'use strict' const rule = require('../../../lib/rules/require-name-property') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const parserOptions = { +const languageOptions = { ecmaVersion: 2018, sourceType: 'module' } @@ -22,7 +22,7 @@ ruleTester.run('require-name-property', rule, { name: 'IssaName' } `, - parserOptions + languageOptions }, { filename: 'ValidComponent.vue', @@ -31,7 +31,7 @@ ruleTester.run('require-name-property', rule, { name: undefined } `, - parserOptions + languageOptions }, { filename: 'ValidComponent.vue', @@ -40,7 +40,7 @@ ruleTester.run('require-name-property', rule, { name: '' } `, - parserOptions + languageOptions }, { code: ` @@ -50,7 +50,7 @@ ruleTester.run('require-name-property', rule, { } }) `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -62,8 +62,10 @@ ruleTester.run('require-name-property', rule, { `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } } ], @@ -74,7 +76,6 @@ ruleTester.run('require-name-property', rule, { export default { } `, - parserOptions, errors: [ { message: 'Required name property is not set.', @@ -90,7 +91,8 @@ ruleTester.run('require-name-property', rule, { } ] } - ] + ], + languageOptions }, { filename: 'InvalidComponent.vue', @@ -98,7 +100,6 @@ ruleTester.run('require-name-property', rule, { export default defineComponent({ }) `, - parserOptions, errors: [ { message: 'Required name property is not set.', @@ -114,14 +115,14 @@ ruleTester.run('require-name-property', rule, { } ] } - ] + ], + languageOptions }, { filename: 'InvalidComponent.vue', code: ` export default defineComponent({ }) `, - parserOptions, errors: [ { message: 'Required name property is not set.', @@ -137,14 +138,14 @@ ruleTester.run('require-name-property', rule, { } ] } - ] + ], + languageOptions }, { filename: 'InvalidComponent.vue', code: ` export default { } `, - parserOptions, errors: [ { message: 'Required name property is not set.', @@ -160,7 +161,8 @@ ruleTester.run('require-name-property', rule, { } ] } - ] + ], + languageOptions }, { filename: 'InvalidComponent.vue', @@ -169,7 +171,6 @@ ruleTester.run('require-name-property', rule, { nameNot: 'IssaNameNot' } `, - parserOptions, errors: [ { message: 'Required name property is not set.', @@ -186,7 +187,8 @@ ruleTester.run('require-name-property', rule, { } ] } - ] + ], + languageOptions }, { filename: 'InvalidComponent.vue', @@ -195,7 +197,6 @@ ruleTester.run('require-name-property', rule, { nameNot: 'IssaNameNot' }) `, - parserOptions, errors: [ { message: 'Required name property is not set.', @@ -212,7 +213,8 @@ ruleTester.run('require-name-property', rule, { } ] } - ] + ], + languageOptions }, { @@ -224,7 +226,6 @@ ruleTester.run('require-name-property', rule, { } } `, - parserOptions, errors: [ { message: 'Required name property is not set.', @@ -243,7 +244,8 @@ ruleTester.run('require-name-property', rule, { } ] } - ] + ], + languageOptions }, { filename: 'InvalidComponent.vue', @@ -252,7 +254,6 @@ ruleTester.run('require-name-property', rule, { [name]: 'IssaName' } `, - parserOptions, errors: [ { message: 'Required name property is not set.', @@ -269,7 +270,8 @@ ruleTester.run('require-name-property', rule, { } ] } - ] + ], + languageOptions } ] }) diff --git a/tests/lib/rules/require-prop-comment.js b/tests/lib/rules/require-prop-comment.js index 3863abc3d..f2ee24ee9 100644 --- a/tests/lib/rules/require-prop-comment.js +++ b/tests/lib/rules/require-prop-comment.js @@ -4,15 +4,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/require-prop-comment') const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } @@ -89,8 +89,10 @@ tester.run('require-prop-comment', rule, { const props = defineProps() `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -261,16 +263,18 @@ tester.run('require-prop-comment', rule, { const props = defineProps() `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { line: 4, column: 9, message: 'The "a" property should have a JSDoc comment.' } - ] + ], + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } } ] }) diff --git a/tests/lib/rules/require-prop-type-constructor.js b/tests/lib/rules/require-prop-type-constructor.js index a4d6766df..acd098634 100644 --- a/tests/lib/rules/require-prop-type-constructor.js +++ b/tests/lib/rules/require-prop-type-constructor.js @@ -8,10 +8,10 @@ const rule = require('../../../lib/rules/require-prop-type-constructor') const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2020, sourceType: 'module' } @@ -224,13 +224,13 @@ ruleTester.run('require-prop-type-constructor', rule, { } } `, - parser: require.resolve('@typescript-eslint/parser'), errors: [ { message: 'The "a" property should be a constructor.', line: 5 } - ] + ], + languageOptions: { parser: require('@typescript-eslint/parser') } }, { filename: 'ExtraCommas.vue', @@ -248,13 +248,13 @@ ruleTester.run('require-prop-type-constructor', rule, { } } `, - parser: require.resolve('@typescript-eslint/parser'), errors: [ { message: 'The "name" property should be a constructor.', line: 4 } - ] + ], + languageOptions: { parser: require('@typescript-eslint/parser') } }, { filename: 'LiteralsComponent.vue', @@ -381,13 +381,13 @@ ruleTester.run('require-prop-type-constructor', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), errors: [ { message: 'The "a" property should be a constructor.', line: 5 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } } ] }) diff --git a/tests/lib/rules/require-prop-types.js b/tests/lib/rules/require-prop-types.js index f50b4b116..bf38d9fd7 100644 --- a/tests/lib/rules/require-prop-types.js +++ b/tests/lib/rules/require-prop-types.js @@ -9,7 +9,7 @@ const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester() ruleTester.run('require-prop-types', rule, { @@ -25,7 +25,7 @@ ruleTester.run('require-prop-types', rule, { } } `, - parserOptions: { ecmaVersion: 2018, sourceType: 'module' } + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } }, { filename: 'test.vue', @@ -36,7 +36,7 @@ ruleTester.run('require-prop-types', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -49,7 +49,7 @@ ruleTester.run('require-prop-types', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -62,7 +62,7 @@ ruleTester.run('require-prop-types', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -75,7 +75,7 @@ ruleTester.run('require-prop-types', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -88,7 +88,7 @@ ruleTester.run('require-prop-types', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -97,7 +97,7 @@ ruleTester.run('require-prop-types', rule, { props } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -106,7 +106,7 @@ ruleTester.run('require-prop-types', rule, { props: externalProps } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -115,7 +115,7 @@ ruleTester.run('require-prop-types', rule, { props: [] } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -124,7 +124,7 @@ ruleTester.run('require-prop-types', rule, { props: {} } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -137,8 +137,11 @@ ruleTester.run('require-prop-types', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -151,8 +154,11 @@ ruleTester.run('require-prop-types', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -163,8 +169,11 @@ ruleTester.run('require-prop-types', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -173,11 +182,13 @@ ruleTester.run('require-prop-types', rule, { defineProps<{foo:string}>() `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -196,7 +207,7 @@ ruleTester.run('require-prop-types', rule, { const foo = defineModel('foo', {type:String}) `, - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { // defineModel @@ -206,7 +217,7 @@ ruleTester.run('require-prop-types', rule, { const foo = defineModel('foo', String) `, - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { code: ` @@ -215,11 +226,13 @@ ruleTester.run('require-prop-types', rule, { const foo = defineModel('foo') `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ], @@ -232,7 +245,6 @@ ruleTester.run('require-prop-types', rule, { props: ['foo', bar, \`baz\`, foo()] } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Prop "foo" should define at least its type.', @@ -250,7 +262,8 @@ ruleTester.run('require-prop-types', rule, { message: 'Prop "Unknown prop" should define at least its type.', line: 3 } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.js', @@ -259,7 +272,6 @@ ruleTester.run('require-prop-types', rule, { props: ['foo', bar, \`baz\`, foo()] }) `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Prop "foo" should define at least its type.', @@ -277,7 +289,8 @@ ruleTester.run('require-prop-types', rule, { message: 'Prop "Unknown prop" should define at least its type.', line: 3 } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -289,13 +302,13 @@ ruleTester.run('require-prop-types', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Prop "foo" should define at least its type.', line: 4 } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -308,13 +321,13 @@ ruleTester.run('require-prop-types', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Prop "foo" should define at least its type.', line: 4 } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -325,13 +338,13 @@ ruleTester.run('require-prop-types', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Prop "foo" should define at least its type.', line: 4 } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -342,14 +355,17 @@ ruleTester.run('require-prop-types', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Prop "foo" should define at least its type.', line: 4 } - ] + ], + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -360,14 +376,17 @@ ruleTester.run('require-prop-types', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Prop "foo" should define at least its type.', line: 4 } - ] + ], + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -378,14 +397,17 @@ ruleTester.run('require-prop-types', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Prop "foo" should define at least its type.', line: 4 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -394,14 +416,17 @@ ruleTester.run('require-prop-types', rule, { defineProps(['foo']) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Prop "foo" should define at least its type.', line: 3 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { // defineModel @@ -411,7 +436,6 @@ ruleTester.run('require-prop-types', rule, { const foo = defineModel('foo') `, - parser: require.resolve('vue-eslint-parser'), errors: [ { message: 'Prop "modelValue" should define at least its type.', @@ -421,7 +445,8 @@ ruleTester.run('require-prop-types', rule, { message: 'Prop "foo" should define at least its type.', line: 4 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } }, { // defineModel @@ -431,7 +456,6 @@ ruleTester.run('require-prop-types', rule, { const foo = defineModel('foo',{}) `, - parser: require.resolve('vue-eslint-parser'), errors: [ { message: 'Prop "modelValue" should define at least its type.', @@ -441,7 +465,8 @@ ruleTester.run('require-prop-types', rule, { message: 'Prop "foo" should define at least its type.', line: 4 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } } ] }) diff --git a/tests/lib/rules/require-render-return.js b/tests/lib/rules/require-render-return.js index bae823e5e..44da6b083 100644 --- a/tests/lib/rules/require-render-return.js +++ b/tests/lib/rules/require-render-return.js @@ -5,12 +5,14 @@ 'use strict' const rule = require('../../../lib/rules/require-render-return') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const parserOptions = { +const languageOptions = { ecmaVersion: 2018, sourceType: 'module', - ecmaFeatures: { jsx: true } + parserOptions: { + ecmaFeatures: { jsx: true } + } } const ruleTester = new RuleTester() @@ -23,7 +25,7 @@ ruleTester.run('require-render-return', rule, { return {} } })`, - parserOptions + languageOptions }, { code: `Vue.component('test', { @@ -31,19 +33,19 @@ ruleTester.run('require-render-return', rule, { return {} } })`, - parserOptions + languageOptions }, { code: `Vue.component('test', { foo: {} })`, - parserOptions + languageOptions }, { code: `Vue.component('test', { render: foo })`, - parserOptions + languageOptions }, { code: `Vue.component('test', { @@ -51,7 +53,7 @@ ruleTester.run('require-render-return', rule, { return
} })`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -60,7 +62,7 @@ ruleTester.run('require-render-return', rule, { return {} } }`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -70,7 +72,7 @@ ruleTester.run('require-render-return', rule, { return foo } }`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -90,14 +92,14 @@ ruleTester.run('require-render-return', rule, { } } }`, - parserOptions + languageOptions }, { filename: 'test.vue', code: `export default { render: () => null }`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -110,7 +112,7 @@ ruleTester.run('require-render-return', rule, { } } }`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -123,7 +125,7 @@ ruleTester.run('require-render-return', rule, { return h('div', options) } }`, - parserOptions + languageOptions } ], @@ -134,14 +136,14 @@ ruleTester.run('require-render-return', rule, { render() { } }`, - parserOptions, errors: [ { message: 'Expected to return a value in render function.', type: 'Identifier', line: 2 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -152,14 +154,14 @@ ruleTester.run('require-render-return', rule, { } } }`, - parserOptions, errors: [ { message: 'Expected to return a value in render function.', type: 'Identifier', line: 2 } - ] + ], + languageOptions }, { code: `Vue.component('test', { @@ -169,14 +171,14 @@ ruleTester.run('require-render-return', rule, { } } })`, - parserOptions, errors: [ { message: 'Expected to return a value in render function.', type: 'Identifier', line: 2 } - ] + ], + languageOptions }, { code: `app.component('test', { @@ -186,14 +188,14 @@ ruleTester.run('require-render-return', rule, { } } })`, - parserOptions, errors: [ { message: 'Expected to return a value in render function.', type: 'Identifier', line: 2 } - ] + ], + languageOptions }, { code: `Vue.component('test2', { @@ -203,14 +205,14 @@ ruleTester.run('require-render-return', rule, { } } })`, - parserOptions, errors: [ { message: 'Expected to return a value in render function.', type: 'Identifier', line: 2 } - ] + ], + languageOptions }, { code: `Vue.component('test2', { @@ -222,14 +224,14 @@ ruleTester.run('require-render-return', rule, { } } })`, - parserOptions, errors: [ { message: 'Expected to return a value in render function.', type: 'Identifier', line: 2 } - ] + ], + languageOptions } ] }) diff --git a/tests/lib/rules/require-slots-as-functions.js b/tests/lib/rules/require-slots-as-functions.js index 0fe18f828..54e86b527 100644 --- a/tests/lib/rules/require-slots-as-functions.js +++ b/tests/lib/rules/require-slots-as-functions.js @@ -6,11 +6,14 @@ const rule = require('../../../lib/rules/require-slots-as-functions') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) ruleTester.run('require-slots-as-functions', rule, { valid: [ diff --git a/tests/lib/rules/require-toggle-inside-transition.js b/tests/lib/rules/require-toggle-inside-transition.js index 18a33aa3e..815f5de3d 100644 --- a/tests/lib/rules/require-toggle-inside-transition.js +++ b/tests/lib/rules/require-toggle-inside-transition.js @@ -4,12 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/require-toggle-inside-transition') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('require-toggle-inside-transition', rule, { diff --git a/tests/lib/rules/require-typed-object-prop.js b/tests/lib/rules/require-typed-object-prop.js index f574e82d8..3d8d3e58b 100644 --- a/tests/lib/rules/require-typed-object-prop.js +++ b/tests/lib/rules/require-typed-object-prop.js @@ -4,10 +4,14 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/require-typed-object-prop') -const ruleTester = new RuleTester() +const ruleTester = new RuleTester({ + languageOptions: { + parser: require('@typescript-eslint/parser') + } +}) ruleTester.run('require-typed-object-prop', rule, { valid: [ @@ -19,7 +23,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: {} } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -28,7 +32,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: {} }); `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -37,8 +41,11 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps({}); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, // array props { @@ -48,7 +55,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: ['foo'] } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -57,7 +64,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: ['foo'] }); `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -66,8 +73,11 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps(['foo']); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, // primitive props { @@ -77,7 +87,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: String } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -86,7 +96,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: String } }); `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -95,8 +105,11 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps({ foo: String }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, // union { @@ -106,7 +119,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: [Number, String, Boolean] } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -115,7 +128,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: [Number, String, Boolean] } }); `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -124,8 +137,11 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps({ foo: [Number, String, Boolean] }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, // function { @@ -135,7 +151,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: someFunction() } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -144,7 +160,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: someFunction() } }); `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -153,8 +169,11 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps({ foo: someFunction() }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, // typed object { @@ -164,8 +183,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: Object as PropType } } `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -174,8 +192,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: Array as PropType } } `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -184,8 +201,7 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: Object as PropType } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -194,11 +210,13 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps({ foo: Object as PropType }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, @@ -209,11 +227,10 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: Object as () => User } } `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { + languageOptions: { ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parser: require('@typescript-eslint/parser') } }, { @@ -223,11 +240,10 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: Object as () => User } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { + languageOptions: { ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parser: require('@typescript-eslint/parser') } }, { @@ -237,11 +253,13 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps({ foo: Object as () => User }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, // any @@ -252,11 +270,13 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps({ foo: { type: Object as any } }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -270,11 +290,13 @@ ruleTester.run('require-typed-object-prop', rule, { }; `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -288,11 +310,11 @@ ruleTester.run('require-typed-object-prop', rule, { }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } } }, // unknown @@ -303,11 +325,11 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps({ foo: { type: Object as unknown } }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } } }, { @@ -321,11 +343,11 @@ ruleTester.run('require-typed-object-prop', rule, { }; `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } } }, { @@ -339,11 +361,11 @@ ruleTester.run('require-typed-object-prop', rule, { }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } } } ], @@ -355,8 +377,6 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps({ foo: Object }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'expectedTypeAnnotation', @@ -385,7 +405,15 @@ ruleTester.run('require-typed-object-prop', rule, { } ] } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module', + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -394,8 +422,6 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps({ foo: Array }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'expectedTypeAnnotation', @@ -424,7 +450,15 @@ ruleTester.run('require-typed-object-prop', rule, { } ] } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module', + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -433,7 +467,6 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: Object } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'expectedTypeAnnotation', @@ -462,7 +495,8 @@ ruleTester.run('require-typed-object-prop', rule, { } ] } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -471,7 +505,6 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: Object } }); `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'expectedTypeAnnotation', @@ -500,7 +533,8 @@ ruleTester.run('require-typed-object-prop', rule, { } ] } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -509,7 +543,6 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: { type: Object } } }); `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'expectedTypeAnnotation', @@ -538,7 +571,8 @@ ruleTester.run('require-typed-object-prop', rule, { } ] } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -547,7 +581,6 @@ ruleTester.run('require-typed-object-prop', rule, { props: { foo: { type: Object } } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'expectedTypeAnnotation', @@ -576,7 +609,8 @@ ruleTester.run('require-typed-object-prop', rule, { } ] } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -585,8 +619,6 @@ ruleTester.run('require-typed-object-prop', rule, { defineProps({ foo: { type: Object } }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { messageId: 'expectedTypeAnnotation', @@ -615,7 +647,15 @@ ruleTester.run('require-typed-object-prop', rule, { } ] } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module', + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } } ] }) diff --git a/tests/lib/rules/require-typed-ref.js b/tests/lib/rules/require-typed-ref.js index 3da293b9a..6e8797943 100644 --- a/tests/lib/rules/require-typed-ref.js +++ b/tests/lib/rules/require-typed-ref.js @@ -3,12 +3,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/require-typed-ref') const tester = new RuleTester({ - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) // Note: Need to specify filename for each test, @@ -81,7 +84,7 @@ tester.run('require-typed-ref', rule, { const count = ref() `, - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.js', @@ -203,7 +206,6 @@ tester.run('require-typed-ref', rule, { const count = ref() `, - parser: require.resolve('vue-eslint-parser'), errors: [ { messageId: 'noType', @@ -212,7 +214,8 @@ tester.run('require-typed-ref', rule, { endLine: 4, endColumn: 30 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.ts', diff --git a/tests/lib/rules/require-v-for-key.js b/tests/lib/rules/require-v-for-key.js index 91a83732f..dfcfbd3e9 100644 --- a/tests/lib/rules/require-v-for-key.js +++ b/tests/lib/rules/require-v-for-key.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/require-v-for-key') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('require-v-for-key', rule, { diff --git a/tests/lib/rules/require-valid-default-prop.js b/tests/lib/rules/require-valid-default-prop.js index 1e6f7cd7a..a8e5cfbef 100644 --- a/tests/lib/rules/require-valid-default-prop.js +++ b/tests/lib/rules/require-valid-default-prop.js @@ -8,12 +8,14 @@ const rule = require('../../../lib/rules/require-valid-default-prop') const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const parserOptions = { +const languageOptions = { ecmaVersion: 2020, sourceType: 'module', - ecmaFeatures: { jsx: true } + parserOptions: { + ecmaFeatures: { jsx: true } + } } function errorMessage(type) { @@ -43,21 +45,21 @@ ruleTester.run('require-valid-default-prop', rule, { ...foo, props: { ...foo } }`, - parserOptions + languageOptions }, { filename: 'test.vue', code: `export default { props: { foo: null } }`, - parserOptions + languageOptions }, { filename: 'test.vue', code: `export default { props: ['foo'] }`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -69,7 +71,7 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -108,7 +110,7 @@ ruleTester.run('require-valid-default-prop', rule, { foo: { type: Object, default () { return Foo } }, } })`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -122,8 +124,11 @@ ruleTester.run('require-valid-default-prop', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -137,7 +142,7 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -151,7 +156,7 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -163,7 +168,7 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -175,7 +180,7 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions + languageOptions }, // sparse array @@ -189,7 +194,7 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -201,7 +206,7 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -214,9 +219,12 @@ ruleTester.run('require-valid-default-prop', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -229,9 +237,12 @@ ruleTester.run('require-valid-default-prop', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -244,9 +255,12 @@ ruleTester.run('require-valid-default-prop', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { // https://github.com/vuejs/eslint-plugin-vue/issues/1853 @@ -264,11 +278,13 @@ ruleTester.run('require-valid-default-prop', rule, { num: 1 }); `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -302,8 +318,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('number or string') + errors: errorMessage('number or string'), + languageOptions }, { filename: 'test.vue', @@ -315,8 +331,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('number or function') + errors: errorMessage('number or function'), + languageOptions }, { filename: 'test.vue', @@ -328,8 +344,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('number') + errors: errorMessage('number'), + languageOptions }, { filename: 'test.vue', @@ -341,8 +357,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('number') + errors: errorMessage('number'), + languageOptions }, { filename: 'test.vue', @@ -354,8 +370,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('number') + errors: errorMessage('number'), + languageOptions }, { filename: 'test.vue', @@ -367,8 +383,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('number') + errors: errorMessage('number'), + languageOptions }, { filename: 'test.vue', @@ -380,8 +396,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('string') + errors: errorMessage('string'), + languageOptions }, { filename: 'test.vue', @@ -393,8 +409,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('string') + errors: errorMessage('string'), + languageOptions }, { filename: 'test.vue', @@ -406,8 +422,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('string') + errors: errorMessage('string'), + languageOptions }, { filename: 'test.vue', @@ -419,8 +435,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('boolean') + errors: errorMessage('boolean'), + languageOptions }, { filename: 'test.vue', @@ -432,8 +448,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('boolean') + errors: errorMessage('boolean'), + languageOptions }, { filename: 'test.vue', @@ -445,8 +461,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('boolean') + errors: errorMessage('boolean'), + languageOptions }, { filename: 'test.vue', @@ -458,8 +474,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('boolean') + errors: errorMessage('boolean'), + languageOptions }, { filename: 'test.vue', @@ -471,8 +487,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions }, { filename: 'test.vue', @@ -484,8 +500,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions }, { filename: 'test.vue', @@ -497,8 +513,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions }, { filename: 'test.vue', @@ -510,8 +526,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions }, { filename: 'test.vue', @@ -523,8 +539,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions }, { filename: 'test.vue', @@ -536,8 +552,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions }, { filename: 'test.vue', @@ -549,8 +565,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions }, { filename: 'test.vue', @@ -562,8 +578,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions }, { filename: 'test.vue', @@ -575,8 +591,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions }, { filename: 'test.vue', @@ -588,8 +604,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions }, { filename: 'test.vue', @@ -601,8 +617,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function or number') + errors: errorMessage('function or number'), + languageOptions }, { filename: 'test.vue', @@ -614,9 +630,13 @@ ruleTester.run('require-valid-default-prop', rule, { } as PropOptions } });`, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, - errors: errorMessage('function or number') + + errors: errorMessage('function or number'), + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { @@ -637,7 +657,6 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, errors: [ { message: `Type of the default value for 'foo' prop must be a function.`, @@ -651,7 +670,8 @@ ruleTester.run('require-valid-default-prop', rule, { message: `Type of the default value for '[baz]' prop must be a function.`, line: 13 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -663,8 +683,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('string') + errors: errorMessage('string'), + languageOptions }, { filename: 'test.vue', @@ -678,8 +698,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessageForFunction('number') + errors: errorMessageForFunction('number'), + languageOptions }, { filename: 'test.vue', @@ -693,8 +713,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessageForFunction('object') + errors: errorMessageForFunction('object'), + languageOptions }, { filename: 'test.vue', @@ -708,8 +728,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessageForFunction('string') + errors: errorMessageForFunction('string'), + languageOptions }, { filename: 'test.vue', @@ -723,8 +743,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessageForFunction('number') + errors: errorMessageForFunction('number'), + languageOptions }, { filename: 'test.vue', @@ -738,8 +758,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessageForFunction('object') + errors: errorMessageForFunction('object'), + languageOptions }, { filename: 'test.vue', @@ -753,8 +773,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessageForFunction('string') + errors: errorMessageForFunction('string'), + languageOptions }, { filename: 'test.vue', @@ -766,8 +786,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('number') + errors: errorMessage('number'), + languageOptions }, { filename: 'test.vue', @@ -779,8 +799,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('object') + errors: errorMessage('object'), + languageOptions }, { filename: 'test.vue', @@ -792,8 +812,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('string') + errors: errorMessage('string'), + languageOptions }, { filename: 'test.vue', @@ -805,8 +825,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions }, { filename: 'test.vue', @@ -831,7 +851,6 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, errors: [ { message: @@ -848,7 +867,8 @@ ruleTester.run('require-valid-default-prop', rule, { "Type of the default value for 'foo' prop must be a string or boolean.", line: 11 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -860,8 +880,8 @@ ruleTester.run('require-valid-default-prop', rule, { } } }`, - parserOptions, - errors: errorMessage('string') + errors: errorMessage('string'), + languageOptions }, { filename: 'test.vue', @@ -874,9 +894,12 @@ ruleTester.run('require-valid-default-prop', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -889,9 +912,12 @@ ruleTester.run('require-valid-default-prop', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -904,9 +930,12 @@ ruleTester.run('require-valid-default-prop', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, - errors: errorMessage('function') + errors: errorMessage('function'), + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -920,14 +949,17 @@ ruleTester.run('require-valid-default-prop', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: "Type of the default value for 'foo' prop must be a string.", line: 6 } - ] + ], + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -938,18 +970,20 @@ ruleTester.run('require-valid-default-prop', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: "Type of the default value for 'foo' prop must be a string.", line: 4 } - ] + ], + languageOptions: { + ecmaVersion: 6, + sourceType: 'module', + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { code: ` diff --git a/tests/lib/rules/return-in-computed-property.js b/tests/lib/rules/return-in-computed-property.js index 71afcc3eb..ca15503ae 100644 --- a/tests/lib/rules/return-in-computed-property.js +++ b/tests/lib/rules/return-in-computed-property.js @@ -6,9 +6,9 @@ const rule = require('../../../lib/rules/return-in-computed-property') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester -const parserOptions = { +const languageOptions = { ecmaVersion: 6, sourceType: 'module' } @@ -45,7 +45,7 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -62,7 +62,7 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -79,7 +79,7 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -95,7 +95,7 @@ ruleTester.run('return-in-computed-property', rule, { } `, options: [{ treatUndefinedAsUnspecified: false }], - parserOptions + languageOptions }, { filename: 'test.vue', @@ -128,7 +128,7 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -145,7 +145,7 @@ ruleTester.run('return-in-computed-property', rule, { } `, options: [{ treatUndefinedAsUnspecified: false }], - parserOptions + languageOptions } ], @@ -160,13 +160,13 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions, errors: [ { message: 'Expected to return a value in "foo" computed property.', line: 4 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -178,13 +178,13 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Expected to return a value in "foo" computed property.', line: 4 } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -199,13 +199,13 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions: { ecmaVersion: 6, sourceType: 'module' }, errors: [ { message: 'Expected to return a value in "foo" computed property.', line: 4 } - ] + ], + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -221,13 +221,13 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions, errors: [ { message: 'Expected to return a value in "foo" computed property.', line: 7 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -243,13 +243,13 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions, errors: [ { message: 'Expected to return a value in "foo" computed property.', line: 4 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -265,13 +265,13 @@ ruleTester.run('return-in-computed-property', rule, { } `, options: [{ treatUndefinedAsUnspecified: false }], - parserOptions, errors: [ { message: 'Expected to return a value in "foo" computed property.', line: 4 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -285,13 +285,13 @@ ruleTester.run('return-in-computed-property', rule, { } `, options: [{ treatUndefinedAsUnspecified: true }], - parserOptions, errors: [ { message: 'Expected to return a value in "foo" computed property.', line: 4 } - ] + ], + languageOptions }, { filename: 'test.js', @@ -306,14 +306,14 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions, errors: [ { message: 'Expected to return a value in "my_FALSE_test" computed property.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -341,7 +341,6 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions, errors: [ { message: 'Expected to return a value in computed function.', @@ -363,7 +362,8 @@ ruleTester.run('return-in-computed-property', rule, { message: 'Expected to return a value in computed function.', line: 16 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -379,13 +379,13 @@ ruleTester.run('return-in-computed-property', rule, { } `, options: [{ treatUndefinedAsUnspecified: false }], - parserOptions, errors: [ { message: 'Expected to return a value in computed function.', line: 5 } - ] + ], + languageOptions }, { filename: 'test.vue', @@ -396,13 +396,13 @@ ruleTester.run('return-in-computed-property', rule, { } } }`, - parserOptions, errors: [ { message: 'Expected to return a value in "foo" computed property.', line: 4 } - ] + ], + languageOptions } ] }) diff --git a/tests/lib/rules/return-in-emits-validator.js b/tests/lib/rules/return-in-emits-validator.js index c72392bda..235ade8d7 100644 --- a/tests/lib/rules/return-in-emits-validator.js +++ b/tests/lib/rules/return-in-emits-validator.js @@ -9,11 +9,14 @@ const { getTypeScriptFixtureTestOptions } = require('../../test-utils/typescript') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) ruleTester.run('return-in-emits-validator', rule, { valid: [ diff --git a/tests/lib/rules/script-indent.js b/tests/lib/rules/script-indent.js index 3013b13e6..c664b154d 100644 --- a/tests/lib/rules/script-indent.js +++ b/tests/lib/rules/script-indent.js @@ -8,7 +8,7 @@ const fs = require('fs') const path = require('path') const semver = require('semver') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/script-indent') const FIXTURE_ROOT = path.resolve(__dirname, '../../fixtures/script-indent/') @@ -39,10 +39,8 @@ function loadPatterns(additionalValid, additionalInvalid) { if ('parser' in baseObj) { baseObj.parser = require.resolve(baseObj.parser) } - if ('parserOptions' in baseObj && 'parser' in baseObj.parserOptions) { - baseObj.parserOptions.parser = require.resolve( - baseObj.parserOptions.parser - ) + if ('languageOptions' in baseObj && 'parser' in baseObj.languageOptions) { + baseObj.languageOptions.parser = require(baseObj.languageOptions.parser) } return Object.assign(baseObj, { code, filename }) }) @@ -117,11 +115,13 @@ function unIndent(strings) { } const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2022, sourceType: 'module', - parser: require.resolve('espree') // espree v8.0.0-beta.x + parserOptions: { + parser: require.resolve('espree') // espree v8.0.0-beta.x + } } }) diff --git a/tests/lib/rules/script-setup-uses-vars.js b/tests/lib/rules/script-setup-uses-vars.js index 93f20d551..f903a3f9b 100644 --- a/tests/lib/rules/script-setup-uses-vars.js +++ b/tests/lib/rules/script-setup-uses-vars.js @@ -5,24 +5,27 @@ */ 'use strict' -const eslint = require('eslint') +const eslint = require('../../eslint-compat') const rule = require('../../../lib/rules/script-setup-uses-vars') -const ruleNoUnusedVars = new (require('eslint').Linter)() - .getRules() - .get('no-unused-vars') +const { getCoreRule } = require('../../../lib/utils') +const ruleNoUnusedVars = getCoreRule('no-unused-vars') const RuleTester = eslint.RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module' + }, + plugins: { + vue: { + rules: { + 'script-setup-uses-vars': rule + } + } } }) -const linter = ruleTester.linter || eslint.linter -linter.defineRule('script-setup-uses-vars', rule) - ruleTester.run('script-setup-uses-vars', rule, { // Visually check that there are no warnings in the console. valid: [ @@ -45,7 +48,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -80,7 +83,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -96,7 +99,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -111,7 +114,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -126,7 +129,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -160,7 +163,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -168,7 +171,7 @@ describe('script-setup-uses-vars', () => { {{post}} `, - parserOptions: { + languageOptions: { ecmaVersion: 2022, sourceType: 'module' } @@ -179,7 +182,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -195,7 +198,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -213,7 +216,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -231,7 +234,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -292,7 +295,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -335,7 +338,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` @@ -356,7 +359,7 @@ describe('script-setup-uses-vars', () => { filename: 'test.vue', code: ` diff --git a/tests/lib/rules/singleline-html-element-content-newline.js b/tests/lib/rules/singleline-html-element-content-newline.js index c93e96e42..52c01392b 100644 --- a/tests/lib/rules/singleline-html-element-content-newline.js +++ b/tests/lib/rules/singleline-html-element-content-newline.js @@ -4,13 +4,10 @@ 'use strict' const rule = require('../../../lib/rules/singleline-html-element-content-newline') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2015 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('singleline-html-element-content-newline', rule, { diff --git a/tests/lib/rules/sort-keys.js b/tests/lib/rules/sort-keys.js index 83e59cc41..4a40f1e67 100644 --- a/tests/lib/rules/sort-keys.js +++ b/tests/lib/rules/sort-keys.js @@ -5,11 +5,11 @@ 'use strict' const rule = require('../../../lib/rules/sort-keys') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester() -const parserOptions = { +const languageOptions = { ecmaVersion: 2018, sourceType: 'module' } @@ -28,7 +28,7 @@ ruleTester.run('sort-keys', rule, { } } `, - parserOptions + languageOptions }, { filename: 'test.vue', @@ -46,7 +46,7 @@ ruleTester.run('sort-keys', rule, { }, } `, - parserOptions + languageOptions }, { filename: 'propsOrder.vue', @@ -69,21 +69,21 @@ ruleTester.run('sort-keys', rule, { }, } `, - parserOptions + languageOptions }, { filename: 'test.vue', code: ` export default {} `, - parserOptions + languageOptions }, { filename: 'test.vue', code: ` export default 'example-text' `, - parserOptions + languageOptions }, { filename: 'test.jsx', @@ -97,14 +97,14 @@ ruleTester.run('sort-keys', rule, { }, } `, - parserOptions + languageOptions }, { filename: 'test.js', code: ` Vue.component('example') `, - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -120,7 +120,7 @@ ruleTester.run('sort-keys', rule, { } }) `, - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -136,31 +136,31 @@ ruleTester.run('sort-keys', rule, { } }) `, - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', code: ` new Vue() `, - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, // default (asc) { code: "var obj = {'':1, [``]:2}", options: [], - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { code: "var obj = {[``]:1, '':2}", options: [], - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { code: "var obj = {'':1, a:2}", options: [] }, { code: 'var obj = {[``]:1, a:2}', options: [], - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { code: 'var obj = {_:2, a:1, b:3} // default', options: [] }, { code: 'var obj = {a:1, b:3, c:2}', options: [] }, @@ -174,92 +174,96 @@ ruleTester.run('sort-keys', rule, { { code: 'var obj = {a:1, b:3, [a + b]: -1, c:2}', options: [], - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { code: "var obj = {'':1, [f()]:2, a:3}", options: [], - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, { code: "var obj = {a:1, [b++]:2, '':3}", options: ['desc'], - parserOptions: { ecmaVersion: 6 } + languageOptions: { ecmaVersion: 6 } }, // ignore properties separated by spread properties { code: 'var obj = {a:1, ...z, b:1}', options: [], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {b:1, ...z, a:1}', options: [], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {...a, b:1, ...c, d:1}', options: [], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {...a, b:1, ...d, ...c, e:2, z:5}', options: [], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {b:1, ...c, ...d, e:2}', options: [], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, { code: "var obj = {a:1, ...z, '':2}", options: [], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, { code: "var obj = {'':1, ...z, 'a':2}", options: ['desc'], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, // not ignore properties not separated by spread properties { code: 'var obj = {...z, a:1, b:1}', options: [], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {...z, ...c, a:1, b:1}', options: [], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {a:1, b:1, ...z}', options: [], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {...z, ...x, a:1, ...c, ...d, f:5, e:4}', options: ['desc'], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, // works when spread occurs somewhere other than an object literal { code: 'function fn(...args) { return [...args].length; }', options: [], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, { code: 'function g() {}; function f(...args) { return g(...args); }', options: [], - parserOptions: { ecmaVersion: 2018 } + languageOptions: { ecmaVersion: 2018 } }, // ignore destructuring patterns. - { code: 'let {a, b} = {}', options: [], parserOptions: { ecmaVersion: 6 } }, + { + code: 'let {a, b} = {}', + options: [], + languageOptions: { ecmaVersion: 6 } + }, // nested { code: 'var obj = {a:1, b:{x:1, y:1}, c:1}', options: [] }, @@ -519,10 +523,10 @@ ruleTester.run('sort-keys', rule, { }, { code: 'var obj = {a:1, [``]:2} // default', - parserOptions: { ecmaVersion: 6 }, errors: [ "Expected object keys to be in ascending order. '' should be before 'a'." - ] + ], + languageOptions: { ecmaVersion: 6 } }, { code: 'var obj = {a:1, _:2, b:3} // default', @@ -571,101 +575,101 @@ ruleTester.run('sort-keys', rule, { { code: 'var obj = {...z, c:1, b:1}', options: [], - parserOptions: { ecmaVersion: 2018 }, errors: [ "Expected object keys to be in ascending order. 'b' should be before 'c'." - ] + ], + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {...z, ...c, d:4, b:1, ...y, ...f, e:2, a:1}', options: [], - parserOptions: { ecmaVersion: 2018 }, errors: [ "Expected object keys to be in ascending order. 'b' should be before 'd'.", "Expected object keys to be in ascending order. 'a' should be before 'e'." - ] + ], + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {c:1, b:1, ...a}', options: [], - parserOptions: { ecmaVersion: 2018 }, errors: [ "Expected object keys to be in ascending order. 'b' should be before 'c'." - ] + ], + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {...z, ...a, c:1, b:1}', options: [], - parserOptions: { ecmaVersion: 2018 }, errors: [ "Expected object keys to be in ascending order. 'b' should be before 'c'." - ] + ], + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {...z, b:1, a:1, ...d, ...c}', options: [], - parserOptions: { ecmaVersion: 2018 }, errors: [ "Expected object keys to be in ascending order. 'a' should be before 'b'." - ] + ], + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {...z, a:2, b:0, ...x, ...c}', options: ['desc'], - parserOptions: { ecmaVersion: 2018 }, errors: [ "Expected object keys to be in descending order. 'b' should be before 'a'." - ] + ], + languageOptions: { ecmaVersion: 2018 } }, { code: 'var obj = {...z, a:2, b:0, ...x}', options: ['desc'], - parserOptions: { ecmaVersion: 2018 }, errors: [ "Expected object keys to be in descending order. 'b' should be before 'a'." - ] + ], + languageOptions: { ecmaVersion: 2018 } }, { code: "var obj = {...z, '':1, a:2}", options: ['desc'], - parserOptions: { ecmaVersion: 2018 }, errors: [ "Expected object keys to be in descending order. 'a' should be before ''." - ] + ], + languageOptions: { ecmaVersion: 2018 } }, // ignore non-simple computed properties, but their position shouldn't affect other comparisons. { code: "var obj = {a:1, [b+c]:2, '':3}", - parserOptions: { ecmaVersion: 6 }, errors: [ "Expected object keys to be in ascending order. '' should be before 'a'." - ] + ], + languageOptions: { ecmaVersion: 6 } }, { code: "var obj = {'':1, [b+c]:2, a:3}", options: ['desc'], - parserOptions: { ecmaVersion: 6 }, errors: [ "Expected object keys to be in descending order. 'a' should be before ''." - ] + ], + languageOptions: { ecmaVersion: 6 } }, { code: "var obj = {b:1, [f()]:2, '':3, a:4}", options: ['desc'], - parserOptions: { ecmaVersion: 6 }, errors: [ "Expected object keys to be in descending order. 'a' should be before ''." - ] + ], + languageOptions: { ecmaVersion: 6 } }, // not ignore simple computed properties. { code: 'var obj = {a:1, b:3, [a]: -1, c:2}', - parserOptions: { ecmaVersion: 6 }, errors: [ "Expected object keys to be in ascending order. 'a' should be before 'b'." - ] + ], + languageOptions: { ecmaVersion: 6 } }, // nested @@ -914,10 +918,10 @@ ruleTester.run('sort-keys', rule, { { code: "var obj = {[``]:1, a:'2'} // desc", options: ['desc'], - parserOptions: { ecmaVersion: 6 }, errors: [ "Expected object keys to be in descending order. 'a' should be before ''." - ] + ], + languageOptions: { ecmaVersion: 6 } }, { code: 'var obj = {a:1, _:2, b:3} // desc', @@ -1189,8 +1193,6 @@ ruleTester.run('sort-keys', rule, { }, } `, - parserOptions, - errors: [ { message: @@ -1202,7 +1204,9 @@ ruleTester.run('sort-keys', rule, { "Expected object keys to be in ascending order. 'msg' should be before 'zd'.", line: 12 } - ] + ], + + languageOptions }, { filename: 'example.vue', @@ -1224,14 +1228,14 @@ ruleTester.run('sort-keys', rule, { name: 'burger', }; `, - parserOptions, errors: [ { message: "Expected object keys to be in ascending order. 'closeMenu' should be before 'toggleMenu'.", line: 12 } - ] + ], + languageOptions }, { filename: 'example.vue', @@ -1257,7 +1261,6 @@ ruleTester.run('sort-keys', rule, { name: 'burger', }; `, - parserOptions, errors: [ { message: @@ -1269,7 +1272,8 @@ ruleTester.run('sort-keys', rule, { "Expected object keys to be in ascending order. 'a' should be before 'z'.", line: 14 } - ] + ], + languageOptions }, { filename: 'example.vue', @@ -1286,7 +1290,6 @@ ruleTester.run('sort-keys', rule, { name: 'burger', }; `, - parserOptions, errors: [ { message: @@ -1298,7 +1301,8 @@ ruleTester.run('sort-keys', rule, { "Expected object keys to be in ascending order. 'isActive' should be before 'z'.", line: 8 } - ] + ], + languageOptions }, { filename: 'example.vue', @@ -1315,7 +1319,6 @@ ruleTester.run('sort-keys', rule, { const dict = { zd: 1, a: 2 }; `, - parserOptions, errors: [ { message: @@ -1327,7 +1330,8 @@ ruleTester.run('sort-keys', rule, { "Expected object keys to be in ascending order. 'a' should be before 'zd'.", line: 12 } - ] + ], + languageOptions }, { filename: 'test.js', @@ -1346,7 +1350,6 @@ ruleTester.run('sort-keys', rule, { template: '
' }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: @@ -1358,7 +1361,8 @@ ruleTester.run('sort-keys', rule, { "Expected object keys to be in ascending order. 'msg' should be before 'z'.", line: 9 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -1377,7 +1381,6 @@ ruleTester.run('sort-keys', rule, { template: '
' }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: @@ -1389,7 +1392,8 @@ ruleTester.run('sort-keys', rule, { "Expected object keys to be in ascending order. 'msg' should be before 'z'.", line: 9 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'test.js', @@ -1408,7 +1412,6 @@ ruleTester.run('sort-keys', rule, { template: '
' }) `, - parserOptions: { ecmaVersion: 6 }, errors: [ { message: @@ -1420,7 +1423,8 @@ ruleTester.run('sort-keys', rule, { "Expected object keys to be in ascending order. 'msg' should be before 'z'.", line: 9 } - ] + ], + languageOptions: { ecmaVersion: 6 } }, { filename: 'propsOrder.vue', @@ -1436,14 +1440,14 @@ ruleTester.run('sort-keys', rule, { } `, options: ['asc', { ignoreGrandchildrenOf: [] }], - parserOptions, errors: [ { message: "Expected object keys to be in ascending order. 'default' should be before 'type'.", line: 7 } - ] + ], + languageOptions }, { filename: 'propsOrder.vue', @@ -1459,7 +1463,6 @@ ruleTester.run('sort-keys', rule, { a: 2 } `, - parserOptions, errors: [ { message: @@ -1471,7 +1474,8 @@ ruleTester.run('sort-keys', rule, { "Expected object keys to be in ascending order. 'a' should be before 'foo'.", line: 10 } - ] + ], + languageOptions }, { filename: 'propsOrder.vue', @@ -1487,14 +1491,14 @@ ruleTester.run('sort-keys', rule, { } } `, - parserOptions, errors: [ { message: "Expected object keys to be in ascending order. 'a' should be before 'b'.", line: 7 } - ] + ], + languageOptions } ] }) diff --git a/tests/lib/rules/space-in-parens.js b/tests/lib/rules/space-in-parens.js index ef6fe628e..d6218216d 100644 --- a/tests/lib/rules/space-in-parens.js +++ b/tests/lib/rules/space-in-parens.js @@ -19,8 +19,7 @@ const errorMessage = semver.lt(ESLint.version, '6.4.0') : (obj) => obj const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('space-in-parens', rule, { diff --git a/tests/lib/rules/space-infix-ops.js b/tests/lib/rules/space-infix-ops.js index b8a679787..0325884a7 100644 --- a/tests/lib/rules/space-infix-ops.js +++ b/tests/lib/rules/space-infix-ops.js @@ -8,8 +8,7 @@ const semver = require('semver') const rule = require('../../../lib/rules/space-infix-ops') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) const message = semver.lt(ESLint.version, '5.10.0') diff --git a/tests/lib/rules/space-unary-ops.js b/tests/lib/rules/space-unary-ops.js index 63539a5a7..8229e78cd 100644 --- a/tests/lib/rules/space-unary-ops.js +++ b/tests/lib/rules/space-unary-ops.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/space-unary-ops') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('space-unary-ops', rule, { diff --git a/tests/lib/rules/static-class-names-order.js b/tests/lib/rules/static-class-names-order.js index 0d9eb9436..0f293f5e9 100644 --- a/tests/lib/rules/static-class-names-order.js +++ b/tests/lib/rules/static-class-names-order.js @@ -5,11 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/static-class-names-order') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('static-class-names-order', rule, { valid: [ diff --git a/tests/lib/rules/template-curly-spacing.js b/tests/lib/rules/template-curly-spacing.js index 0fe530511..c806bfafc 100644 --- a/tests/lib/rules/template-curly-spacing.js +++ b/tests/lib/rules/template-curly-spacing.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/template-curly-spacing') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('template-curly-spacing', rule, { diff --git a/tests/lib/rules/this-in-template.js b/tests/lib/rules/this-in-template.js index 5686bf137..6750f2cb3 100644 --- a/tests/lib/rules/this-in-template.js +++ b/tests/lib/rules/this-in-template.js @@ -6,11 +6,10 @@ const rule = require('../../../lib/rules/this-in-template') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) function createValidTests(prefix, options) { diff --git a/tests/lib/rules/use-v-on-exact.js b/tests/lib/rules/use-v-on-exact.js index 929fd746a..757a1a5c9 100644 --- a/tests/lib/rules/use-v-on-exact.js +++ b/tests/lib/rules/use-v-on-exact.js @@ -6,11 +6,10 @@ const rule = require('../../../lib/rules/use-v-on-exact') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) ruleTester.run('use-v-on-exact', rule, { diff --git a/tests/lib/rules/v-bind-style.js b/tests/lib/rules/v-bind-style.js index 5b4e88ab2..26490790a 100644 --- a/tests/lib/rules/v-bind-style.js +++ b/tests/lib/rules/v-bind-style.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/v-bind-style') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('v-bind-style', rule, { diff --git a/tests/lib/rules/v-for-delimiter-style.js b/tests/lib/rules/v-for-delimiter-style.js index 23665a32c..350fded17 100644 --- a/tests/lib/rules/v-for-delimiter-style.js +++ b/tests/lib/rules/v-for-delimiter-style.js @@ -6,12 +6,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/v-for-delimiter-style') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('v-for-delimiter-style', rule, { diff --git a/tests/lib/rules/v-if-else-key.js b/tests/lib/rules/v-if-else-key.js index 4aab257d0..16d975a0a 100644 --- a/tests/lib/rules/v-if-else-key.js +++ b/tests/lib/rules/v-if-else-key.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/v-if-else-key') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/v-on-event-hyphenation.js b/tests/lib/rules/v-on-event-hyphenation.js index beaa5e3fa..54d2ec435 100644 --- a/tests/lib/rules/v-on-event-hyphenation.js +++ b/tests/lib/rules/v-on-event-hyphenation.js @@ -1,13 +1,10 @@ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/v-on-event-hyphenation.js') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { - ecmaVersion: 2019 - } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2019 } }) tester.run('v-on-event-hyphenation', rule, { diff --git a/tests/lib/rules/v-on-function-call.js b/tests/lib/rules/v-on-function-call.js index d06bbe231..ad6292505 100644 --- a/tests/lib/rules/v-on-function-call.js +++ b/tests/lib/rules/v-on-function-call.js @@ -3,12 +3,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/v-on-function-call') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('v-on-function-call', rule, { diff --git a/tests/lib/rules/v-on-handler-style.js b/tests/lib/rules/v-on-handler-style.js index 314bbf8c8..a169402f7 100644 --- a/tests/lib/rules/v-on-handler-style.js +++ b/tests/lib/rules/v-on-handler-style.js @@ -4,12 +4,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/v-on-handler-style') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2020, + sourceType: 'module' + } }) tester.run('v-on-handler-style', rule, { diff --git a/tests/lib/rules/v-on-style.js b/tests/lib/rules/v-on-style.js index ab62e9335..820f98c4b 100644 --- a/tests/lib/rules/v-on-style.js +++ b/tests/lib/rules/v-on-style.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/v-on-style') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('v-on-style', rule, { diff --git a/tests/lib/rules/v-slot-style.js b/tests/lib/rules/v-slot-style.js index ad0d4558c..f35f1a9b8 100644 --- a/tests/lib/rules/v-slot-style.js +++ b/tests/lib/rules/v-slot-style.js @@ -4,12 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/v-slot-style') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('v-slot-style', rule, { diff --git a/tests/lib/rules/valid-attribute-name.js b/tests/lib/rules/valid-attribute-name.js index 920231899..bb94ca427 100644 --- a/tests/lib/rules/valid-attribute-name.js +++ b/tests/lib/rules/valid-attribute-name.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-attribute-name') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/rules/valid-define-emits.js b/tests/lib/rules/valid-define-emits.js index 38ec1d636..0ec383b36 100644 --- a/tests/lib/rules/valid-define-emits.js +++ b/tests/lib/rules/valid-define-emits.js @@ -4,12 +4,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-define-emits') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2015, + sourceType: 'module' + } }) tester.run('valid-define-emits', rule, { @@ -40,7 +43,9 @@ tester.run('valid-define-emits', rule, { defineEmits<(e: 'notify')=>void>() `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -84,8 +89,10 @@ tester.run('valid-define-emits', rule, { }); `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -106,8 +113,10 @@ tester.run('valid-define-emits', rule, { }); `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -146,13 +155,15 @@ tester.run('valid-define-emits', rule, { defineEmits<(e: 'notify')=>void>({ submit: null }) `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { message: '`defineEmits` has both a type-only emit and an argument.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', diff --git a/tests/lib/rules/valid-define-options.js b/tests/lib/rules/valid-define-options.js index 89582c7a9..904d0c197 100644 --- a/tests/lib/rules/valid-define-options.js +++ b/tests/lib/rules/valid-define-options.js @@ -4,12 +4,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-define-options') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2015, + sourceType: 'module' + } }) tester.run('valid-define-options', rule, { @@ -42,8 +45,10 @@ tester.run('valid-define-options', rule, { defineOptions({ name: 'foo' as X }) `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -55,8 +60,10 @@ tester.run('valid-define-options', rule, { defineOptions({ name: 'foo' as (typeof str) }) `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -125,7 +132,6 @@ tester.run('valid-define-options', rule, { defineOptions<{ name: 'Foo' }>() `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { message: 'Options are not defined.', @@ -135,7 +141,10 @@ tester.run('valid-define-options', rule, { message: '`defineOptions()` cannot accept type arguments.', line: 3 } - ] + ], + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', diff --git a/tests/lib/rules/valid-define-props.js b/tests/lib/rules/valid-define-props.js index 433c11929..193a5c432 100644 --- a/tests/lib/rules/valid-define-props.js +++ b/tests/lib/rules/valid-define-props.js @@ -4,12 +4,15 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-define-props') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015, sourceType: 'module' } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2015, + sourceType: 'module' + } }) tester.run('valid-define-props', rule, { @@ -40,7 +43,9 @@ tester.run('valid-define-props', rule, { defineProps<{ msg?:string }>() `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', @@ -87,8 +92,10 @@ tester.run('valid-define-props', rule, { }); `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -109,8 +116,10 @@ tester.run('valid-define-props', rule, { }); `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } }, { @@ -149,13 +158,15 @@ tester.run('valid-define-props', rule, { defineProps<{ msg?:string }>({ msg: String }) `, - parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, errors: [ { message: '`defineProps` has both a type-only props and an argument.', line: 4 } - ] + ], + languageOptions: { + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { filename: 'test.vue', diff --git a/tests/lib/rules/valid-model-definition.js b/tests/lib/rules/valid-model-definition.js index 40bb2ef4c..ed6013247 100644 --- a/tests/lib/rules/valid-model-definition.js +++ b/tests/lib/rules/valid-model-definition.js @@ -5,10 +5,10 @@ 'use strict' const rule = require('../../../lib/rules/valid-model-definition') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/valid-next-tick.js b/tests/lib/rules/valid-next-tick.js index e07f952ff..0cd583785 100644 --- a/tests/lib/rules/valid-next-tick.js +++ b/tests/lib/rules/valid-next-tick.js @@ -6,12 +6,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-next-tick') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2017, sourceType: 'module' } diff --git a/tests/lib/rules/valid-template-root.js b/tests/lib/rules/valid-template-root.js index ff6e7604b..57799c372 100644 --- a/tests/lib/rules/valid-template-root.js +++ b/tests/lib/rules/valid-template-root.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-template-root') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-template-root', rule, { diff --git a/tests/lib/rules/valid-v-bind-sync.js b/tests/lib/rules/valid-v-bind-sync.js index 1fc03541f..8c614bc12 100644 --- a/tests/lib/rules/valid-v-bind-sync.js +++ b/tests/lib/rules/valid-v-bind-sync.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-bind-sync') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('valid-v-bind-sync', rule, { diff --git a/tests/lib/rules/valid-v-bind.js b/tests/lib/rules/valid-v-bind.js index 2259f9129..bd04100ae 100644 --- a/tests/lib/rules/valid-v-bind.js +++ b/tests/lib/rules/valid-v-bind.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-bind') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-bind', rule, { diff --git a/tests/lib/rules/valid-v-cloak.js b/tests/lib/rules/valid-v-cloak.js index 86ddd82c1..f0f96f02b 100644 --- a/tests/lib/rules/valid-v-cloak.js +++ b/tests/lib/rules/valid-v-cloak.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-cloak') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-cloak', rule, { diff --git a/tests/lib/rules/valid-v-else-if.js b/tests/lib/rules/valid-v-else-if.js index 63cdfa3d6..87d82f5cb 100644 --- a/tests/lib/rules/valid-v-else-if.js +++ b/tests/lib/rules/valid-v-else-if.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-else-if') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-else-if', rule, { diff --git a/tests/lib/rules/valid-v-else.js b/tests/lib/rules/valid-v-else.js index ad89d8f87..e8955f0f2 100644 --- a/tests/lib/rules/valid-v-else.js +++ b/tests/lib/rules/valid-v-else.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-else') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-else', rule, { diff --git a/tests/lib/rules/valid-v-for.js b/tests/lib/rules/valid-v-for.js index 376dd6d15..451b86811 100644 --- a/tests/lib/rules/valid-v-for.js +++ b/tests/lib/rules/valid-v-for.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-for') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-for', rule, { diff --git a/tests/lib/rules/valid-v-html.js b/tests/lib/rules/valid-v-html.js index 1d2043bd7..771c936bb 100644 --- a/tests/lib/rules/valid-v-html.js +++ b/tests/lib/rules/valid-v-html.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-html') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-html', rule, { diff --git a/tests/lib/rules/valid-v-if.js b/tests/lib/rules/valid-v-if.js index 7c8894b4b..f89860096 100644 --- a/tests/lib/rules/valid-v-if.js +++ b/tests/lib/rules/valid-v-if.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-if') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-if', rule, { diff --git a/tests/lib/rules/valid-v-is.js b/tests/lib/rules/valid-v-is.js index 02c17f33e..73741cb7c 100644 --- a/tests/lib/rules/valid-v-is.js +++ b/tests/lib/rules/valid-v-is.js @@ -3,12 +3,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-is') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('valid-v-is', rule, { diff --git a/tests/lib/rules/valid-v-memo.js b/tests/lib/rules/valid-v-memo.js index 89b012ef4..8796f91c8 100644 --- a/tests/lib/rules/valid-v-memo.js +++ b/tests/lib/rules/valid-v-memo.js @@ -4,12 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-memo') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2021 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2021 } }) tester.run('valid-v-memo', rule, { diff --git a/tests/lib/rules/valid-v-model.js b/tests/lib/rules/valid-v-model.js index d3c22314b..38b4ae175 100644 --- a/tests/lib/rules/valid-v-model.js +++ b/tests/lib/rules/valid-v-model.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-model') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2020 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020 } }) tester.run('valid-v-model', rule, { diff --git a/tests/lib/rules/valid-v-on.js b/tests/lib/rules/valid-v-on.js index 717d8f08e..eca5ea639 100644 --- a/tests/lib/rules/valid-v-on.js +++ b/tests/lib/rules/valid-v-on.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-on') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-on', rule, { diff --git a/tests/lib/rules/valid-v-once.js b/tests/lib/rules/valid-v-once.js index a53c1685d..cb980c708 100644 --- a/tests/lib/rules/valid-v-once.js +++ b/tests/lib/rules/valid-v-once.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-once') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-once', rule, { diff --git a/tests/lib/rules/valid-v-pre.js b/tests/lib/rules/valid-v-pre.js index bb32f014c..5e4f95c02 100644 --- a/tests/lib/rules/valid-v-pre.js +++ b/tests/lib/rules/valid-v-pre.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-pre') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-pre', rule, { diff --git a/tests/lib/rules/valid-v-show.js b/tests/lib/rules/valid-v-show.js index 11e8646b3..656d47e86 100644 --- a/tests/lib/rules/valid-v-show.js +++ b/tests/lib/rules/valid-v-show.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-show') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-show', rule, { diff --git a/tests/lib/rules/valid-v-slot.js b/tests/lib/rules/valid-v-slot.js index bfd9bab32..7cfa702ad 100644 --- a/tests/lib/rules/valid-v-slot.js +++ b/tests/lib/rules/valid-v-slot.js @@ -4,12 +4,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-slot') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-slot', rule, { diff --git a/tests/lib/rules/valid-v-text.js b/tests/lib/rules/valid-v-text.js index d4eed0da7..33c179d93 100644 --- a/tests/lib/rules/valid-v-text.js +++ b/tests/lib/rules/valid-v-text.js @@ -5,12 +5,11 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/valid-v-text') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { ecmaVersion: 2015 } + languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 } }) tester.run('valid-v-text', rule, { diff --git a/tests/lib/script-setup-vars.js b/tests/lib/script-setup-vars.js index 7df0546a3..49a4fb1ab 100644 --- a/tests/lib/script-setup-vars.js +++ b/tests/lib/script-setup-vars.js @@ -1,14 +1,13 @@ 'use strict' -const eslint = require('eslint') -const rules = new eslint.Linter().getRules() -const ruleNoUnusedVars = rules.get('no-unused-vars') -const ruleNoUndef = rules.get('no-undef') +const { RuleTester } = require('../eslint-compat') +const { getCoreRule } = require('../../lib/utils') +const ruleNoUnusedVars = getCoreRule('no-unused-vars') +const ruleNoUndef = getCoreRule('no-undef') -const RuleTester = eslint.RuleTester const ruleTester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module' } @@ -136,7 +135,7 @@ describe('vue-eslint-parser should properly mark the variables used in the templ {{post}} `, - parserOptions: { + languageOptions: { ecmaVersion: 2022, sourceType: 'module' } diff --git a/tests/lib/utils/core-rules/wrap-core-rule.js b/tests/lib/utils/core-rules/wrap-core-rule.js index 524d7f48f..b07b17e9e 100644 --- a/tests/lib/utils/core-rules/wrap-core-rule.js +++ b/tests/lib/utils/core-rules/wrap-core-rule.js @@ -1,13 +1,13 @@ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../../eslint-compat').RuleTester const utils = require('../../../../lib/utils/index') const rule = utils.wrapCoreRule('foo') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' } diff --git a/tests/lib/utils/html-comments.js b/tests/lib/utils/html-comments.js index 066c73eb1..69992b09d 100644 --- a/tests/lib/utils/html-comments.js +++ b/tests/lib/utils/html-comments.js @@ -4,7 +4,7 @@ const fs = require('fs') const path = require('path') const assert = require('assert') -const Linter = require('eslint').Linter +const Linter = require('../../eslint-compat').Linter const htmlComments = require('../../../lib/utils/html-comments') @@ -37,17 +37,25 @@ function tokenize(code, option) { const linter = new Linter() const result = [] - linter.defineRule('vue/html-comments-test', (content) => - htmlComments.defineVisitor(content, option, (commentTokens) => { - result.push(commentTokens) - }) - ) - linter.defineParser('vue-eslint-parser', require('vue-eslint-parser')) linter.verify( code, { - parser: 'vue-eslint-parser', - parserOptions: { ecmaVersion: 2018 }, + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2018 + }, + plugins: { + vue: { + rules: { + 'html-comments-test': { + create: (content) => + htmlComments.defineVisitor(content, option, (commentTokens) => { + result.push(commentTokens) + }) + } + } + } + }, rules: { 'vue/html-comments-test': 'error' } }, undefined, diff --git a/tests/lib/utils/ref-object-references.js b/tests/lib/utils/ref-object-references.js index 5cd473f8f..68c526b36 100644 --- a/tests/lib/utils/ref-object-references.js +++ b/tests/lib/utils/ref-object-references.js @@ -5,7 +5,7 @@ const path = require('path') const assert = require('assert') const vueESLintParser = require('vue-eslint-parser') -const Linter = require('eslint').Linter +const Linter = require('../../eslint-compat').Linter const { extractRefObjectReferences, @@ -37,7 +37,11 @@ function loadPatterns(rootDir) { return fs.readdirSync(rootDir).map((name) => { for (const [sourceFile, resultFile, options] of [ ['source.js', 'result.js'], - ['source.vue', 'result.vue', { parser: 'vue-eslint-parser' }] + [ + 'source.vue', + 'result.vue', + { languageOptions: { parser: 'vue-eslint-parser' } } + ] ]) { const sourceFilePath = path.join(rootDir, name, sourceFile) if (fs.existsSync(sourceFilePath)) { @@ -57,40 +61,54 @@ function extractRefs(code, extract, options) { const linter = new Linter() const references = [] - linter.defineParser('vue-eslint-parser', vueESLintParser) - linter.defineRule('vue/extract-test', (context) => { - const refs = extract(context) - - const processed = new Set() - return { - '*'(node) { - if (processed.has(node)) { - // Old ESLint may be called twice on the same node. - return - } - processed.add(node) - const data = refs.get(node) - if (data) { - references.push(data) - } - } - } - }) const messages = linter.verify( code, { ...options, - parserOptions: { ecmaVersion: 2020, sourceType: 'module' }, - rules: { 'vue/extract-test': 'error' }, - globals: { - $ref: 'readonly', - $computed: 'readonly', - $shallowRef: 'readonly', - $customRef: 'readonly', - $toRef: 'readonly', - $: 'readonly', - $$: 'readonly' - } + plugins: { + vue: { + rules: { + 'extract-test': { + create: (context) => { + const refs = extract(context) + + const processed = new Set() + return { + '*'(node) { + if (processed.has(node)) { + // Old ESLint may be called twice on the same node. + return + } + processed.add(node) + const data = refs.get(node) + if (data) { + references.push(data) + } + } + } + } + } + } + } + }, + languageOptions: { + ...options?.languageOptions, + ...(options?.languageOptions?.parser === 'vue-eslint-parser' + ? { parser: vueESLintParser } + : {}), + ecmaVersion: 2020, + sourceType: 'module', + globals: { + $ref: 'readonly', + $computed: 'readonly', + $shallowRef: 'readonly', + $customRef: 'readonly', + $toRef: 'readonly', + $: 'readonly', + $$: 'readonly' + } + }, + rules: { 'vue/extract-test': 'error' } }, undefined, true diff --git a/tests/lib/utils/selector.js b/tests/lib/utils/selector.js index 6677a9fa4..b5b0ee986 100644 --- a/tests/lib/utils/selector.js +++ b/tests/lib/utils/selector.js @@ -4,7 +4,7 @@ const fs = require('fs') const path = require('path') const assert = require('assert') -const Linter = require('eslint').Linter +const Linter = require('../../eslint-compat').Linter const selector = require('../../../lib/utils/selector') const utils = require('../../../lib/utils') @@ -32,24 +32,35 @@ function extractElements(code, inputSelector) { const linter = new Linter() const matches = [] - linter.defineRule('vue/selector-test', (context) => { - const parsed = selector.parseSelector(inputSelector, context) - return utils.defineDocumentVisitor(context, { - VElement(node) { - if (parsed.test(node)) { - matches.push( - context.getSourceCode().text.slice(...node.startTag.range) - ) - } - } - }) - }) - linter.defineParser('vue-eslint-parser', require('vue-eslint-parser')) const messages = linter.verify( code, { - parser: 'vue-eslint-parser', - parserOptions: { ecmaVersion: 2018 }, + plugins: { + vue: { + rules: { + 'selector-test': { + create: (context) => { + const parsed = selector.parseSelector(inputSelector, context) + return utils.defineDocumentVisitor(context, { + VElement(node) { + if (parsed.test(node)) { + matches.push( + context + .getSourceCode() + .text.slice(...node.startTag.range) + ) + } + } + }) + } + } + } + } + }, + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 2018 + }, rules: { 'vue/selector-test': 'error' } }, undefined, diff --git a/tests/lib/utils/ts-utils/index/get-component-emits.js b/tests/lib/utils/ts-utils/index/get-component-emits.js index 8bba2be7c..8c9d5d34c 100644 --- a/tests/lib/utils/ts-utils/index/get-component-emits.js +++ b/tests/lib/utils/ts-utils/index/get-component-emits.js @@ -5,7 +5,7 @@ const path = require('path') const fs = require('fs') -const Linter = require('eslint').Linter +const Linter = require('../../../../eslint-compat').Linter const parser = require('vue-eslint-parser') const tsParser = require('@typescript-eslint/parser') const utils = require('../../../../../lib/utils/index') @@ -20,40 +20,45 @@ const SRC_TS_TEST_PATH = path.join(FIXTURES_ROOT, './src/test.ts') function extractComponentProps(code, tsFileCode) { const linter = new Linter() + const result = [] const config = { - parser: 'vue-eslint-parser', - parserOptions: { + files: ['**/*.vue'], + languageOptions: { + parser, ecmaVersion: 2020, - parser: tsParser, - project: [TSCONFIG_PATH], - extraFileExtensions: ['.vue'] + parserOptions: { + parser: tsParser, + project: [TSCONFIG_PATH], + extraFileExtensions: ['.vue'] + } + }, + plugins: { + test: { + rules: { + test: { + create(context) { + return utils.defineScriptSetupVisitor(context, { + onDefineEmitsEnter(_node, emits) { + result.push( + ...emits.map((emit) => ({ + type: emit.type, + name: emit.emitName + })) + ) + } + }) + } + } + } + } }, rules: { - test: 'error' + 'test/test': 'error' } } - linter.defineParser('vue-eslint-parser', parser) - const result = [] - linter.defineRule('test', { - create(context) { - return utils.defineScriptSetupVisitor(context, { - onDefineEmitsEnter(_node, emits) { - result.push( - ...emits.map((emit) => ({ - type: emit.type, - name: emit.emitName - })) - ) - } - }) - } - }) fs.writeFileSync(SRC_TS_TEST_PATH, tsFileCode || '', 'utf8') // clean './src/test.ts' cache - tsParser.parseForESLint(tsFileCode || '', { - ...config.parserOptions, - filePath: SRC_TS_TEST_PATH - }) + tsParser.clearCaches() assert.deepStrictEqual( linter.verify(code, config, path.join(FIXTURES_ROOT, './src/test.vue')), [] diff --git a/tests/lib/utils/ts-utils/index/get-component-props.js b/tests/lib/utils/ts-utils/index/get-component-props.js index 2ab0070c7..100d0a18c 100644 --- a/tests/lib/utils/ts-utils/index/get-component-props.js +++ b/tests/lib/utils/ts-utils/index/get-component-props.js @@ -5,7 +5,7 @@ const path = require('path') const fs = require('fs') -const Linter = require('eslint').Linter +const Linter = require('../../../../eslint-compat').Linter const parser = require('vue-eslint-parser') const tsParser = require('@typescript-eslint/parser') const utils = require('../../../../../lib/utils/index') @@ -20,42 +20,47 @@ const SRC_TS_TEST_PATH = path.join(FIXTURES_ROOT, './src/test.ts') function extractComponentProps(code, tsFileCode) { const linter = new Linter() + const result = [] const config = { - parser: 'vue-eslint-parser', - parserOptions: { + files: ['**/*.vue'], + languageOptions: { + parser, ecmaVersion: 2020, - parser: tsParser, - project: [TSCONFIG_PATH], - extraFileExtensions: ['.vue'] + parserOptions: { + parser: tsParser, + project: [TSCONFIG_PATH], + extraFileExtensions: ['.vue'] + } + }, + plugins: { + test: { + rules: { + test: { + create(context) { + return utils.defineScriptSetupVisitor(context, { + onDefinePropsEnter(_node, props) { + result.push( + ...props.map((prop) => ({ + type: prop.type, + name: prop.propName, + required: prop.required ?? null, + types: prop.types ?? null + })) + ) + } + }) + } + } + } + } }, rules: { - test: 'error' + 'test/test': 'error' } } - linter.defineParser('vue-eslint-parser', parser) - const result = [] - linter.defineRule('test', { - create(context) { - return utils.defineScriptSetupVisitor(context, { - onDefinePropsEnter(_node, props) { - result.push( - ...props.map((prop) => ({ - type: prop.type, - name: prop.propName, - required: prop.required ?? null, - types: prop.types ?? null - })) - ) - } - }) - } - }) fs.writeFileSync(SRC_TS_TEST_PATH, tsFileCode || '', 'utf8') // clean './src/test.ts' cache - tsParser.parseForESLint(tsFileCode || '', { - ...config.parserOptions, - filePath: SRC_TS_TEST_PATH - }) + tsParser.clearCaches() assert.deepStrictEqual( linter.verify(code, config, path.join(FIXTURES_ROOT, './src/test.vue')), [] diff --git a/tests/lib/utils/vue-component.js b/tests/lib/utils/vue-component.js index c66b3338f..46328f0f4 100644 --- a/tests/lib/utils/vue-component.js +++ b/tests/lib/utils/vue-component.js @@ -20,8 +20,8 @@ const rule = { } } -const RuleTester = require('eslint').RuleTester -const parserOptions = { +const RuleTester = require('../../eslint-compat').RuleTester +const languageOptions = { ecmaVersion: 6, sourceType: 'module' } @@ -39,77 +39,83 @@ function validTests(ext) { { filename: `test.${ext}`, code: `export const foo = {}`, - parserOptions + languageOptions }, { filename: `test.${ext}`, code: `export var foo = {}`, - parserOptions + languageOptions }, { filename: `test.${ext}`, code: `const foo = {}`, - parserOptions + languageOptions }, { filename: `test.${ext}`, code: `var foo = {}`, - parserOptions + languageOptions }, { filename: `test.${ext}`, code: `let foo = {}`, - parserOptions + languageOptions }, { filename: `test.${ext}`, code: `foo({ })`, - parserOptions + languageOptions }, { filename: `test.${ext}`, code: `foo(() => { return {} })`, - parserOptions + languageOptions }, { filename: `test.${ext}`, code: `Vue.component('async-example', function (resolve, reject) { })`, - parserOptions + languageOptions }, { filename: `test.${ext}`, code: `Vue.component('async-example', function (resolve, reject) { resolve({}) })`, - parserOptions + languageOptions }, { filename: `test.${ext}`, code: `new Vue({ })`, - parserOptions + languageOptions }, { filename: `test.${ext}`, code: `{ foo: {} }`, - parserOptions + languageOptions }, { filename: `test.${ext}`, code: `export default (Foo as FooConstructor).extend({})`, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions + languageOptions: { + ...languageOptions, + parser: require('@typescript-eslint/parser') + } }, { filename: `test.${ext}`, code: `export default Foo.extend({})`, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions + languageOptions: { + ...languageOptions, + parser: require('@typescript-eslint/parser') + } }, { filename: `test.${ext}`, code: `export default Foo.extend({} as ComponentOptions)`, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions + languageOptions: { + ...languageOptions, + parser: require('@typescript-eslint/parser') + } } ] } @@ -125,64 +131,70 @@ function invalidTests(ext) { }) // ${ext} `, - parserOptions, + languageOptions, errors: [makeError(4)] }, { filename: `test.${ext}`, code: `Vue.component({})`, - parserOptions, + languageOptions, errors: [makeError(1)] }, { filename: `test.${ext}`, code: `Vue.mixin({})`, - parserOptions, + languageOptions, errors: [makeError(1)] }, { filename: `test.${ext}`, code: `Vue.extend({})`, - parserOptions, + languageOptions, errors: [makeError(1)] }, { filename: `test.${ext}`, code: `app.component('name', {})`, - parserOptions, + languageOptions, errors: [makeError(1)] }, { filename: `test.${ext}`, code: `app.mixin({})`, - parserOptions, + languageOptions, errors: [makeError(1)] }, { filename: `test.${ext}`, code: `export default (Vue as VueConstructor).extend({})`, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions, + languageOptions: { + ...languageOptions, + parser: require('@typescript-eslint/parser') + }, errors: [makeError(1)] }, { filename: `test.${ext}`, code: `export default Vue.extend({})`, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions, + languageOptions: { + ...languageOptions, + parser: require('@typescript-eslint/parser') + }, errors: [makeError(1)] }, { filename: `test.${ext}`, code: `export default Vue.extend({} as ComponentOptions)`, - parser: require.resolve('@typescript-eslint/parser'), - parserOptions, + languageOptions: { + ...languageOptions, + parser: require('@typescript-eslint/parser') + }, errors: [makeError(1)] }, { filename: `test.${ext}`, code: `createApp({})`, - parserOptions, + languageOptions, errors: [makeError(1)] }, { @@ -192,7 +204,7 @@ function invalidTests(ext) { export default { } // ${ext} `, - parserOptions, + languageOptions, errors: [makeError(3)] }, { @@ -202,7 +214,7 @@ function invalidTests(ext) { export default { } // ${ext} `, - parserOptions, + languageOptions, errors: [makeError(3)] }, { @@ -215,7 +227,7 @@ function invalidTests(ext) { export default { } // ${ext} `, - parserOptions, + languageOptions, errors: [makeError(6)] }, { @@ -227,7 +239,7 @@ function invalidTests(ext) { export var a = { } // ${ext} `, - parserOptions, + languageOptions, errors: [makeError(3), makeError(5)] }, { @@ -239,7 +251,7 @@ function invalidTests(ext) { export default { } // ${ext} `, - parserOptions, + languageOptions, errors: [makeError(3), makeError(5)] }, { @@ -250,7 +262,7 @@ function invalidTests(ext) { export let foo = { } // ${ext} `, - parserOptions, + languageOptions, errors: [...(ext === 'js' ? [] : [makeError(2)]), makeError(4)] }, { @@ -261,7 +273,7 @@ function invalidTests(ext) { export let bar = { } // ${ext} `, - parserOptions, + languageOptions, errors: [makeError(4)] }, { @@ -273,7 +285,7 @@ function invalidTests(ext) { bar({ }) // ${ext} `, - parserOptions, + languageOptions, errors: [makeError(4)] }, { @@ -288,7 +300,7 @@ function invalidTests(ext) { bar({ }) // ${ext} `, - parserOptions, + languageOptions, errors: [...(ext === 'js' ? [] : [makeError(3)]), makeError(6)] }, { @@ -305,13 +317,13 @@ function invalidTests(ext) { } // ${ext} `, - parserOptions, + languageOptions, errors: [...(ext === 'js' ? [] : [makeError(2)]), makeError(8)] }, { filename: `test.${ext}`, code: `export default defineComponent({})`, - parserOptions, + languageOptions, errors: [makeError(1)] } ] @@ -323,7 +335,7 @@ ruleTester.run('vue-component', rule, { { filename: 'test.js', code: `export default { }`, - parserOptions + languageOptions }, ...validTests('js'), ...validTests('jsx'), @@ -333,14 +345,14 @@ ruleTester.run('vue-component', rule, { { filename: 'test.vue', code: `export default { }`, - parserOptions, - errors: [makeError(1)] + errors: [makeError(1)], + languageOptions }, { filename: 'test.jsx', code: `export default { }`, - parserOptions, - errors: [makeError(1)] + errors: [makeError(1)], + languageOptions }, ...invalidTests('js'), ...invalidTests('jsx'), diff --git a/tests/test-utils/typescript.js b/tests/test-utils/typescript.js index e06008a8f..0c6bbd437 100644 --- a/tests/test-utils/typescript.js +++ b/tests/test-utils/typescript.js @@ -10,17 +10,19 @@ module.exports = { } function getTypeScriptFixtureTestOptions() { - const parser = require.resolve('vue-eslint-parser') - const parserOptions = { - parser: { ts: tsParser }, + const parser = require('vue-eslint-parser') + const languageOptions = { + parser, ecmaVersion: 2020, sourceType: 'module', - project: [TSCONFIG_PATH], - extraFileExtensions: ['.vue'] + parserOptions: { + parser: { ts: tsParser }, + project: [TSCONFIG_PATH], + extraFileExtensions: ['.vue'] + } } return { - parser, - parserOptions, + languageOptions, filename: SRC_VUE_TEST_PATH } } diff --git a/tools/new-rule.js b/tools/new-rule.js index 3e4e5b9ff..e569f1da7 100644 --- a/tools/new-rule.js +++ b/tools/new-rule.js @@ -63,12 +63,12 @@ module.exports = { */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/${ruleName}') const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' }