From e46cef91e1829e0f8f0469c1c4a1497ecdc115a0 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sun, 14 Jan 2024 17:54:44 +0900 Subject: [PATCH 01/12] Add test for eslint v9 --- .github/workflows/CI.yml | 8 + lib/utils/index.js | 1 + tests/eslint-compat.js | 134 +++++++- tests/fixtures/script-indent/jsx-01.vue | 2 +- tests/fixtures/script-indent/jsx-02.vue | 2 +- .../ts-abstract-accessor-property-01.vue | 2 +- .../ts-abstract-class-property-01.vue | 2 +- .../ts-abstract-class-property-02.vue | 2 +- .../ts-abstract-method-definition-01.vue | 2 +- .../script-indent/ts-accessor-property-01.vue | 2 +- .../script-indent/ts-accessor-property-02.vue | 2 +- .../script-indent/ts-accessor-property-03.vue | 2 +- .../script-indent/ts-accessor-property-04.vue | 2 +- .../script-indent/ts-accessor-property-05.vue | 2 +- .../script-indent/ts-as-expression-01.vue | 2 +- .../script-indent/ts-call-expression-01.vue | 2 +- .../ts-call-signature-declaration-01.vue | 2 +- .../ts-call-signature-declaration-02.vue | 2 +- .../script-indent/ts-class-declaration-01.vue | 2 +- .../script-indent/ts-class-declaration-02.vue | 2 +- .../script-indent/ts-class-declaration-03.vue | 2 +- .../script-indent/ts-class-declaration-04.vue | 2 +- .../script-indent/ts-class-declaration-05.vue | 2 +- .../script-indent/ts-class-declaration-06.vue | 2 +- .../script-indent/ts-class-declaration-07.vue | 2 +- .../ts-class-fields-private-methods-01.vue | 2 +- .../ts-class-fields-private-properties-01.vue | 2 +- .../script-indent/ts-class-property-01.vue | 2 +- .../script-indent/ts-class-property-02.vue | 2 +- .../script-indent/ts-class-property-03.vue | 2 +- .../script-indent/ts-conditional-type-01.vue | 2 +- .../script-indent/ts-conditional-type-02.vue | 2 +- .../script-indent/ts-conditional-type-03.vue | 2 +- .../script-indent/ts-constructor-type-01.vue | 2 +- .../script-indent/ts-declare-function-01.vue | 2 +- .../script-indent/ts-declare-function-02.vue | 2 +- .../script-indent/ts-declare-function-03.vue | 2 +- .../script-indent/ts-declare-function-04.vue | 2 +- .../script-indent/ts-decorator-01.vue | 2 +- .../script-indent/ts-decorator-02.vue | 2 +- tests/fixtures/script-indent/ts-enum-01.vue | 2 +- tests/fixtures/script-indent/ts-enum-02.vue | 2 +- tests/fixtures/script-indent/ts-enum-03.vue | 2 +- tests/fixtures/script-indent/ts-enum-04.vue | 2 +- tests/fixtures/script-indent/ts-enum-05.vue | 2 +- tests/fixtures/script-indent/ts-enum-06.vue | 2 +- .../script-indent/ts-enum-member-01.vue | 2 +- .../script-indent/ts-enum-member-02.vue | 2 +- .../script-indent/ts-export-assignment-01.vue | 2 +- .../script-indent/ts-export-assignment-02.vue | 2 +- .../script-indent/ts-export-namespace-01.vue | 2 +- .../script-indent/ts-function-type-01.vue | 2 +- .../script-indent/ts-function-type-02.vue | 2 +- .../script-indent/ts-import-assertion-01.vue | 2 +- .../script-indent/ts-import-assertion-02.vue | 2 +- .../script-indent/ts-import-assertion-03.vue | 2 +- .../script-indent/ts-import-assertion-04.vue | 2 +- .../script-indent/ts-import-equal-01.vue | 2 +- .../script-indent/ts-import-equal-02.vue | 2 +- .../script-indent/ts-import-equal-03.vue | 2 +- .../script-indent/ts-import-type-01.vue | 2 +- .../script-indent/ts-import-type-02.vue | 2 +- .../script-indent/ts-import-type-03.vue | 2 +- .../ts-indexed-access-type-01.vue | 2 +- .../ts-indexed-access-type-02.vue | 2 +- tests/fixtures/script-indent/ts-infer-01.vue | 2 +- .../ts-instantiation-expression-01.vue | 2 +- .../ts-interface-declaration-01.vue | 2 +- .../ts-interface-declaration-02.vue | 2 +- .../ts-interface-declaration-03.vue | 2 +- .../ts-interface-declaration-04.vue | 2 +- .../ts-interface-declaration-05.vue | 2 +- .../ts-interface-declaration-06.vue | 2 +- .../ts-interface-declaration-07.vue | 2 +- .../ts-interface-declaration-08.vue | 2 +- .../script-indent/ts-mapped-type-01.vue | 2 +- .../ts-module-declaration-01.vue | 2 +- .../script-indent/ts-new-expression-01.vue | 2 +- .../script-indent/ts-qualified-name-01.vue | 2 +- .../ts-satisfies-operators-01.vue | 2 +- .../script-indent/ts-static-block-01.vue | 2 +- .../ts-template-literal-type-01.vue | 2 +- tests/fixtures/script-indent/ts-tuple-01.vue | 2 +- tests/fixtures/script-indent/ts-tuple-02.vue | 2 +- .../ts-type-alias-seclaration-01.vue | 2 +- .../script-indent/ts-type-annotation-01.vue | 2 +- .../script-indent/ts-type-annotation-02.vue | 2 +- .../script-indent/ts-type-annotation-03.vue | 2 +- .../script-indent/ts-type-annotation-04.vue | 2 +- .../script-indent/ts-type-annotation-05.vue | 2 +- .../script-indent/ts-type-annotation-06.vue | 2 +- .../script-indent/ts-type-assertion-01.vue | 2 +- .../script-indent/ts-type-literal-01.vue | 2 +- .../ts-type-only-import-export-01.vue | 2 +- .../ts-type-only-import-export-02.vue | 2 +- .../ts-type-only-import-export-03.vue | 2 +- .../script-indent/ts-type-paramater-01.vue | 2 +- .../ts-type-parameter-seclaration-01.vue | 2 +- .../ts-union-intersection-01.vue | 2 +- .../ts-union-intersection-02.vue | 2 +- .../ts-union-intersection-03.vue | 2 +- .../ts-union-intersection-04.vue | 2 +- .../ts-union-intersection-05.vue | 2 +- .../ts-union-intersection-06.vue | 2 +- tests/fixtures/utils/ts-utils/tsconfig.json | 7 +- tests/lib/autofix.js | 19 +- tests/lib/configs/configs.js | 1 - tests/lib/rules-without-vue-eslint-parser.js | 16 +- tests/lib/rules-without-vue-sfc.js | 17 +- tests/lib/rules/array-bracket-newline.js | 8 +- tests/lib/rules/array-bracket-spacing.js | 8 +- tests/lib/rules/array-element-newline.js | 8 +- tests/lib/rules/arrow-spacing.js | 8 +- tests/lib/rules/attribute-hyphenation.js | 8 +- tests/lib/rules/attributes-order.js | 8 +- tests/lib/rules/block-lang.js | 8 +- tests/lib/rules/block-order.js | 14 +- tests/lib/rules/block-spacing.js | 5 +- tests/lib/rules/block-tag-newline.js | 5 +- tests/lib/rules/brace-style.js | 5 +- tests/lib/rules/camelcase.js | 5 +- tests/lib/rules/comma-dangle.js | 5 +- tests/lib/rules/comma-spacing.js | 5 +- tests/lib/rules/comma-style.js | 3 +- tests/lib/rules/comment-directive.js | 19 +- tests/lib/rules/component-api-style.js | 9 +- .../rules/component-definition-name-casing.js | 138 +++++---- .../component-name-in-template-casing.js | 6 +- .../rules/component-options-name-casing.js | 2 +- tests/lib/rules/component-tags-order.js | 12 +- tests/lib/rules/custom-event-name-casing.js | 6 +- tests/lib/rules/define-emits-declaration.js | 6 +- tests/lib/rules/define-macros-order.js | 6 +- tests/lib/rules/define-props-declaration.js | 6 +- tests/lib/rules/dot-location.js | 5 +- tests/lib/rules/dot-notation.js | 5 +- tests/lib/rules/enforce-style-attribute.js | 6 +- tests/lib/rules/eqeqeq.js | 5 +- tests/lib/rules/first-attribute-linebreak.js | 5 +- tests/lib/rules/func-call-spacing.js | 3 +- tests/lib/rules/html-button-has-type.js | 5 +- .../lib/rules/html-closing-bracket-newline.js | 7 +- .../lib/rules/html-closing-bracket-spacing.js | 7 +- .../lib/rules/html-comment-content-newline.js | 7 +- .../lib/rules/html-comment-content-spacing.js | 7 +- tests/lib/rules/html-comment-indent.js | 7 +- tests/lib/rules/html-end-tags.js | 5 +- tests/lib/rules/html-indent.js | 6 +- tests/lib/rules/html-quotes.js | 5 +- tests/lib/rules/html-self-closing.js | 4 +- tests/lib/rules/jsx-uses-vars.js | 33 +- tests/lib/rules/key-spacing.js | 5 +- tests/lib/rules/keyword-spacing.js | 5 +- tests/lib/rules/match-component-file-name.js | 242 ++++++++------- .../lib/rules/match-component-import-name.js | 6 +- tests/lib/rules/max-attributes-per-line.js | 5 +- tests/lib/rules/max-len.js | 9 +- tests/lib/rules/max-lines-per-block.js | 6 +- tests/lib/rules/multi-word-component-names.js | 6 +- .../multiline-html-element-content-newline.js | 7 +- tests/lib/rules/multiline-ternary.js | 4 +- .../rules/mustache-interpolation-spacing.js | 5 +- .../new-line-between-multi-line-property.js | 9 +- tests/lib/rules/next-tick-style.js | 6 +- .../lib/rules/no-arrow-functions-in-watch.js | 2 +- .../rules/no-async-in-computed-properties.js | 190 ++++++------ .../lib/rules/no-bare-strings-in-template.js | 9 +- tests/lib/rules/no-boolean-default.js | 62 ++-- tests/lib/rules/no-child-content.js | 5 +- .../rules/no-computed-properties-in-data.js | 6 +- tests/lib/rules/no-console.js | 6 +- tests/lib/rules/no-constant-condition.js | 3 +- .../rules/no-custom-modifiers-on-v-model.js | 5 +- .../no-deprecated-data-object-declaration.js | 2 +- .../no-deprecated-destroyed-lifecycle.js | 9 +- .../no-deprecated-dollar-listeners-api.js | 9 +- .../no-deprecated-dollar-scopedslots-api.js | 9 +- tests/lib/rules/no-deprecated-events-api.js | 2 +- tests/lib/rules/no-deprecated-filter.js | 5 +- .../no-deprecated-functional-template.js | 5 +- .../rules/no-deprecated-html-element-is.js | 5 +- .../rules/no-deprecated-inline-template.js | 5 +- .../rules/no-deprecated-model-definition.js | 6 +- .../rules/no-deprecated-props-default-this.js | 9 +- .../no-deprecated-router-link-tag-prop.js | 6 +- .../rules/no-deprecated-scope-attribute.js | 7 +- .../lib/rules/no-deprecated-slot-attribute.js | 7 +- .../no-deprecated-slot-scope-attribute.js | 7 +- tests/lib/rules/no-deprecated-v-bind-sync.js | 5 +- tests/lib/rules/no-deprecated-v-is.js | 7 +- .../no-deprecated-v-on-native-modifier.js | 5 +- .../no-deprecated-v-on-number-modifiers.js | 5 +- .../no-deprecated-vue-config-keycodes.js | 5 +- tests/lib/rules/no-dupe-keys.js | 48 +-- tests/lib/rules/no-dupe-v-else-if.js | 6 +- .../rules/no-duplicate-attr-inheritance.js | 6 +- tests/lib/rules/no-duplicate-attributes.js | 5 +- tests/lib/rules/no-empty-component-block.js | 5 +- tests/lib/rules/no-empty-pattern.js | 5 +- tests/lib/rules/no-export-in-script-setup.js | 12 +- tests/lib/rules/no-expose-after-await.js | 6 +- tests/lib/rules/no-extra-parens.js | 3 +- tests/lib/rules/no-invalid-model-keys.js | 2 +- tests/lib/rules/no-irregular-whitespace.js | 5 +- tests/lib/rules/no-lifecycle-after-await.js | 9 +- tests/lib/rules/no-lone-template.js | 6 +- tests/lib/rules/no-loss-of-precision.js | 4 +- tests/lib/rules/no-multi-spaces.js | 9 +- .../lib/rules/no-multiple-objects-in-class.js | 9 +- tests/lib/rules/no-multiple-slot-args.js | 9 +- tests/lib/rules/no-multiple-template-root.js | 5 +- tests/lib/rules/no-mutating-props.js | 6 +- tests/lib/rules/no-parsing-error.js | 5 +- .../no-potential-component-option-typo.js | 9 +- tests/lib/rules/no-ref-as-operand.js | 9 +- tests/lib/rules/no-ref-object-destructure.js | 2 +- .../rules/no-ref-object-reactivity-loss.js | 6 +- .../rules/no-required-prop-with-default.js | 6 +- .../lib/rules/no-reserved-component-names.js | 24 +- tests/lib/rules/no-reserved-keys.js | 79 ++--- tests/lib/rules/no-reserved-props.js | 18 +- tests/lib/rules/no-restricted-block.js | 5 +- .../rules/no-restricted-call-after-await.js | 9 +- tests/lib/rules/no-restricted-class.js | 9 +- .../rules/no-restricted-component-names.js | 6 +- .../rules/no-restricted-component-options.js | 9 +- tests/lib/rules/no-restricted-custom-event.js | 9 +- .../lib/rules/no-restricted-html-elements.js | 5 +- tests/lib/rules/no-restricted-props.js | 9 +- .../rules/no-restricted-static-attribute.js | 5 +- tests/lib/rules/no-restricted-syntax.js | 5 +- tests/lib/rules/no-restricted-v-bind.js | 5 +- tests/lib/rules/no-root-v-if.js | 5 +- tests/lib/rules/no-setup-props-destructure.js | 9 +- .../rules/no-setup-props-reactivity-loss.js | 9 +- tests/lib/rules/no-shared-component-data.js | 34 +-- .../no-side-effects-in-computed-properties.js | 7 +- ...-spaces-around-equal-signs-in-attribute.js | 4 +- tests/lib/rules/no-sparse-arrays.js | 5 +- tests/lib/rules/no-static-inline-styles.js | 7 +- tests/lib/rules/no-template-key.js | 5 +- tests/lib/rules/no-template-shadow.js | 6 +- tests/lib/rules/no-template-target-blank.js | 5 +- tests/lib/rules/no-textarea-mustache.js | 5 +- .../rules/no-this-in-before-route-enter.js | 9 +- tests/lib/rules/no-undef-components.js | 38 ++- tests/lib/rules/no-undef-properties.js | 6 +- tests/lib/rules/no-unsupported-features.js | 7 +- .../no-unsupported-features/define-model.js | 7 +- .../no-unsupported-features/define-options.js | 6 +- .../no-unsupported-features/define-slots.js | 7 +- .../dynamic-directive-arguments.js | 7 +- .../is-attribute-with-vue-prefix.js | 7 +- .../no-unsupported-features/script-setup.js | 7 +- .../slot-scope-attribute.js | 7 +- .../style-css-vars-injection.js | 6 +- .../v-bind-attr-modifier.js | 7 +- .../v-bind-prop-modifier-shorthand.js | 7 +- .../v-bind-same-name-shorthand.js | 7 +- .../lib/rules/no-unsupported-features/v-is.js | 7 +- .../rules/no-unsupported-features/v-memo.js | 7 +- .../v-model-argument.js | 7 +- .../v-model-custom-modifiers.js | 7 +- .../rules/no-unsupported-features/v-slot.js | 7 +- tests/lib/rules/no-unused-components.js | 6 +- .../lib/rules/no-unused-emit-declarations.js | 6 +- tests/lib/rules/no-unused-properties.js | 21 +- tests/lib/rules/no-unused-refs.js | 6 +- tests/lib/rules/no-unused-vars.js | 5 +- .../no-use-computed-property-like-method.js | 9 +- tests/lib/rules/no-use-v-else-with-v-for.js | 5 +- tests/lib/rules/no-use-v-if-with-v-for.js | 5 +- tests/lib/rules/no-useless-concat.js | 5 +- tests/lib/rules/no-useless-mustaches.js | 6 +- .../rules/no-useless-template-attributes.js | 6 +- tests/lib/rules/no-useless-v-bind.js | 6 +- .../rules/no-v-for-template-key-on-child.js | 5 +- tests/lib/rules/no-v-for-template-key.js | 5 +- tests/lib/rules/no-v-html.js | 5 +- tests/lib/rules/no-v-model-argument.js | 5 +- .../rules/no-v-text-v-html-on-component.js | 6 +- tests/lib/rules/no-v-text.js | 5 +- tests/lib/rules/no-watch-after-await.js | 9 +- tests/lib/rules/object-curly-newline.js | 5 +- tests/lib/rules/object-curly-spacing.js | 5 +- tests/lib/rules/object-property-newline.js | 5 +- tests/lib/rules/object-shorthand.js | 6 +- tests/lib/rules/one-component-per-file.js | 2 +- tests/lib/rules/operator-linebreak.js | 5 +- tests/lib/rules/order-in-components.js | 14 +- .../lib/rules/padding-line-between-blocks.js | 5 +- tests/lib/rules/padding-line-between-tags.js | 6 +- .../padding-lines-in-component-definition.js | 6 +- tests/lib/rules/prefer-define-options.js | 6 +- tests/lib/rules/prefer-import-from-vue.js | 2 +- .../rules/prefer-prop-type-boolean-first.js | 6 +- .../lib/rules/prefer-separate-static-class.js | 6 +- tests/lib/rules/prefer-template.js | 5 +- .../rules/prefer-true-attribute-shorthand.js | 6 +- tests/lib/rules/prop-name-casing.js | 24 +- tests/lib/rules/quote-props.js | 6 +- tests/lib/rules/require-component-is.js | 5 +- tests/lib/rules/require-default-prop.js | 80 ++--- tests/lib/rules/require-direct-export.js | 2 +- tests/lib/rules/require-emit-validator.js | 14 +- tests/lib/rules/require-explicit-emits.js | 66 ++-- tests/lib/rules/require-expose.js | 6 +- .../lib/rules/require-macro-variable-name.js | 6 +- tests/lib/rules/require-name-property.js | 50 +-- tests/lib/rules/require-prop-comment.js | 22 +- .../rules/require-prop-type-constructor.js | 8 +- tests/lib/rules/require-prop-types.js | 117 ++++--- tests/lib/rules/require-render-return.js | 54 ++-- tests/lib/rules/require-slots-as-functions.js | 9 +- .../rules/require-toggle-inside-transition.js | 5 +- tests/lib/rules/require-typed-object-prop.js | 190 +++++++----- tests/lib/rules/require-typed-ref.js | 15 +- tests/lib/rules/require-v-for-key.js | 5 +- tests/lib/rules/require-valid-default-prop.js | 286 ++++++++++-------- .../lib/rules/return-in-computed-property.js | 60 ++-- tests/lib/rules/return-in-emits-validator.js | 9 +- tests/lib/rules/script-indent.js | 16 +- tests/lib/rules/script-setup-uses-vars.js | 55 ++-- ...singleline-html-element-content-newline.js | 7 +- tests/lib/rules/sort-keys.js | 170 ++++++----- tests/lib/rules/space-in-parens.js | 3 +- tests/lib/rules/space-infix-ops.js | 3 +- tests/lib/rules/space-unary-ops.js | 5 +- tests/lib/rules/static-class-names-order.js | 5 +- tests/lib/rules/template-curly-spacing.js | 5 +- tests/lib/rules/this-in-template.js | 5 +- tests/lib/rules/use-v-on-exact.js | 5 +- tests/lib/rules/v-bind-style.js | 5 +- tests/lib/rules/v-for-delimiter-style.js | 5 +- tests/lib/rules/v-if-else-key.js | 6 +- tests/lib/rules/v-on-event-hyphenation.js | 7 +- tests/lib/rules/v-on-function-call.js | 9 +- tests/lib/rules/v-on-handler-style.js | 9 +- tests/lib/rules/v-on-style.js | 5 +- tests/lib/rules/v-slot-style.js | 5 +- tests/lib/rules/valid-attribute-name.js | 6 +- tests/lib/rules/valid-define-emits.js | 31 +- tests/lib/rules/valid-define-options.js | 27 +- tests/lib/rules/valid-define-props.js | 31 +- tests/lib/rules/valid-model-definition.js | 4 +- tests/lib/rules/valid-next-tick.js | 6 +- tests/lib/rules/valid-template-root.js | 5 +- tests/lib/rules/valid-v-bind-sync.js | 5 +- tests/lib/rules/valid-v-bind.js | 5 +- tests/lib/rules/valid-v-cloak.js | 5 +- tests/lib/rules/valid-v-else-if.js | 5 +- tests/lib/rules/valid-v-else.js | 5 +- tests/lib/rules/valid-v-for.js | 5 +- tests/lib/rules/valid-v-html.js | 5 +- tests/lib/rules/valid-v-if.js | 5 +- tests/lib/rules/valid-v-is.js | 5 +- tests/lib/rules/valid-v-memo.js | 5 +- tests/lib/rules/valid-v-model.js | 5 +- tests/lib/rules/valid-v-on.js | 5 +- tests/lib/rules/valid-v-once.js | 5 +- tests/lib/rules/valid-v-pre.js | 5 +- tests/lib/rules/valid-v-show.js | 5 +- tests/lib/rules/valid-v-slot.js | 5 +- tests/lib/rules/valid-v-text.js | 5 +- tests/lib/script-setup-vars.js | 15 +- tests/lib/utils/core-rules/wrap-core-rule.js | 6 +- tests/lib/utils/html-comments.js | 26 +- tests/lib/utils/ref-object-references.js | 82 +++-- tests/lib/utils/selector.js | 43 ++- .../ts-utils/index/get-component-emits.js | 63 ++-- .../ts-utils/index/get-component-props.js | 67 ++-- tests/lib/utils/vue-component.js | 108 ++++--- tests/test-utils/typescript.js | 16 +- tools/new-rule.js | 6 +- 374 files changed, 2420 insertions(+), 2020 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 70e4dd7d3..60dbff86d 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -28,6 +28,12 @@ jobs: matrix: node: [17, 18, 20] os: [ubuntu-latest] + eslint: [8] + include: + # On next ESLint version + - eslint: ^9.0.0-0 + node: 20 + os: ubuntu-latest runs-on: ${{ matrix.os }} steps: @@ -39,6 +45,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..acbbe476b 100644 --- a/tests/eslint-compat.js +++ b/tests/eslint-compat.js @@ -1,11 +1,56 @@ // @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() { + return class ESLintForV8 extends eslint.ESLint { + static get version() { + return eslint.ESLint.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 + } + newOptions.overrideConfig = processCompatibleConfig( + newOptions.overrideConfig + ) + if (plugins) { + newOptions.overrideConfig.plugins = Object.keys(plugins) + newOptions.plugins = plugins + } + } + return newOptions + } +} /** @returns {typeof eslint.ESLint} */ function getESLintClassForV6() { class ESLintForV6 { @@ -68,3 +113,88 @@ function getESLintClassForV6() { const eslintClass = /** @type {any} */ (ESLintForV6) return 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) { + this.linter.defineRule(...args) + } + } + run(name, rule, tests) { + super.run(name, rule, { + valid: (tests.valid || []).map((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') + } + 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,154 @@ 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 }, { 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..d596be541 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' } diff --git a/tests/lib/rules/component-options-name-casing.js b/tests/lib/rules/component-options-name-casing.js index 5108df3a4..19093894c 100644 --- a/tests/lib/rules/component-options-name-casing.js +++ b/tests/lib/rules/component-options-name-casing.js @@ -4,7 +4,7 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/component-options-name-casing') const tester = new RuleTester({ diff --git a/tests/lib/rules/component-tags-order.js b/tests/lib/rules/component-tags-order.js index 7888415b5..128c4a9e8 100644 --- a/tests/lib/rules/component-tags-order.js +++ b/tests/lib/rules/component-tags-order.js @@ -4,30 +4,28 @@ 'use strict' const rule = require('../../../lib/rules/component-tags-order') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const assert = require('assert') const { ESLint } = require('../../eslint-compat') // Initialize linter. const eslint = new ESLint({ overrideConfig: { - parser: require.resolve('vue-eslint-parser'), - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2015 }, - plugins: ['vue'], + plugins: { vue: require('../../../lib/index') }, rules: { 'vue/comment-directive': 'error', 'vue/component-tags-order': 'error' } }, - useEslintrc: false, - plugins: { vue: require('../../../lib/index') }, fix: true }) const tester = new RuleTester({ - parser: require.resolve('vue-eslint-parser') + languageOptions: { parser: require('vue-eslint-parser') } }) tester.run('component-tags-order', rule, { diff --git a/tests/lib/rules/custom-event-name-casing.js b/tests/lib/rules/custom-event-name-casing.js index f8e547992..0d441243a 100644 --- a/tests/lib/rules/custom-event-name-casing.js +++ b/tests/lib/rules/custom-event-name-casing.js @@ -4,12 +4,12 @@ */ 'use strict' -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const rule = require('../../../lib/rules/custom-event-name-casing') 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/define-emits-declaration.js b/tests/lib/rules/define-emits-declaration.js index 6e42d1f4a..117c9d740 100644 --- a/tests/lib/rules/define-emits-declaration.js +++ b/tests/lib/rules/define-emits-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-emits-declaration') 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/define-macros-order.js b/tests/lib/rules/define-macros-order.js index 878c0ea93..b8fc73e42 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' } diff --git a/tests/lib/rules/define-props-declaration.js b/tests/lib/rules/define-props-declaration.js index b34c05c3a..383897fe1 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' } 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..82bb26359 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,8 +99,8 @@ 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 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..37ead7234 100644 --- a/tests/lib/rules/no-arrow-functions-in-watch.js +++ b/tests/lib/rules/no-arrow-functions-in-watch.js @@ -3,7 +3,7 @@ */ 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: { 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..55877955e 100644 --- a/tests/lib/rules/no-boolean-default.js +++ b/tests/lib/rules/no-boolean-default.js @@ -7,7 +7,7 @@ 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: { @@ -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..5697fd1a4 100644 --- a/tests/lib/rules/no-constant-condition.js +++ b/tests/lib/rules/no-constant-condition.js @@ -7,8 +7,7 @@ const { RuleTester } = require('eslint') 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..12bdb26c5 100644 --- a/tests/lib/rules/no-deprecated-data-object-declaration.js +++ b/tests/lib/rules/no-deprecated-data-object-declaration.js @@ -6,7 +6,7 @@ const rule = require('../../../lib/rules/no-deprecated-data-object-declaration') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const parserOptions = { ecmaVersion: 2018, 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..b82a5bc73 100644 --- a/tests/lib/rules/no-deprecated-events-api.js +++ b/tests/lib/rules/no-deprecated-events-api.js @@ -6,7 +6,7 @@ const rule = require('../../../lib/rules/no-deprecated-events-api') -const RuleTester = require('eslint').RuleTester +const RuleTester = require('../../eslint-compat').RuleTester const parserOptions = { ecmaVersion: 2020, diff --git a/tests/lib/rules/no-deprecated-filter.js b/tests/lib/rules/no-deprecated-filter.js index 66469f841..eca3614a2 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, { 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..6f7e8c539 100644 --- a/tests/lib/rules/no-dupe-keys.js +++ b/tests/lib/rules/no-dupe-keys.js @@ -5,7 +5,7 @@ '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: { @@ -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..71ed0776d 100644 --- a/tests/lib/rules/no-export-in-script-setup.js +++ b/tests/lib/rules/no-export-in-script-setup.js @@ -10,8 +10,8 @@ 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,7 +57,7 @@ ruleTester.run('no-export-in-script-setup', rule, { export interface Bar {} `, - parser: require.resolve('vue-eslint-parser'), + languageOptions: { parser: require('vue-eslint-parser') }, parserOptions: { parser: require.resolve('@typescript-eslint/parser') } @@ -72,7 +72,7 @@ ruleTester.run('no-export-in-script-setup', rule, { export interface Bar {} `, - parser: require.resolve('vue-eslint-parser'), + languageOptions: { parser: require('vue-eslint-parser') }, parserOptions: { parser: require.resolve('@typescript-eslint/parser') } @@ -141,7 +141,6 @@ ruleTester.run('no-export-in-script-setup', rule, { export {} `, - parser: require.resolve('vue-eslint-parser'), parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, @@ -158,7 +157,8 @@ ruleTester.run('no-export-in-script-setup', rule, { message: '``, - 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..d3bf72743 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' } diff --git a/tests/lib/rules/no-reserved-component-names.js b/tests/lib/rules/no-reserved-component-names.js index d9114810b..91507609a 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([ @@ -507,8 +507,8 @@ ruleTester.run('no-reserved-component-names', rule, { } `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + parserOptions, + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -519,8 +519,8 @@ ruleTester.run('no-reserved-component-names', rule, { } `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + parserOptions, + languageOptions: { parser: require('vue-eslint-parser') } }, // https://github.com/vuejs/eslint-plugin-vue/issues/1018 { @@ -559,20 +559,20 @@ ruleTester.run('no-reserved-component-names', rule, { { filename: 'test.vue', code: ``, - parser: require.resolve('vue-eslint-parser'), - parserOptions + parserOptions, + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', code: ``, - parser: require.resolve('vue-eslint-parser'), - parserOptions + parserOptions, + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', code: ``, - parser: require.resolve('vue-eslint-parser'), - parserOptions + parserOptions, + languageOptions: { parser: require('vue-eslint-parser') } } ], @@ -678,7 +678,7 @@ ruleTester.run('no-reserved-component-names', rule, { ...invalidElements.map((name) => ({ filename: `${name}.vue`, code: ``, - parser: require.resolve('vue-eslint-parser'), + languageOptions: { parser: require('vue-eslint-parser') }, parserOptions, 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..db4ce0a8c 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,10 +65,10 @@ 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') } }, { filename: 'test.vue', @@ -96,10 +96,10 @@ 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') } } ], invalid: [ @@ -257,7 +257,6 @@ tester.run('no-reserved-props', rule, { defineProps() `, - parser: require.resolve('vue-eslint-parser'), parserOptions: { parser: require.resolve('@typescript-eslint/parser') }, @@ -272,7 +271,8 @@ tester.run('no-reserved-props', rule, { line: 5, column: 9 } - ] + ], + languageOptions: { parser: require('vue-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..402d63faf 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, { 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..3ddd64e41 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, { 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-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..68f866c85 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, { 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..131bed399 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' } 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..b156671a5 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' } diff --git a/tests/lib/rules/no-unused-properties.js b/tests/lib/rules/no-unused-properties.js index 93a5279f0..0d0f14b0c 100644 --- a/tests/lib/rules/no-unused-properties.js +++ b/tests/lib/rules/no-unused-properties.js @@ -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' } @@ -3900,15 +3900,16 @@ 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', + parser: require('vue-eslint-parser'), + plugins: { + vue: { + rules: { + 'no-unused-components': require('../../../lib/rules/no-unused-components'), + 'no-unused-properties': rule + } + } + }, parserOptions: { 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..b80db32a2 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, { 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..a35e62b4e 100644 --- a/tests/lib/rules/one-component-per-file.js +++ b/tests/lib/rules/one-component-per-file.js @@ -5,7 +5,7 @@ '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: { 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..ebda93845 100644 --- a/tests/lib/rules/order-in-components.js +++ b/tests/lib/rules/order-in-components.js @@ -5,7 +5,7 @@ '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() @@ -176,8 +176,8 @@ ruleTester.run('order-in-components', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + parserOptions, + languageOptions: { parser: require('vue-eslint-parser') } } ], @@ -944,7 +944,6 @@ ruleTester.run('order-in-components', rule, { }; `, - parser: require.resolve('vue-eslint-parser'), parserOptions: { ...parserOptions, parser: { ts: require.resolve('@typescript-eslint/parser') } @@ -955,7 +954,8 @@ ruleTester.run('order-in-components', rule, { 'The "props" property should be above the "setup" property on line 4.', line: 5 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'example.vue', @@ -975,7 +975,6 @@ ruleTester.run('order-in-components', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), parserOptions, errors: [ { @@ -983,7 +982,8 @@ ruleTester.run('order-in-components', rule, { '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..28ad93f4d 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' } 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..3acb46885 100644 --- a/tests/lib/rules/prefer-import-from-vue.js +++ b/tests/lib/rules/prefer-import-from-vue.js @@ -4,7 +4,7 @@ */ '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({ 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..01fefb9a0 100644 --- a/tests/lib/rules/prop-name-casing.js +++ b/tests/lib/rules/prop-name-casing.js @@ -6,7 +6,7 @@ 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 = { ecmaVersion: 2018, @@ -325,8 +325,8 @@ ruleTester.run('prop-name-casing', rule, { }) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + parserOptions, + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -335,8 +335,8 @@ ruleTester.run('prop-name-casing', rule, { defineProps(['greetingText']) `, - parser: require.resolve('vue-eslint-parser'), - parserOptions + parserOptions, + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -348,11 +348,11 @@ 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') } } ], @@ -621,14 +621,14 @@ 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') } }, { filename: 'test.vue', @@ -637,14 +637,14 @@ 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') } }, ...(semver.lt( require('@typescript-eslint/parser/package.json').version, @@ -662,7 +662,7 @@ ruleTester.run('prop-name-casing', rule, { defineProps() `, - parser: require.resolve('vue-eslint-parser'), + languageOptions: { parser: require('vue-eslint-parser') }, parserOptions: { ...parserOptions, parser: require.resolve('@typescript-eslint/parser') 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..bc4ea59fa 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: [ { @@ -180,7 +180,7 @@ ruleTester.run('require-default-prop', rule, { export default { props: ['foo'] }`, - parserOptions + languageOptions }, // sparse array @@ -209,8 +209,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 +221,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 +236,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 +254,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 +274,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 +304,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 +321,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') } } } ], @@ -522,14 +528,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 +555,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..f80588830 100644 --- a/tests/lib/rules/require-direct-export.js +++ b/tests/lib/rules/require-direct-export.js @@ -5,7 +5,7 @@ '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: { diff --git a/tests/lib/rules/require-emit-validator.js b/tests/lib/rules/require-emit-validator.js index d539b55ea..f45b6c9eb 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, { @@ -166,12 +166,12 @@ ruleTester.run('require-emit-validator', rule, { const emit = defineEmits<(e: 'foo')=>void>() `, - parser: require.resolve('vue-eslint-parser'), parserOptions: { ecmaVersion: 6, sourceType: 'module', parser: require.resolve('@typescript-eslint/parser') - } + }, + languageOptions: { parser: require('vue-eslint-parser') } }, { code: ` @@ -350,7 +350,6 @@ ruleTester.run('require-emit-validator', rule, { const emit = defineEmits(['foo']) `, - parser: require.resolve('vue-eslint-parser'), parserOptions: { ecmaVersion: 6, sourceType: 'module' @@ -361,7 +360,8 @@ ruleTester.run('require-emit-validator', rule, { data: { name: 'foo' }, line: 3 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } }, { filename: 'test.vue', @@ -370,7 +370,6 @@ ruleTester.run('require-emit-validator', rule, { const emit = defineEmits({foo:null}) `, - parser: require.resolve('vue-eslint-parser'), parserOptions: { ecmaVersion: 6, sourceType: 'module' @@ -381,7 +380,8 @@ ruleTester.run('require-emit-validator', rule, { data: { name: 'foo' }, line: 3 } - ] + ], + languageOptions: { parser: require('vue-eslint-parser') } } ] }) 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-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..7ee613a5d 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' } @@ -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..1e6df7435 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', @@ -138,7 +138,7 @@ ruleTester.run('require-prop-types', rule, { }); `, parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -152,7 +152,7 @@ ruleTester.run('require-prop-types', rule, { }); `, parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { ecmaVersion: 6, sourceType: 'module' } }, { filename: 'test.vue', @@ -163,8 +163,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 +176,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 +201,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 +211,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 +220,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 +239,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 +256,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 +266,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 +283,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 +296,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 +315,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 +332,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 +349,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 +370,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 +391,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 +410,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 +430,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 +439,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 +450,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 +459,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..ce1496fd8 100644 --- a/tests/lib/rules/script-setup-uses-vars.js +++ b/tests/lib/rules/script-setup-uses-vars.js @@ -7,22 +7,25 @@ const eslint = require('eslint') 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..b54a75ef2 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,49 @@ 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() + // tsParser.parseForESLint(tsFileCode || '', { + // ...config.parserOptions, + // filePath: SRC_TS_TEST_PATH + // }) 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..4c69fe44e 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,51 @@ 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() + // tsParser.parseForESLint(tsFileCode || '', { + // ...config.languageOptions, + // filePath: SRC_TS_TEST_PATH + // }) 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' } From 475cd97011888c04c509ff4b9e6579e0efc86a67 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sun, 14 Jan 2024 18:42:43 +0900 Subject: [PATCH 02/12] fix --- .../rules/component-definition-name-casing.js | 6 +- .../component-name-in-template-casing.js | 12 +- .../rules/component-options-name-casing.js | 2 +- tests/lib/rules/component-tags-order.js | 2 +- tests/lib/rules/define-emits-declaration.js | 86 ++++++---- tests/lib/rules/define-macros-order.js | 48 ++++-- tests/lib/rules/define-props-declaration.js | 34 ++-- tests/lib/rules/html-indent.js | 6 +- .../lib/rules/no-arrow-functions-in-watch.js | 2 +- tests/lib/rules/no-boolean-default.js | 2 +- .../no-deprecated-data-object-declaration.js | 44 ++--- tests/lib/rules/no-deprecated-events-api.js | 42 ++--- tests/lib/rules/no-deprecated-filter.js | 6 +- tests/lib/rules/no-dupe-keys.js | 2 +- tests/lib/rules/no-export-in-script-setup.js | 26 +-- tests/lib/rules/no-expose-after-await.js | 10 +- tests/lib/rules/no-invalid-model-keys.js | 2 +- tests/lib/rules/no-lifecycle-after-await.js | 8 +- tests/lib/rules/no-mutating-props.js | 10 +- tests/lib/rules/no-ref-object-destructure.js | 2 +- .../rules/no-ref-object-reactivity-loss.js | 2 +- .../rules/no-required-prop-with-default.js | 156 ++++++++++------- .../lib/rules/no-reserved-component-names.js | 80 +++++---- tests/lib/rules/no-reserved-props.js | 30 ++-- .../rules/no-restricted-call-after-await.js | 4 +- tests/lib/rules/no-restricted-props.js | 34 ++-- .../no-side-effects-in-computed-properties.js | 4 +- tests/lib/rules/no-undef-properties.js | 6 +- .../lib/rules/no-unused-emit-declarations.js | 16 +- tests/lib/rules/no-unused-properties.js | 11 +- tests/lib/rules/no-watch-after-await.js | 8 +- tests/lib/rules/one-component-per-file.js | 2 +- tests/lib/rules/order-in-components.js | 153 ++++++++--------- .../padding-lines-in-component-definition.js | 4 +- tests/lib/rules/prefer-import-from-vue.js | 2 +- tests/lib/rules/prop-name-casing.js | 160 ++++++++++-------- tests/lib/rules/require-default-prop.js | 21 ++- tests/lib/rules/require-direct-export.js | 6 +- tests/lib/rules/require-emit-validator.js | 93 +++++----- .../rules/require-prop-type-constructor.js | 8 +- tests/lib/rules/require-prop-types.js | 14 +- 41 files changed, 669 insertions(+), 497 deletions(-) diff --git a/tests/lib/rules/component-definition-name-casing.js b/tests/lib/rules/component-definition-name-casing.js index aca446751..97d1e2d9a 100644 --- a/tests/lib/rules/component-definition-name-casing.js +++ b/tests/lib/rules/component-definition-name-casing.js @@ -342,7 +342,6 @@ ruleTester.run('component-definition-name-casing', rule, { filename: 'test.vue', code: `(Vue as VueConstructor).component('foo-bar', component)`, output: `(Vue as VueConstructor).component('FooBar', component)`, - parser: require.resolve('@typescript-eslint/parser'), errors: [ { message: 'Property name "foo-bar" is not PascalCase.', @@ -350,7 +349,10 @@ ruleTester.run('component-definition-name-casing', rule, { line: 1 } ], - languageOptions + languageOptions: { + parser: require('@typescript-eslint/parser'), + ...languageOptions + } }, { filename: 'test.vue', diff --git a/tests/lib/rules/component-name-in-template-casing.js b/tests/lib/rules/component-name-in-template-casing.js index d596be541..44a23d532 100644 --- a/tests/lib/rules/component-name-in-template-casing.js +++ b/tests/lib/rules/component-name-in-template-casing.js @@ -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 b8fc73e42..09ac0208d 100644 --- a/tests/lib/rules/define-macros-order.js +++ b/tests/lib/rules/define-macros-order.js @@ -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 383897fe1..3af4513ea 100644 --- a/tests/lib/rules/define-props-declaration.js +++ b/tests/lib/rules/define-props-declaration.js @@ -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/html-indent.js b/tests/lib/rules/html-indent.js index 82bb26359..b8763dfb2 100644 --- a/tests/lib/rules/html-indent.js +++ b/tests/lib/rules/html-indent.js @@ -102,8 +102,10 @@ const tester = new RuleTester({ languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2020, - ecmaFeatures: { - globalReturn: true + parserOptions: { + ecmaFeatures: { + globalReturn: true + } } } }) diff --git a/tests/lib/rules/no-arrow-functions-in-watch.js b/tests/lib/rules/no-arrow-functions-in-watch.js index 37ead7234..a76de6ad0 100644 --- a/tests/lib/rules/no-arrow-functions-in-watch.js +++ b/tests/lib/rules/no-arrow-functions-in-watch.js @@ -6,7 +6,7 @@ const rule = require('../../../lib/rules/no-arrow-functions-in-watch') const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/no-boolean-default.js b/tests/lib/rules/no-boolean-default.js index 55877955e..c1f1a1784 100644 --- a/tests/lib/rules/no-boolean-default.js +++ b/tests/lib/rules/no-boolean-default.js @@ -10,7 +10,7 @@ const rule = require('../../../lib/rules/no-boolean-default') const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/no-deprecated-data-object-declaration.js b/tests/lib/rules/no-deprecated-data-object-declaration.js index 12bdb26c5..1c2007aab 100644 --- a/tests/lib/rules/no-deprecated-data-object-declaration.js +++ b/tests/lib/rules/no-deprecated-data-object-declaration.js @@ -8,7 +8,7 @@ const rule = require('../../../lib/rules/no-deprecated-data-object-declaration') 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-events-api.js b/tests/lib/rules/no-deprecated-events-api.js index b82a5bc73..4b4fd288f 100644 --- a/tests/lib/rules/no-deprecated-events-api.js +++ b/tests/lib/rules/no-deprecated-events-api.js @@ -8,7 +8,7 @@ const rule = require('../../../lib/rules/no-deprecated-events-api') 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 eca3614a2..cf2a33518 100644 --- a/tests/lib/rules/no-deprecated-filter.js +++ b/tests/lib/rules/no-deprecated-filter.js @@ -24,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-dupe-keys.js b/tests/lib/rules/no-dupe-keys.js index 6f7e8c539..2eae55863 100644 --- a/tests/lib/rules/no-dupe-keys.js +++ b/tests/lib/rules/no-dupe-keys.js @@ -8,7 +8,7 @@ const rule = require('../../../lib/rules/no-dupe-keys') const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/no-export-in-script-setup.js b/tests/lib/rules/no-export-in-script-setup.js index 71ed0776d..bc801b13c 100644 --- a/tests/lib/rules/no-export-in-script-setup.js +++ b/tests/lib/rules/no-export-in-script-setup.js @@ -57,9 +57,11 @@ ruleTester.run('no-export-in-script-setup', rule, { export interface Bar {} `, - languageOptions: { parser: require('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 {} `, - languageOptions: { parser: require('vue-eslint-parser') }, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } } ]) @@ -141,9 +145,6 @@ ruleTester.run('no-export-in-script-setup', rule, { export {} `, - 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-invalid-model-keys.js b/tests/lib/rules/no-invalid-model-keys.js index ff8c8b7b8..44469346f 100644 --- a/tests/lib/rules/no-invalid-model-keys.js +++ b/tests/lib/rules/no-invalid-model-keys.js @@ -8,7 +8,7 @@ const rule = require('../../../lib/rules/no-invalid-model-keys') const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/no-lifecycle-after-await.js b/tests/lib/rules/no-lifecycle-after-await.js index a3c4db5f9..9314eb5bd 100644 --- a/tests/lib/rules/no-lifecycle-after-await.js +++ b/tests/lib/rules/no-lifecycle-after-await.js @@ -119,7 +119,7 @@ tester.run('no-lifecycle-after-await', rule, { await doSomething() `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -132,7 +132,7 @@ tester.run('no-lifecycle-after-await', rule, { onMounted(() => { /* ... */ }) // not error `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -145,7 +145,7 @@ tester.run('no-lifecycle-after-await', rule, { onMounted(() => { /* ... */ }) // not error `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -157,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-mutating-props.js b/tests/lib/rules/no-mutating-props.js index 4a2933b86..1ecca1787 100644 --- a/tests/lib/rules/no-mutating-props.js +++ b/tests/lib/rules/no-mutating-props.js @@ -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-ref-object-destructure.js b/tests/lib/rules/no-ref-object-destructure.js index 9d9051b6b..e9b6e0d59 100644 --- a/tests/lib/rules/no-ref-object-destructure.js +++ b/tests/lib/rules/no-ref-object-destructure.js @@ -8,7 +8,7 @@ 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 d5c948c23..c06e456bb 100644 --- a/tests/lib/rules/no-ref-object-reactivity-loss.js +++ b/tests/lib/rules/no-ref-object-reactivity-loss.js @@ -8,7 +8,7 @@ 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' } diff --git a/tests/lib/rules/no-required-prop-with-default.js b/tests/lib/rules/no-required-prop-with-default.js index d3bf72743..af33872f2 100644 --- a/tests/lib/rules/no-required-prop-with-default.js +++ b/tests/lib/rules/no-required-prop-with-default.js @@ -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 91507609a..14ab1334f 100644 --- a/tests/lib/rules/no-reserved-component-names.js +++ b/tests/lib/rules/no-reserved-component-names.js @@ -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, { } `, - parserOptions, - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', @@ -519,14 +521,16 @@ ruleTester.run('no-reserved-component-names', rule, { } `, - parserOptions, - languageOptions: { parser: require('vue-eslint-parser') } + 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: ``, - parserOptions, - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', code: ``, - parserOptions, - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', code: ``, - parserOptions, - languageOptions: { parser: require('vue-eslint-parser') } + 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: ``, - languageOptions: { parser: require('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-props.js b/tests/lib/rules/no-reserved-props.js index db4ce0a8c..aa8252f0c 100644 --- a/tests/lib/rules/no-reserved-props.js +++ b/tests/lib/rules/no-reserved-props.js @@ -65,10 +65,12 @@ tester.run('no-reserved-props', rule, { defineProps() `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', @@ -96,10 +98,12 @@ tester.run('no-reserved-props', rule, { defineProps() `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } } ], invalid: [ @@ -257,9 +261,6 @@ tester.run('no-reserved-props', rule, { defineProps() `, - parserOptions: { - parser: require.resolve('@typescript-eslint/parser') - }, errors: [ { message: "'ref' is a reserved attribute and cannot be used as props.", @@ -272,7 +273,12 @@ tester.run('no-reserved-props', rule, { column: 9 } ], - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } + } }, { filename: 'test.vue', diff --git a/tests/lib/rules/no-restricted-call-after-await.js b/tests/lib/rules/no-restricted-call-after-await.js index 402d63faf..faa0b2670 100644 --- a/tests/lib/rules/no-restricted-call-after-await.js +++ b/tests/lib/rules/no-restricted-call-after-await.js @@ -139,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', @@ -151,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-props.js b/tests/lib/rules/no-restricted-props.js index 3ddd64e41..a50b22911 100644 --- a/tests/lib/rules/no-restricted-props.js +++ b/tests/lib/rules/no-restricted-props.js @@ -390,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.', @@ -410,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, @@ -428,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: [ @@ -466,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: [ @@ -511,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: [ @@ -556,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-side-effects-in-computed-properties.js b/tests/lib/rules/no-side-effects-in-computed-properties.js index 68f866c85..7ba6c0827 100644 --- a/tests/lib/rules/no-side-effects-in-computed-properties.js +++ b/tests/lib/rules/no-side-effects-in-computed-properties.js @@ -391,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-undef-properties.js b/tests/lib/rules/no-undef-properties.js index 131bed399..83812a248 100644 --- a/tests/lib/rules/no-undef-properties.js +++ b/tests/lib/rules/no-undef-properties.js @@ -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-unused-emit-declarations.js b/tests/lib/rules/no-unused-emit-declarations.js index b156671a5..17b2f441b 100644 --- a/tests/lib/rules/no-unused-emit-declarations.js +++ b/tests/lib/rules/no-unused-emit-declarations.js @@ -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 0d0f14b0c..7711dd8f1 100644 --- a/tests/lib/rules/no-unused-properties.js +++ b/tests/lib/rules/no-unused-properties.js @@ -2131,8 +2131,10 @@ tester.run('no-unused-properties', rule, { `, - parserOptions: { - parser: '@typescript-eslint/parser' + languageOptions: { + parserOptions: { + parser: '@typescript-eslint/parser' + } } }, @@ -3901,7 +3903,7 @@ tester.run('no-unused-properties', rule, { describe('`vue/no-unused-properties` and `vue/no-unused-components` should not conflict.', () => { const linter = new Linter() const config = { - parser: require('vue-eslint-parser'), + files: ['**/*.vue'], plugins: { vue: { rules: { @@ -3910,7 +3912,8 @@ describe('`vue/no-unused-properties` and `vue/no-unused-components` should not c } } }, - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 2020, sourceType: 'module' }, diff --git a/tests/lib/rules/no-watch-after-await.js b/tests/lib/rules/no-watch-after-await.js index b80db32a2..06da09cf3 100644 --- a/tests/lib/rules/no-watch-after-await.js +++ b/tests/lib/rules/no-watch-after-await.js @@ -130,7 +130,7 @@ tester.run('no-watch-after-await', rule, { await doSomething() `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -143,7 +143,7 @@ tester.run('no-watch-after-await', rule, { watchEffect(() => { /* ... */ }) // not error `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -156,7 +156,7 @@ tester.run('no-watch-after-await', rule, { watchEffect(() => { /* ... */ }) // not error `, - parserOptions: { ecmaVersion: 2022 } + languageOptions: { ecmaVersion: 2022 } }, { filename: 'test.vue', @@ -170,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/one-component-per-file.js b/tests/lib/rules/one-component-per-file.js index a35e62b4e..7c62e69a9 100644 --- a/tests/lib/rules/one-component-per-file.js +++ b/tests/lib/rules/one-component-per-file.js @@ -8,7 +8,7 @@ const rule = require('../../../lib/rules/one-component-per-file') const RuleTester = require('../../eslint-compat').RuleTester const ruleTester = new RuleTester({ - parserOptions: { + languageOptions: { ecmaVersion: 2018, sourceType: 'module' } diff --git a/tests/lib/rules/order-in-components.js b/tests/lib/rules/order-in-components.js index ebda93845..25010f483 100644 --- a/tests/lib/rules/order-in-components.js +++ b/tests/lib/rules/order-in-components.js @@ -7,12 +7,11 @@ const rule = require('../../../lib/rules/order-in-components') 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,7 +175,6 @@ ruleTester.run('order-in-components', rule, { }) `, - 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,10 +944,6 @@ ruleTester.run('order-in-components', rule, { }; `, - parserOptions: { - ...parserOptions, - parser: { ts: require.resolve('@typescript-eslint/parser') } - }, errors: [ { message: @@ -955,7 +951,13 @@ ruleTester.run('order-in-components', rule, { line: 5 } ], - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { + parser: { ts: require.resolve('@typescript-eslint/parser') } + } + } }, { filename: 'example.vue', @@ -975,7 +977,6 @@ ruleTester.run('order-in-components', rule, { }) `, - parserOptions, errors: [ { message: diff --git a/tests/lib/rules/padding-lines-in-component-definition.js b/tests/lib/rules/padding-lines-in-component-definition.js index 28ad93f4d..702897431 100644 --- a/tests/lib/rules/padding-lines-in-component-definition.js +++ b/tests/lib/rules/padding-lines-in-component-definition.js @@ -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-import-from-vue.js b/tests/lib/rules/prefer-import-from-vue.js index 3acb46885..519d0a877 100644 --- a/tests/lib/rules/prefer-import-from-vue.js +++ b/tests/lib/rules/prefer-import-from-vue.js @@ -8,7 +8,7 @@ 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/prop-name-casing.js b/tests/lib/rules/prop-name-casing.js index 01fefb9a0..0ec845938 100644 --- a/tests/lib/rules/prop-name-casing.js +++ b/tests/lib/rules/prop-name-casing.js @@ -8,7 +8,7 @@ const semver = require('semver') const rule = require('../../../lib/rules/prop-name-casing') 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, { }) `, - parserOptions, - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', @@ -335,8 +337,10 @@ ruleTester.run('prop-name-casing', rule, { defineProps(['greetingText']) `, - parserOptions, - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', @@ -348,11 +352,13 @@ ruleTester.run('prop-name-casing', rule, { defineProps() `, - parserOptions: { - ...parserOptions, - parser: require.resolve('@typescript-eslint/parser') - }, - languageOptions: { parser: require('vue-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, { }) `, - parserOptions, errors: [ { message: 'Prop "greeting_text" is not in camelCase.', line: 4 } ], - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } }, { filename: 'test.vue', @@ -637,14 +645,16 @@ ruleTester.run('prop-name-casing', rule, { defineProps(['greeting_text']) `, - parserOptions, errors: [ { message: 'Prop "greeting_text" is not in camelCase.', line: 3 } ], - languageOptions: { parser: require('vue-eslint-parser') } + 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() `, - languageOptions: { parser: require('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-default-prop.js b/tests/lib/rules/require-default-prop.js index bc4ea59fa..97aea4919 100644 --- a/tests/lib/rules/require-default-prop.js +++ b/tests/lib/rules/require-default-prop.js @@ -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', @@ -389,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', @@ -408,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 diff --git a/tests/lib/rules/require-direct-export.js b/tests/lib/rules/require-direct-export.js index f80588830..cec06c7a0 100644 --- a/tests/lib/rules/require-direct-export.js +++ b/tests/lib/rules/require-direct-export.js @@ -8,10 +8,12 @@ const rule = require('../../../lib/rules/require-direct-export') 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 f45b6c9eb..0a509a6c1 100644 --- a/tests/lib/rules/require-emit-validator.js +++ b/tests/lib/rules/require-emit-validator.js @@ -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,12 +172,12 @@ ruleTester.run('require-emit-validator', rule, { const emit = defineEmits<(e: 'foo')=>void>() `, - parserOptions: { + languageOptions: { + parser: require('vue-eslint-parser'), ecmaVersion: 6, sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') - }, - languageOptions: { parser: require('vue-eslint-parser') } + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } }, { code: ` @@ -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,10 +359,6 @@ ruleTester.run('require-emit-validator', rule, { const emit = defineEmits(['foo']) `, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module' - }, errors: [ { messageId: 'missing', @@ -361,7 +366,11 @@ ruleTester.run('require-emit-validator', rule, { line: 3 } ], - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', @@ -370,10 +379,6 @@ ruleTester.run('require-emit-validator', rule, { const emit = defineEmits({foo:null}) `, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module' - }, errors: [ { messageId: 'skipped', @@ -381,7 +386,11 @@ ruleTester.run('require-emit-validator', rule, { line: 3 } ], - languageOptions: { parser: require('vue-eslint-parser') } + languageOptions: { + parser: require('vue-eslint-parser'), + ecmaVersion: 6, + sourceType: 'module' + } } ] }) diff --git a/tests/lib/rules/require-prop-type-constructor.js b/tests/lib/rules/require-prop-type-constructor.js index 7ee613a5d..acd098634 100644 --- a/tests/lib/rules/require-prop-type-constructor.js +++ b/tests/lib/rules/require-prop-type-constructor.js @@ -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', diff --git a/tests/lib/rules/require-prop-types.js b/tests/lib/rules/require-prop-types.js index 1e6df7435..bf38d9fd7 100644 --- a/tests/lib/rules/require-prop-types.js +++ b/tests/lib/rules/require-prop-types.js @@ -137,8 +137,11 @@ ruleTester.run('require-prop-types', rule, { } }); `, - parser: require.resolve('@typescript-eslint/parser'), - languageOptions: { 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'), - languageOptions: { ecmaVersion: 6, sourceType: 'module' } + languageOptions: { + parser: require('@typescript-eslint/parser'), + ecmaVersion: 6, + sourceType: 'module' + } }, { filename: 'test.vue', From 91e42928d8e42161cb168eb11e4873fed9fd89e8 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sun, 14 Jan 2024 18:55:06 +0900 Subject: [PATCH 03/12] fix --- tests/lib/rules/block-order.js | 4 +++- tests/lib/rules/comment-directive.js | 16 ++++++++++------ tests/lib/rules/component-tags-order.js | 4 +++- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/tests/lib/rules/block-order.js b/tests/lib/rules/block-order.js index 98658c7f8..8a73527bc 100644 --- a/tests/lib/rules/block-order.js +++ b/tests/lib/rules/block-order.js @@ -11,6 +11,7 @@ const { ESLint } = require('../../eslint-compat') // Initialize linter. const eslint = new ESLint({ overrideConfig: { + files: ['**/*.vue'], languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 @@ -19,7 +20,8 @@ const eslint = new ESLint({ rules: { 'vue/comment-directive': 'error', 'vue/block-order': 'error' - } + }, + processor: require('../../../lib/processor') }, fix: true }) diff --git a/tests/lib/rules/comment-directive.js b/tests/lib/rules/comment-directive.js index 8f5d24b2f..158c60472 100644 --- a/tests/lib/rules/comment-directive.js +++ b/tests/lib/rules/comment-directive.js @@ -11,6 +11,7 @@ const { ESLint } = require('../../eslint-compat') // Initialize linter. const eslint = new ESLint({ overrideConfig: { + files: ['*'], languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 @@ -21,7 +22,8 @@ const eslint = new ESLint({ 'vue/comment-directive': 'error', 'vue/no-parsing-error': 'error', 'vue/no-duplicate-attributes': 'error' - } + }, + processor: require('../../../lib/processor') } }) @@ -41,7 +43,7 @@ describe('comment-directive', () => { ` const messages = await lintMessages(code) - assert.deepEqual(messages.length, 0) + assert.deepEqual(messages, []) }) it('disable specific rules if ', async () => { @@ -351,6 +353,7 @@ describe('comment-directive', () => { describe('reportUnusedDisableDirectives', () => { const eslint = new ESLint({ overrideConfig: { + files: ['**/*.vue'], languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 @@ -364,7 +367,8 @@ describe('comment-directive', () => { ], 'vue/no-parsing-error': 'error', 'vue/no-duplicate-attributes': 'error' - } + }, + processor: require('../../../lib/processor') } }) @@ -403,7 +407,7 @@ describe('comment-directive', () => { const messages = await lintMessages(code) - assert.deepEqual(messages.length, 0) + assert.deepEqual(messages, []) }) it('disable and report unused ', async () => { const code = ` @@ -502,7 +506,7 @@ describe('comment-directive', () => { const messages = await lintMessages(code) - assert.deepEqual(messages.length, 0) + assert.deepEqual(messages, []) }) it('dont report used, with duplicate eslint-disable', async () => { @@ -516,7 +520,7 @@ describe('comment-directive', () => { const messages = await lintMessages(code) - assert.deepEqual(messages.length, 0) + assert.deepEqual(messages, []) }) }) }) diff --git a/tests/lib/rules/component-tags-order.js b/tests/lib/rules/component-tags-order.js index 2544f1375..92f14613b 100644 --- a/tests/lib/rules/component-tags-order.js +++ b/tests/lib/rules/component-tags-order.js @@ -11,6 +11,7 @@ const { ESLint } = require('../../eslint-compat') // Initialize linter. const eslint = new ESLint({ overrideConfig: { + files: ['**/*.vue'], languageOptions: { parser: require('vue-eslint-parser'), ecmaVersion: 2015 @@ -19,7 +20,8 @@ const eslint = new ESLint({ rules: { 'vue/comment-directive': 'error', 'vue/component-tags-order': 'error' - } + }, + processor: require('../../../lib/processor') }, fix: true }) From acee72924826c60ba312629880e964cac9d9fe98 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sun, 14 Jan 2024 19:02:59 +0900 Subject: [PATCH 04/12] fix --- tests/eslint-compat.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/tests/eslint-compat.js b/tests/eslint-compat.js index acbbe476b..c46df01d8 100644 --- a/tests/eslint-compat.js +++ b/tests/eslint-compat.js @@ -18,10 +18,10 @@ module.exports = { } /** @returns {typeof eslint.ESLint} */ -function getESLintClassForV8() { - return class ESLintForV8 extends eslint.ESLint { +function getESLintClassForV8(BaseESLintClass = eslint.ESLint) { + return class ESLintForV8 extends BaseESLintClass { static get version() { - return eslint.ESLint.version + return BaseESLintClass.version } constructor(options) { super(adjustOptions(options)) @@ -39,6 +39,7 @@ function getESLintClassForV8() { let plugins if (newOptions.overrideConfig.plugins) { plugins = newOptions.overrideConfig.plugins + delete newOptions.overrideConfig.plugins } newOptions.overrideConfig = processCompatibleConfig( newOptions.overrideConfig @@ -47,6 +48,10 @@ function getESLintClassForV8() { newOptions.overrideConfig.plugins = Object.keys(plugins) newOptions.plugins = plugins } + + // adjust + delete newOptions.overrideConfig.files + delete newOptions.overrideConfig.processor } return newOptions } @@ -111,7 +116,7 @@ function getESLintClassForV6() { /** @type {typeof eslint.ESLint} */ const eslintClass = /** @type {any} */ (ESLintForV6) - return eslintClass + return getESLintClassForV8(eslintClass) } /** @returns {typeof eslint.Linter} */ @@ -143,7 +148,9 @@ function getRuleTesterClassForV8() { } run(name, rule, tests) { super.run(name, rule, { - valid: (tests.valid || []).map((test) => adjustOptions(test)), + valid: (tests.valid || []).map((test) => + typeof test === 'string' ? test : adjustOptions(test) + ), invalid: (tests.invalid || []).map((test) => adjustOptions(test)) }) } From 276e08af3a033389d542f98fe0175f8c32bf7781 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sun, 14 Jan 2024 19:07:54 +0900 Subject: [PATCH 05/12] fix --- tests/lib/rules/comma-style.js | 2 +- tests/lib/rules/jsx-uses-vars.js | 2 +- tests/lib/rules/no-constant-condition.js | 2 +- tests/lib/rules/no-export-in-script-setup.js | 2 +- tests/lib/rules/no-extra-parens.js | 2 +- tests/lib/rules/no-unused-properties.js | 2 +- tests/lib/rules/script-setup-uses-vars.js | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/lib/rules/comma-style.js b/tests/lib/rules/comma-style.js index 6dc40eb70..aaab8b31d 100644 --- a/tests/lib/rules/comma-style.js +++ b/tests/lib/rules/comma-style.js @@ -3,7 +3,7 @@ */ 'use strict' -const { RuleTester } = require('eslint') +const { RuleTester } = require('../../eslint-compat') const rule = require('../../../lib/rules/comma-style') const tester = new RuleTester({ diff --git a/tests/lib/rules/jsx-uses-vars.js b/tests/lib/rules/jsx-uses-vars.js index e61980a95..680df0161 100644 --- a/tests/lib/rules/jsx-uses-vars.js +++ b/tests/lib/rules/jsx-uses-vars.js @@ -4,7 +4,7 @@ */ 'use strict' -const eslint = require('eslint') +const eslint = require('../../eslint-compat') const rule = require('../../../lib/rules/jsx-uses-vars') const { getCoreRule } = require('../../../lib/utils') const ruleNoUnusedVars = getCoreRule('no-unused-vars') diff --git a/tests/lib/rules/no-constant-condition.js b/tests/lib/rules/no-constant-condition.js index 5697fd1a4..8d25479f8 100644 --- a/tests/lib/rules/no-constant-condition.js +++ b/tests/lib/rules/no-constant-condition.js @@ -3,7 +3,7 @@ */ 'use strict' -const { RuleTester } = require('eslint') +const { RuleTester } = require('../../eslint-compat') const rule = require('../../../lib/rules/no-constant-condition.js') const tester = new RuleTester({ diff --git a/tests/lib/rules/no-export-in-script-setup.js b/tests/lib/rules/no-export-in-script-setup.js index bc801b13c..e6f2f1e19 100644 --- a/tests/lib/rules/no-export-in-script-setup.js +++ b/tests/lib/rules/no-export-in-script-setup.js @@ -5,7 +5,7 @@ '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 diff --git a/tests/lib/rules/no-extra-parens.js b/tests/lib/rules/no-extra-parens.js index 00f4ec8d6..dda150694 100644 --- a/tests/lib/rules/no-extra-parens.js +++ b/tests/lib/rules/no-extra-parens.js @@ -3,7 +3,7 @@ */ 'use strict' -const { RuleTester } = require('eslint') +const { RuleTester } = require('../../eslint-compat') const rule = require('../../../lib/rules/no-extra-parens') const tester = new RuleTester({ diff --git a/tests/lib/rules/no-unused-properties.js b/tests/lib/rules/no-unused-properties.js index 7711dd8f1..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 { diff --git a/tests/lib/rules/script-setup-uses-vars.js b/tests/lib/rules/script-setup-uses-vars.js index ce1496fd8..f903a3f9b 100644 --- a/tests/lib/rules/script-setup-uses-vars.js +++ b/tests/lib/rules/script-setup-uses-vars.js @@ -5,7 +5,7 @@ */ 'use strict' -const eslint = require('eslint') +const eslint = require('../../eslint-compat') const rule = require('../../../lib/rules/script-setup-uses-vars') const { getCoreRule } = require('../../../lib/utils') const ruleNoUnusedVars = getCoreRule('no-unused-vars') From 9ef96608e2768fa48754d4f06c350fdb9cdb237f Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sun, 14 Jan 2024 20:55:07 +0900 Subject: [PATCH 06/12] fix --- tests/eslint-compat.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tests/eslint-compat.js b/tests/eslint-compat.js index c46df01d8..d05bc12a4 100644 --- a/tests/eslint-compat.js +++ b/tests/eslint-compat.js @@ -60,6 +60,7 @@ function getESLintClassForV8(BaseESLintClass = eslint.ESLint) { function getESLintClassForV6() { class ESLintForV6 { static get version() { + // @ts-expect-error return eslint.CLIEngine.version } @@ -76,7 +77,7 @@ function getESLintClassForV6() { plugins: pluginsMap, ...otherOptions } = options || {} - /** @type {eslint.CLIEngine.Options} */ + const newOptions = { fix: Boolean(fix), reportUnusedDisableDirectives: reportUnusedDisableDirectives @@ -97,6 +98,8 @@ function getESLintClassForV6() { : undefined, ...overrideConfig } + + // @ts-expect-error this.engine = new eslint.CLIEngine(newOptions) for (const [name, plugin] of Object.entries(pluginsMap || {})) { @@ -109,7 +112,7 @@ 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 } } @@ -143,6 +146,7 @@ function getRuleTesterClassForV8() { }) ) for (const args of defineRules) { + // @ts-expect-error this.linter.defineRule(...args) } } @@ -202,6 +206,11 @@ 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) } From 512f7b462f7d85b2a1f336e3f94848f78eef07b4 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sun, 14 Jan 2024 21:50:03 +0900 Subject: [PATCH 07/12] fix workflow --- .github/workflows/CI.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 60dbff86d..66f6af0e8 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -26,14 +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 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: From e3a3e39167850b677757efca853aab4ff2e6eb71 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Tue, 16 Jan 2024 18:11:24 +0900 Subject: [PATCH 08/12] fix --- tests/lib/rules/require-explicit-slots.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/lib/rules/require-explicit-slots.js b/tests/lib/rules/require-explicit-slots.js index 1849ea9a1..f9168fc27 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') + } } }) From b085212732dafcd54c9d26e3750c333de1a8ea4c Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Tue, 16 Jan 2024 18:25:26 +0900 Subject: [PATCH 09/12] fix --- tests/lib/rules/require-explicit-slots.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/lib/rules/require-explicit-slots.js b/tests/lib/rules/require-explicit-slots.js index f9168fc27..91ce0ce0b 100644 --- a/tests/lib/rules/require-explicit-slots.js +++ b/tests/lib/rules/require-explicit-slots.js @@ -128,8 +128,10 @@ tester.run('require-explicit-slots', rule, { `, - parserOptions: { - parser: null + languageOptions: { + parserOptions: { + parser: null + } } } ], From 1f1c26a0b1e1ba4474fa64162017e9dd4add3c82 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Tue, 16 Jan 2024 20:47:31 +0900 Subject: [PATCH 10/12] fix --- tests/lib/rules/no-restricted-v-on.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/lib/rules/no-restricted-v-on.js b/tests/lib/rules/no-restricted-v-on.js index 1d73d5c15..9d233a7a2 100644 --- a/tests/lib/rules/no-restricted-v-on.js +++ b/tests/lib/rules/no-restricted-v-on.js @@ -8,8 +8,8 @@ const RuleTester = require('eslint').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' } From e5eb9ca1da904d235a0d6096633c1bcdcc07ace6 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Tue, 16 Jan 2024 20:47:47 +0900 Subject: [PATCH 11/12] fix --- tests/lib/rules/no-restricted-v-on.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/lib/rules/no-restricted-v-on.js b/tests/lib/rules/no-restricted-v-on.js index 9d233a7a2..159165c45 100644 --- a/tests/lib/rules/no-restricted-v-on.js +++ b/tests/lib/rules/no-restricted-v-on.js @@ -4,7 +4,7 @@ */ '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({ From 7e985bb28d235c2a2c1b601eebbbb728a61b8692 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Wed, 17 Jan 2024 00:11:36 +0900 Subject: [PATCH 12/12] fix --- tests/lib/rules/comment-directive.js | 8 ++++---- tests/lib/utils/ts-utils/index/get-component-emits.js | 4 ---- tests/lib/utils/ts-utils/index/get-component-props.js | 4 ---- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/tests/lib/rules/comment-directive.js b/tests/lib/rules/comment-directive.js index 158c60472..868cc391b 100644 --- a/tests/lib/rules/comment-directive.js +++ b/tests/lib/rules/comment-directive.js @@ -43,7 +43,7 @@ describe('comment-directive', () => { ` const messages = await lintMessages(code) - assert.deepEqual(messages, []) + assert.deepStrictEqual(messages, []) }) it('disable specific rules if ', async () => { @@ -407,7 +407,7 @@ describe('comment-directive', () => { const messages = await lintMessages(code) - assert.deepEqual(messages, []) + assert.deepStrictEqual(messages, []) }) it('disable and report unused ', async () => { const code = ` @@ -506,7 +506,7 @@ describe('comment-directive', () => { const messages = await lintMessages(code) - assert.deepEqual(messages, []) + assert.deepStrictEqual(messages, []) }) it('dont report used, with duplicate eslint-disable', async () => { @@ -520,7 +520,7 @@ describe('comment-directive', () => { const messages = await lintMessages(code) - assert.deepEqual(messages, []) + assert.deepStrictEqual(messages, []) }) }) }) 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 b54a75ef2..8c9d5d34c 100644 --- a/tests/lib/utils/ts-utils/index/get-component-emits.js +++ b/tests/lib/utils/ts-utils/index/get-component-emits.js @@ -59,10 +59,6 @@ function extractComponentProps(code, tsFileCode) { fs.writeFileSync(SRC_TS_TEST_PATH, tsFileCode || '', 'utf8') // clean './src/test.ts' cache tsParser.clearCaches() - // tsParser.parseForESLint(tsFileCode || '', { - // ...config.parserOptions, - // filePath: SRC_TS_TEST_PATH - // }) 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 4c69fe44e..100d0a18c 100644 --- a/tests/lib/utils/ts-utils/index/get-component-props.js +++ b/tests/lib/utils/ts-utils/index/get-component-props.js @@ -61,10 +61,6 @@ function extractComponentProps(code, tsFileCode) { fs.writeFileSync(SRC_TS_TEST_PATH, tsFileCode || '', 'utf8') // clean './src/test.ts' cache tsParser.clearCaches() - // tsParser.parseForESLint(tsFileCode || '', { - // ...config.languageOptions, - // filePath: SRC_TS_TEST_PATH - // }) assert.deepStrictEqual( linter.verify(code, config, path.join(FIXTURES_ROOT, './src/test.vue')), []