diff --git a/.changeset/fast-monkeys-smoke.md b/.changeset/fast-monkeys-smoke.md
new file mode 100644
index 000000000..676d9d23c
--- /dev/null
+++ b/.changeset/fast-monkeys-smoke.md
@@ -0,0 +1,5 @@
+---
+"eslint-plugin-vue": minor
+---
+
+Added new `vue/no-undef-directives` rule
diff --git a/.changeset/gorgeous-colts-bathe.md b/.changeset/gorgeous-colts-bathe.md
new file mode 100644
index 000000000..e5f3a14a8
--- /dev/null
+++ b/.changeset/gorgeous-colts-bathe.md
@@ -0,0 +1,5 @@
+---
+"eslint-plugin-vue": patch
+---
+
+Updates resources
diff --git a/.changeset/rich-zebras-type.md b/.changeset/rich-zebras-type.md
new file mode 100644
index 000000000..62c2438ae
--- /dev/null
+++ b/.changeset/rich-zebras-type.md
@@ -0,0 +1,5 @@
+---
+"eslint-plugin-vue": minor
+---
+
+Changed `vue/no-negated-v-if-condition` suggestion to autofix
diff --git a/.changeset/swift-spies-nail.md b/.changeset/swift-spies-nail.md
new file mode 100644
index 000000000..6d8ffe174
--- /dev/null
+++ b/.changeset/swift-spies-nail.md
@@ -0,0 +1,5 @@
+---
+"eslint-plugin-vue": minor
+---
+
+Added new `ignoreEOLComments` option to `vue/no-multi-spaces` rule
diff --git a/docs/rules/index.md b/docs/rules/index.md
index 3209c157d..cfed2f082 100644
--- a/docs/rules/index.md
+++ b/docs/rules/index.md
@@ -238,7 +238,7 @@ For example:
| [vue/no-empty-component-block] | disallow the `` `
+
+
+
+
+
+
+
+
+```
+
+
+
+
+
+```vue
+
+
+
+
+
+
+
+
+
+```
+
+
+
+## :wrench: Options
+
+```json
+{
+ "vue/no-undef-directives": ["error", {
+ "ignore": ["foo"]
+ }]
+}
+```
+
+- `"ignore"` (`string[]`) An array of directive names or regular expression patterns (e.g. `"/^custom-/"`) that ignore these rules. This option will check both kebab-case and PascalCase versions of the given directive names. Default is empty.
+
+### `"ignore": ["foo"]`
+
+
+
+```vue
+
+
+
+
+```
+
+
+
+## :mag: Implementation
+
+- [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/no-undef-directives.js)
+- [Test source](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/no-undef-directives.js)
diff --git a/eslint.config.mjs b/eslint.config.mjs
index f5c8aee09..4857aaeb7 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -275,6 +275,7 @@ export default typegen([
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-empty-object-type': 'off',
'@typescript-eslint/no-namespace': 'off',
+ '@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/triple-slash-reference': 'off',
'@typescript-eslint/unified-signatures': 'off',
'@typescript-eslint/ban-ts-comment': [
diff --git a/lib/configs/flat/base.js b/lib/configs/flat/base.js
index 22386f377..1f4579afa 100644
--- a/lib/configs/flat/base.js
+++ b/lib/configs/flat/base.js
@@ -8,7 +8,7 @@ module.exports = [
name: 'vue/base/setup',
plugins: {
get vue() {
- return require('../../index')
+ return require('../../plugin')
}
},
languageOptions: {
@@ -20,7 +20,7 @@ module.exports = [
files: ['*.vue', '**/*.vue'],
plugins: {
get vue() {
- return require('../../index')
+ return require('../../plugin')
}
},
languageOptions: {
diff --git a/lib/configs/index.js b/lib/configs/index.js
new file mode 100644
index 000000000..fbc7a84f5
--- /dev/null
+++ b/lib/configs/index.js
@@ -0,0 +1,28 @@
+const configs = {
+ // eslintrc configs
+ base: require('./base'),
+
+ 'vue2-essential': require('./vue2-essential'),
+ 'vue2-strongly-recommended': require('./vue2-strongly-recommended'),
+ 'vue2-recommended': require('./vue2-recommended'),
+
+ essential: require('./vue3-essential'),
+ 'strongly-recommended': require('./vue3-strongly-recommended'),
+ recommended: require('./vue3-recommended'),
+
+ // flat configs
+ 'flat/base': require('./flat/base.js'),
+
+ 'flat/vue2-essential': require('./flat/vue2-essential.js'),
+ 'flat/vue2-strongly-recommended': require('./flat/vue2-strongly-recommended.js'),
+ 'flat/vue2-recommended': require('./flat/vue2-recommended.js'),
+
+ 'flat/essential': require('./flat/vue3-essential.js'),
+ 'flat/strongly-recommended': require('./flat/vue3-strongly-recommended.js'),
+ 'flat/recommended': require('./flat/vue3-recommended.js'),
+
+ // config-format-agnostic configs
+ 'no-layout-rules': require('./no-layout-rules')
+}
+
+module.exports = configs
diff --git a/lib/index.js b/lib/index.js
index 2921a2c99..788f5de9e 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -1,292 +1,6 @@
-/*
- * IMPORTANT!
- * This file has been automatically generated,
- * in order to update its content execute "npm run update"
- */
'use strict'
-const plugin = {
- meta: require('./meta'),
- configs: {
- // eslintrc configs
- base: require('./configs/base'),
+const configs = require('./configs')
+const plugin = require('./plugin')
- 'vue2-essential': require('./configs/vue2-essential'),
- 'vue2-strongly-recommended': require('./configs/vue2-strongly-recommended'),
- 'vue2-recommended': require('./configs/vue2-recommended'),
-
- essential: require('./configs/vue3-essential'),
- 'strongly-recommended': require('./configs/vue3-strongly-recommended'),
- recommended: require('./configs/vue3-recommended'),
-
- // flat configs
- 'flat/base': require('./configs/flat/base.js'),
-
- 'flat/vue2-essential': require('./configs/flat/vue2-essential.js'),
- 'flat/vue2-strongly-recommended': require('./configs/flat/vue2-strongly-recommended.js'),
- 'flat/vue2-recommended': require('./configs/flat/vue2-recommended.js'),
-
- 'flat/essential': require('./configs/flat/vue3-essential.js'),
- 'flat/strongly-recommended': require('./configs/flat/vue3-strongly-recommended.js'),
- 'flat/recommended': require('./configs/flat/vue3-recommended.js'),
-
- // config-format-agnostic configs
- 'no-layout-rules': require('./configs/no-layout-rules')
- },
- rules: {
- 'array-bracket-newline': require('./rules/array-bracket-newline'),
- 'array-bracket-spacing': require('./rules/array-bracket-spacing'),
- 'array-element-newline': require('./rules/array-element-newline'),
- 'arrow-spacing': require('./rules/arrow-spacing'),
- 'attribute-hyphenation': require('./rules/attribute-hyphenation'),
- 'attributes-order': require('./rules/attributes-order'),
- 'block-lang': require('./rules/block-lang'),
- 'block-order': require('./rules/block-order'),
- 'block-spacing': require('./rules/block-spacing'),
- 'block-tag-newline': require('./rules/block-tag-newline'),
- 'brace-style': require('./rules/brace-style'),
- camelcase: require('./rules/camelcase'),
- 'comma-dangle': require('./rules/comma-dangle'),
- 'comma-spacing': require('./rules/comma-spacing'),
- 'comma-style': require('./rules/comma-style'),
- 'comment-directive': require('./rules/comment-directive'),
- 'component-api-style': require('./rules/component-api-style'),
- 'component-definition-name-casing': require('./rules/component-definition-name-casing'),
- 'component-name-in-template-casing': require('./rules/component-name-in-template-casing'),
- 'component-options-name-casing': require('./rules/component-options-name-casing'),
- 'custom-event-name-casing': require('./rules/custom-event-name-casing'),
- 'define-emits-declaration': require('./rules/define-emits-declaration'),
- 'define-macros-order': require('./rules/define-macros-order'),
- 'define-props-declaration': require('./rules/define-props-declaration'),
- 'define-props-destructuring': require('./rules/define-props-destructuring'),
- 'dot-location': require('./rules/dot-location'),
- 'dot-notation': require('./rules/dot-notation'),
- 'enforce-style-attribute': require('./rules/enforce-style-attribute'),
- eqeqeq: require('./rules/eqeqeq'),
- 'first-attribute-linebreak': require('./rules/first-attribute-linebreak'),
- 'func-call-spacing': require('./rules/func-call-spacing'),
- 'html-button-has-type': require('./rules/html-button-has-type'),
- 'html-closing-bracket-newline': require('./rules/html-closing-bracket-newline'),
- 'html-closing-bracket-spacing': require('./rules/html-closing-bracket-spacing'),
- 'html-comment-content-newline': require('./rules/html-comment-content-newline'),
- 'html-comment-content-spacing': require('./rules/html-comment-content-spacing'),
- 'html-comment-indent': require('./rules/html-comment-indent'),
- 'html-end-tags': require('./rules/html-end-tags'),
- 'html-indent': require('./rules/html-indent'),
- 'html-quotes': require('./rules/html-quotes'),
- 'html-self-closing': require('./rules/html-self-closing'),
- 'jsx-uses-vars': require('./rules/jsx-uses-vars'),
- 'key-spacing': require('./rules/key-spacing'),
- 'keyword-spacing': require('./rules/keyword-spacing'),
- 'match-component-file-name': require('./rules/match-component-file-name'),
- 'match-component-import-name': require('./rules/match-component-import-name'),
- 'max-attributes-per-line': require('./rules/max-attributes-per-line'),
- 'max-len': require('./rules/max-len'),
- 'max-lines-per-block': require('./rules/max-lines-per-block'),
- 'max-props': require('./rules/max-props'),
- 'max-template-depth': require('./rules/max-template-depth'),
- 'multi-word-component-names': require('./rules/multi-word-component-names'),
- 'multiline-html-element-content-newline': require('./rules/multiline-html-element-content-newline'),
- 'multiline-ternary': require('./rules/multiline-ternary'),
- 'mustache-interpolation-spacing': require('./rules/mustache-interpolation-spacing'),
- 'new-line-between-multi-line-property': require('./rules/new-line-between-multi-line-property'),
- 'next-tick-style': require('./rules/next-tick-style'),
- 'no-arrow-functions-in-watch': require('./rules/no-arrow-functions-in-watch'),
- 'no-async-in-computed-properties': require('./rules/no-async-in-computed-properties'),
- 'no-bare-strings-in-template': require('./rules/no-bare-strings-in-template'),
- 'no-boolean-default': require('./rules/no-boolean-default'),
- 'no-child-content': require('./rules/no-child-content'),
- 'no-computed-properties-in-data': require('./rules/no-computed-properties-in-data'),
- 'no-console': require('./rules/no-console'),
- 'no-constant-condition': require('./rules/no-constant-condition'),
- 'no-custom-modifiers-on-v-model': require('./rules/no-custom-modifiers-on-v-model'),
- 'no-deprecated-data-object-declaration': require('./rules/no-deprecated-data-object-declaration'),
- 'no-deprecated-delete-set': require('./rules/no-deprecated-delete-set'),
- 'no-deprecated-destroyed-lifecycle': require('./rules/no-deprecated-destroyed-lifecycle'),
- 'no-deprecated-dollar-listeners-api': require('./rules/no-deprecated-dollar-listeners-api'),
- 'no-deprecated-dollar-scopedslots-api': require('./rules/no-deprecated-dollar-scopedslots-api'),
- 'no-deprecated-events-api': require('./rules/no-deprecated-events-api'),
- 'no-deprecated-filter': require('./rules/no-deprecated-filter'),
- 'no-deprecated-functional-template': require('./rules/no-deprecated-functional-template'),
- 'no-deprecated-html-element-is': require('./rules/no-deprecated-html-element-is'),
- 'no-deprecated-inline-template': require('./rules/no-deprecated-inline-template'),
- 'no-deprecated-model-definition': require('./rules/no-deprecated-model-definition'),
- 'no-deprecated-props-default-this': require('./rules/no-deprecated-props-default-this'),
- 'no-deprecated-router-link-tag-prop': require('./rules/no-deprecated-router-link-tag-prop'),
- 'no-deprecated-scope-attribute': require('./rules/no-deprecated-scope-attribute'),
- 'no-deprecated-slot-attribute': require('./rules/no-deprecated-slot-attribute'),
- 'no-deprecated-slot-scope-attribute': require('./rules/no-deprecated-slot-scope-attribute'),
- 'no-deprecated-v-bind-sync': require('./rules/no-deprecated-v-bind-sync'),
- 'no-deprecated-v-is': require('./rules/no-deprecated-v-is'),
- 'no-deprecated-v-on-native-modifier': require('./rules/no-deprecated-v-on-native-modifier'),
- 'no-deprecated-v-on-number-modifiers': require('./rules/no-deprecated-v-on-number-modifiers'),
- 'no-deprecated-vue-config-keycodes': require('./rules/no-deprecated-vue-config-keycodes'),
- 'no-dupe-keys': require('./rules/no-dupe-keys'),
- 'no-dupe-v-else-if': require('./rules/no-dupe-v-else-if'),
- 'no-duplicate-attr-inheritance': require('./rules/no-duplicate-attr-inheritance'),
- 'no-duplicate-attributes': require('./rules/no-duplicate-attributes'),
- 'no-duplicate-class-names': require('./rules/no-duplicate-class-names'),
- 'no-empty-component-block': require('./rules/no-empty-component-block'),
- 'no-empty-pattern': require('./rules/no-empty-pattern'),
- 'no-export-in-script-setup': require('./rules/no-export-in-script-setup'),
- 'no-expose-after-await': require('./rules/no-expose-after-await'),
- 'no-extra-parens': require('./rules/no-extra-parens'),
- 'no-implicit-coercion': require('./rules/no-implicit-coercion'),
- 'no-import-compiler-macros': require('./rules/no-import-compiler-macros'),
- 'no-irregular-whitespace': require('./rules/no-irregular-whitespace'),
- 'no-lifecycle-after-await': require('./rules/no-lifecycle-after-await'),
- 'no-lone-template': require('./rules/no-lone-template'),
- 'no-loss-of-precision': require('./rules/no-loss-of-precision'),
- 'no-multi-spaces': require('./rules/no-multi-spaces'),
- 'no-multiple-objects-in-class': require('./rules/no-multiple-objects-in-class'),
- 'no-multiple-slot-args': require('./rules/no-multiple-slot-args'),
- 'no-multiple-template-root': require('./rules/no-multiple-template-root'),
- 'no-mutating-props': require('./rules/no-mutating-props'),
- 'no-negated-condition': require('./rules/no-negated-condition'),
- 'no-negated-v-if-condition': require('./rules/no-negated-v-if-condition'),
- 'no-parsing-error': require('./rules/no-parsing-error'),
- 'no-potential-component-option-typo': require('./rules/no-potential-component-option-typo'),
- 'no-ref-as-operand': require('./rules/no-ref-as-operand'),
- 'no-ref-object-reactivity-loss': require('./rules/no-ref-object-reactivity-loss'),
- 'no-required-prop-with-default': require('./rules/no-required-prop-with-default'),
- 'no-reserved-component-names': require('./rules/no-reserved-component-names'),
- 'no-reserved-keys': require('./rules/no-reserved-keys'),
- 'no-reserved-props': require('./rules/no-reserved-props'),
- 'no-restricted-block': require('./rules/no-restricted-block'),
- 'no-restricted-call-after-await': require('./rules/no-restricted-call-after-await'),
- 'no-restricted-class': require('./rules/no-restricted-class'),
- 'no-restricted-component-names': require('./rules/no-restricted-component-names'),
- 'no-restricted-component-options': require('./rules/no-restricted-component-options'),
- 'no-restricted-custom-event': require('./rules/no-restricted-custom-event'),
- 'no-restricted-html-elements': require('./rules/no-restricted-html-elements'),
- 'no-restricted-props': require('./rules/no-restricted-props'),
- 'no-restricted-static-attribute': require('./rules/no-restricted-static-attribute'),
- 'no-restricted-syntax': require('./rules/no-restricted-syntax'),
- 'no-restricted-v-bind': require('./rules/no-restricted-v-bind'),
- 'no-restricted-v-on': require('./rules/no-restricted-v-on'),
- 'no-root-v-if': require('./rules/no-root-v-if'),
- 'no-setup-props-reactivity-loss': require('./rules/no-setup-props-reactivity-loss'),
- 'no-shared-component-data': require('./rules/no-shared-component-data'),
- 'no-side-effects-in-computed-properties': require('./rules/no-side-effects-in-computed-properties'),
- 'no-spaces-around-equal-signs-in-attribute': require('./rules/no-spaces-around-equal-signs-in-attribute'),
- 'no-sparse-arrays': require('./rules/no-sparse-arrays'),
- 'no-static-inline-styles': require('./rules/no-static-inline-styles'),
- 'no-template-key': require('./rules/no-template-key'),
- 'no-template-shadow': require('./rules/no-template-shadow'),
- 'no-template-target-blank': require('./rules/no-template-target-blank'),
- 'no-textarea-mustache': require('./rules/no-textarea-mustache'),
- 'no-this-in-before-route-enter': require('./rules/no-this-in-before-route-enter'),
- 'no-undef-components': require('./rules/no-undef-components'),
- 'no-undef-properties': require('./rules/no-undef-properties'),
- 'no-unsupported-features': require('./rules/no-unsupported-features'),
- 'no-unused-components': require('./rules/no-unused-components'),
- 'no-unused-emit-declarations': require('./rules/no-unused-emit-declarations'),
- 'no-unused-properties': require('./rules/no-unused-properties'),
- 'no-unused-refs': require('./rules/no-unused-refs'),
- 'no-unused-vars': require('./rules/no-unused-vars'),
- 'no-use-computed-property-like-method': require('./rules/no-use-computed-property-like-method'),
- 'no-use-v-else-with-v-for': require('./rules/no-use-v-else-with-v-for'),
- 'no-use-v-if-with-v-for': require('./rules/no-use-v-if-with-v-for'),
- 'no-useless-concat': require('./rules/no-useless-concat'),
- 'no-useless-mustaches': require('./rules/no-useless-mustaches'),
- 'no-useless-template-attributes': require('./rules/no-useless-template-attributes'),
- 'no-useless-v-bind': require('./rules/no-useless-v-bind'),
- 'no-v-for-template-key-on-child': require('./rules/no-v-for-template-key-on-child'),
- 'no-v-for-template-key': require('./rules/no-v-for-template-key'),
- 'no-v-html': require('./rules/no-v-html'),
- 'no-v-model-argument': require('./rules/no-v-model-argument'),
- 'no-v-text-v-html-on-component': require('./rules/no-v-text-v-html-on-component'),
- 'no-v-text': require('./rules/no-v-text'),
- 'no-watch-after-await': require('./rules/no-watch-after-await'),
- 'object-curly-newline': require('./rules/object-curly-newline'),
- 'object-curly-spacing': require('./rules/object-curly-spacing'),
- 'object-property-newline': require('./rules/object-property-newline'),
- 'object-shorthand': require('./rules/object-shorthand'),
- 'one-component-per-file': require('./rules/one-component-per-file'),
- 'operator-linebreak': require('./rules/operator-linebreak'),
- 'order-in-components': require('./rules/order-in-components'),
- 'padding-line-between-blocks': require('./rules/padding-line-between-blocks'),
- 'padding-line-between-tags': require('./rules/padding-line-between-tags'),
- 'padding-lines-in-component-definition': require('./rules/padding-lines-in-component-definition'),
- 'prefer-define-options': require('./rules/prefer-define-options'),
- 'prefer-import-from-vue': require('./rules/prefer-import-from-vue'),
- 'prefer-prop-type-boolean-first': require('./rules/prefer-prop-type-boolean-first'),
- 'prefer-separate-static-class': require('./rules/prefer-separate-static-class'),
- 'prefer-template': require('./rules/prefer-template'),
- 'prefer-true-attribute-shorthand': require('./rules/prefer-true-attribute-shorthand'),
- 'prefer-use-template-ref': require('./rules/prefer-use-template-ref'),
- 'prop-name-casing': require('./rules/prop-name-casing'),
- 'quote-props': require('./rules/quote-props'),
- 'require-component-is': require('./rules/require-component-is'),
- 'require-default-export': require('./rules/require-default-export'),
- 'require-default-prop': require('./rules/require-default-prop'),
- 'require-direct-export': require('./rules/require-direct-export'),
- 'require-emit-validator': require('./rules/require-emit-validator'),
- 'require-explicit-emits': require('./rules/require-explicit-emits'),
- 'require-explicit-slots': require('./rules/require-explicit-slots'),
- 'require-expose': require('./rules/require-expose'),
- 'require-macro-variable-name': require('./rules/require-macro-variable-name'),
- 'require-name-property': require('./rules/require-name-property'),
- 'require-prop-comment': require('./rules/require-prop-comment'),
- 'require-prop-type-constructor': require('./rules/require-prop-type-constructor'),
- 'require-prop-types': require('./rules/require-prop-types'),
- 'require-render-return': require('./rules/require-render-return'),
- 'require-slots-as-functions': require('./rules/require-slots-as-functions'),
- 'require-toggle-inside-transition': require('./rules/require-toggle-inside-transition'),
- 'require-typed-object-prop': require('./rules/require-typed-object-prop'),
- 'require-typed-ref': require('./rules/require-typed-ref'),
- 'require-v-for-key': require('./rules/require-v-for-key'),
- 'require-valid-default-prop': require('./rules/require-valid-default-prop'),
- 'restricted-component-names': require('./rules/restricted-component-names'),
- 'return-in-computed-property': require('./rules/return-in-computed-property'),
- 'return-in-emits-validator': require('./rules/return-in-emits-validator'),
- 'script-indent': require('./rules/script-indent'),
- 'singleline-html-element-content-newline': require('./rules/singleline-html-element-content-newline'),
- 'slot-name-casing': require('./rules/slot-name-casing'),
- 'sort-keys': require('./rules/sort-keys'),
- 'space-in-parens': require('./rules/space-in-parens'),
- 'space-infix-ops': require('./rules/space-infix-ops'),
- 'space-unary-ops': require('./rules/space-unary-ops'),
- 'static-class-names-order': require('./rules/static-class-names-order'),
- 'template-curly-spacing': require('./rules/template-curly-spacing'),
- 'this-in-template': require('./rules/this-in-template'),
- 'use-v-on-exact': require('./rules/use-v-on-exact'),
- 'v-bind-style': require('./rules/v-bind-style'),
- 'v-for-delimiter-style': require('./rules/v-for-delimiter-style'),
- 'v-if-else-key': require('./rules/v-if-else-key'),
- 'v-on-event-hyphenation': require('./rules/v-on-event-hyphenation'),
- 'v-on-handler-style': require('./rules/v-on-handler-style'),
- 'v-on-style': require('./rules/v-on-style'),
- 'v-slot-style': require('./rules/v-slot-style'),
- 'valid-attribute-name': require('./rules/valid-attribute-name'),
- 'valid-define-emits': require('./rules/valid-define-emits'),
- 'valid-define-options': require('./rules/valid-define-options'),
- 'valid-define-props': require('./rules/valid-define-props'),
- 'valid-model-definition': require('./rules/valid-model-definition'),
- 'valid-next-tick': require('./rules/valid-next-tick'),
- 'valid-template-root': require('./rules/valid-template-root'),
- 'valid-v-bind-sync': require('./rules/valid-v-bind-sync'),
- 'valid-v-bind': require('./rules/valid-v-bind'),
- 'valid-v-cloak': require('./rules/valid-v-cloak'),
- 'valid-v-else-if': require('./rules/valid-v-else-if'),
- 'valid-v-else': require('./rules/valid-v-else'),
- 'valid-v-for': require('./rules/valid-v-for'),
- 'valid-v-html': require('./rules/valid-v-html'),
- 'valid-v-if': require('./rules/valid-v-if'),
- 'valid-v-is': require('./rules/valid-v-is'),
- 'valid-v-memo': require('./rules/valid-v-memo'),
- 'valid-v-model': require('./rules/valid-v-model'),
- 'valid-v-on': require('./rules/valid-v-on'),
- 'valid-v-once': require('./rules/valid-v-once'),
- 'valid-v-pre': require('./rules/valid-v-pre'),
- 'valid-v-show': require('./rules/valid-v-show'),
- 'valid-v-slot': require('./rules/valid-v-slot'),
- 'valid-v-text': require('./rules/valid-v-text')
- },
- processors: {
- '.vue': require('./processor'),
- vue: require('./processor')
- }
-}
-
-module.exports = plugin
+module.exports = Object.assign(plugin, { configs })
diff --git a/lib/plugin.js b/lib/plugin.js
new file mode 100644
index 000000000..df835735e
--- /dev/null
+++ b/lib/plugin.js
@@ -0,0 +1,267 @@
+/*
+ * IMPORTANT!
+ * This file has been automatically generated,
+ * in order to update its content execute "npm run update"
+ */
+'use strict'
+
+const plugin = {
+ meta: require('./meta'),
+ rules: {
+ 'array-bracket-newline': require('./rules/array-bracket-newline'),
+ 'array-bracket-spacing': require('./rules/array-bracket-spacing'),
+ 'array-element-newline': require('./rules/array-element-newline'),
+ 'arrow-spacing': require('./rules/arrow-spacing'),
+ 'attribute-hyphenation': require('./rules/attribute-hyphenation'),
+ 'attributes-order': require('./rules/attributes-order'),
+ 'block-lang': require('./rules/block-lang'),
+ 'block-order': require('./rules/block-order'),
+ 'block-spacing': require('./rules/block-spacing'),
+ 'block-tag-newline': require('./rules/block-tag-newline'),
+ 'brace-style': require('./rules/brace-style'),
+ camelcase: require('./rules/camelcase'),
+ 'comma-dangle': require('./rules/comma-dangle'),
+ 'comma-spacing': require('./rules/comma-spacing'),
+ 'comma-style': require('./rules/comma-style'),
+ 'comment-directive': require('./rules/comment-directive'),
+ 'component-api-style': require('./rules/component-api-style'),
+ 'component-definition-name-casing': require('./rules/component-definition-name-casing'),
+ 'component-name-in-template-casing': require('./rules/component-name-in-template-casing'),
+ 'component-options-name-casing': require('./rules/component-options-name-casing'),
+ 'custom-event-name-casing': require('./rules/custom-event-name-casing'),
+ 'define-emits-declaration': require('./rules/define-emits-declaration'),
+ 'define-macros-order': require('./rules/define-macros-order'),
+ 'define-props-declaration': require('./rules/define-props-declaration'),
+ 'define-props-destructuring': require('./rules/define-props-destructuring'),
+ 'dot-location': require('./rules/dot-location'),
+ 'dot-notation': require('./rules/dot-notation'),
+ 'enforce-style-attribute': require('./rules/enforce-style-attribute'),
+ eqeqeq: require('./rules/eqeqeq'),
+ 'first-attribute-linebreak': require('./rules/first-attribute-linebreak'),
+ 'func-call-spacing': require('./rules/func-call-spacing'),
+ 'html-button-has-type': require('./rules/html-button-has-type'),
+ 'html-closing-bracket-newline': require('./rules/html-closing-bracket-newline'),
+ 'html-closing-bracket-spacing': require('./rules/html-closing-bracket-spacing'),
+ 'html-comment-content-newline': require('./rules/html-comment-content-newline'),
+ 'html-comment-content-spacing': require('./rules/html-comment-content-spacing'),
+ 'html-comment-indent': require('./rules/html-comment-indent'),
+ 'html-end-tags': require('./rules/html-end-tags'),
+ 'html-indent': require('./rules/html-indent'),
+ 'html-quotes': require('./rules/html-quotes'),
+ 'html-self-closing': require('./rules/html-self-closing'),
+ 'jsx-uses-vars': require('./rules/jsx-uses-vars'),
+ 'key-spacing': require('./rules/key-spacing'),
+ 'keyword-spacing': require('./rules/keyword-spacing'),
+ 'match-component-file-name': require('./rules/match-component-file-name'),
+ 'match-component-import-name': require('./rules/match-component-import-name'),
+ 'max-attributes-per-line': require('./rules/max-attributes-per-line'),
+ 'max-len': require('./rules/max-len'),
+ 'max-lines-per-block': require('./rules/max-lines-per-block'),
+ 'max-props': require('./rules/max-props'),
+ 'max-template-depth': require('./rules/max-template-depth'),
+ 'multi-word-component-names': require('./rules/multi-word-component-names'),
+ 'multiline-html-element-content-newline': require('./rules/multiline-html-element-content-newline'),
+ 'multiline-ternary': require('./rules/multiline-ternary'),
+ 'mustache-interpolation-spacing': require('./rules/mustache-interpolation-spacing'),
+ 'new-line-between-multi-line-property': require('./rules/new-line-between-multi-line-property'),
+ 'next-tick-style': require('./rules/next-tick-style'),
+ 'no-arrow-functions-in-watch': require('./rules/no-arrow-functions-in-watch'),
+ 'no-async-in-computed-properties': require('./rules/no-async-in-computed-properties'),
+ 'no-bare-strings-in-template': require('./rules/no-bare-strings-in-template'),
+ 'no-boolean-default': require('./rules/no-boolean-default'),
+ 'no-child-content': require('./rules/no-child-content'),
+ 'no-computed-properties-in-data': require('./rules/no-computed-properties-in-data'),
+ 'no-console': require('./rules/no-console'),
+ 'no-constant-condition': require('./rules/no-constant-condition'),
+ 'no-custom-modifiers-on-v-model': require('./rules/no-custom-modifiers-on-v-model'),
+ 'no-deprecated-data-object-declaration': require('./rules/no-deprecated-data-object-declaration'),
+ 'no-deprecated-delete-set': require('./rules/no-deprecated-delete-set'),
+ 'no-deprecated-destroyed-lifecycle': require('./rules/no-deprecated-destroyed-lifecycle'),
+ 'no-deprecated-dollar-listeners-api': require('./rules/no-deprecated-dollar-listeners-api'),
+ 'no-deprecated-dollar-scopedslots-api': require('./rules/no-deprecated-dollar-scopedslots-api'),
+ 'no-deprecated-events-api': require('./rules/no-deprecated-events-api'),
+ 'no-deprecated-filter': require('./rules/no-deprecated-filter'),
+ 'no-deprecated-functional-template': require('./rules/no-deprecated-functional-template'),
+ 'no-deprecated-html-element-is': require('./rules/no-deprecated-html-element-is'),
+ 'no-deprecated-inline-template': require('./rules/no-deprecated-inline-template'),
+ 'no-deprecated-model-definition': require('./rules/no-deprecated-model-definition'),
+ 'no-deprecated-props-default-this': require('./rules/no-deprecated-props-default-this'),
+ 'no-deprecated-router-link-tag-prop': require('./rules/no-deprecated-router-link-tag-prop'),
+ 'no-deprecated-scope-attribute': require('./rules/no-deprecated-scope-attribute'),
+ 'no-deprecated-slot-attribute': require('./rules/no-deprecated-slot-attribute'),
+ 'no-deprecated-slot-scope-attribute': require('./rules/no-deprecated-slot-scope-attribute'),
+ 'no-deprecated-v-bind-sync': require('./rules/no-deprecated-v-bind-sync'),
+ 'no-deprecated-v-is': require('./rules/no-deprecated-v-is'),
+ 'no-deprecated-v-on-native-modifier': require('./rules/no-deprecated-v-on-native-modifier'),
+ 'no-deprecated-v-on-number-modifiers': require('./rules/no-deprecated-v-on-number-modifiers'),
+ 'no-deprecated-vue-config-keycodes': require('./rules/no-deprecated-vue-config-keycodes'),
+ 'no-dupe-keys': require('./rules/no-dupe-keys'),
+ 'no-dupe-v-else-if': require('./rules/no-dupe-v-else-if'),
+ 'no-duplicate-attr-inheritance': require('./rules/no-duplicate-attr-inheritance'),
+ 'no-duplicate-attributes': require('./rules/no-duplicate-attributes'),
+ 'no-duplicate-class-names': require('./rules/no-duplicate-class-names'),
+ 'no-empty-component-block': require('./rules/no-empty-component-block'),
+ 'no-empty-pattern': require('./rules/no-empty-pattern'),
+ 'no-export-in-script-setup': require('./rules/no-export-in-script-setup'),
+ 'no-expose-after-await': require('./rules/no-expose-after-await'),
+ 'no-extra-parens': require('./rules/no-extra-parens'),
+ 'no-implicit-coercion': require('./rules/no-implicit-coercion'),
+ 'no-import-compiler-macros': require('./rules/no-import-compiler-macros'),
+ 'no-irregular-whitespace': require('./rules/no-irregular-whitespace'),
+ 'no-lifecycle-after-await': require('./rules/no-lifecycle-after-await'),
+ 'no-lone-template': require('./rules/no-lone-template'),
+ 'no-loss-of-precision': require('./rules/no-loss-of-precision'),
+ 'no-multi-spaces': require('./rules/no-multi-spaces'),
+ 'no-multiple-objects-in-class': require('./rules/no-multiple-objects-in-class'),
+ 'no-multiple-slot-args': require('./rules/no-multiple-slot-args'),
+ 'no-multiple-template-root': require('./rules/no-multiple-template-root'),
+ 'no-mutating-props': require('./rules/no-mutating-props'),
+ 'no-negated-condition': require('./rules/no-negated-condition'),
+ 'no-negated-v-if-condition': require('./rules/no-negated-v-if-condition'),
+ 'no-parsing-error': require('./rules/no-parsing-error'),
+ 'no-potential-component-option-typo': require('./rules/no-potential-component-option-typo'),
+ 'no-ref-as-operand': require('./rules/no-ref-as-operand'),
+ 'no-ref-object-reactivity-loss': require('./rules/no-ref-object-reactivity-loss'),
+ 'no-required-prop-with-default': require('./rules/no-required-prop-with-default'),
+ 'no-reserved-component-names': require('./rules/no-reserved-component-names'),
+ 'no-reserved-keys': require('./rules/no-reserved-keys'),
+ 'no-reserved-props': require('./rules/no-reserved-props'),
+ 'no-restricted-block': require('./rules/no-restricted-block'),
+ 'no-restricted-call-after-await': require('./rules/no-restricted-call-after-await'),
+ 'no-restricted-class': require('./rules/no-restricted-class'),
+ 'no-restricted-component-names': require('./rules/no-restricted-component-names'),
+ 'no-restricted-component-options': require('./rules/no-restricted-component-options'),
+ 'no-restricted-custom-event': require('./rules/no-restricted-custom-event'),
+ 'no-restricted-html-elements': require('./rules/no-restricted-html-elements'),
+ 'no-restricted-props': require('./rules/no-restricted-props'),
+ 'no-restricted-static-attribute': require('./rules/no-restricted-static-attribute'),
+ 'no-restricted-syntax': require('./rules/no-restricted-syntax'),
+ 'no-restricted-v-bind': require('./rules/no-restricted-v-bind'),
+ 'no-restricted-v-on': require('./rules/no-restricted-v-on'),
+ 'no-root-v-if': require('./rules/no-root-v-if'),
+ 'no-setup-props-reactivity-loss': require('./rules/no-setup-props-reactivity-loss'),
+ 'no-shared-component-data': require('./rules/no-shared-component-data'),
+ 'no-side-effects-in-computed-properties': require('./rules/no-side-effects-in-computed-properties'),
+ 'no-spaces-around-equal-signs-in-attribute': require('./rules/no-spaces-around-equal-signs-in-attribute'),
+ 'no-sparse-arrays': require('./rules/no-sparse-arrays'),
+ 'no-static-inline-styles': require('./rules/no-static-inline-styles'),
+ 'no-template-key': require('./rules/no-template-key'),
+ 'no-template-shadow': require('./rules/no-template-shadow'),
+ 'no-template-target-blank': require('./rules/no-template-target-blank'),
+ 'no-textarea-mustache': require('./rules/no-textarea-mustache'),
+ 'no-this-in-before-route-enter': require('./rules/no-this-in-before-route-enter'),
+ 'no-undef-components': require('./rules/no-undef-components'),
+ 'no-undef-directives': require('./rules/no-undef-directives'),
+ 'no-undef-properties': require('./rules/no-undef-properties'),
+ 'no-unsupported-features': require('./rules/no-unsupported-features'),
+ 'no-unused-components': require('./rules/no-unused-components'),
+ 'no-unused-emit-declarations': require('./rules/no-unused-emit-declarations'),
+ 'no-unused-properties': require('./rules/no-unused-properties'),
+ 'no-unused-refs': require('./rules/no-unused-refs'),
+ 'no-unused-vars': require('./rules/no-unused-vars'),
+ 'no-use-computed-property-like-method': require('./rules/no-use-computed-property-like-method'),
+ 'no-use-v-else-with-v-for': require('./rules/no-use-v-else-with-v-for'),
+ 'no-use-v-if-with-v-for': require('./rules/no-use-v-if-with-v-for'),
+ 'no-useless-concat': require('./rules/no-useless-concat'),
+ 'no-useless-mustaches': require('./rules/no-useless-mustaches'),
+ 'no-useless-template-attributes': require('./rules/no-useless-template-attributes'),
+ 'no-useless-v-bind': require('./rules/no-useless-v-bind'),
+ 'no-v-for-template-key-on-child': require('./rules/no-v-for-template-key-on-child'),
+ 'no-v-for-template-key': require('./rules/no-v-for-template-key'),
+ 'no-v-html': require('./rules/no-v-html'),
+ 'no-v-model-argument': require('./rules/no-v-model-argument'),
+ 'no-v-text-v-html-on-component': require('./rules/no-v-text-v-html-on-component'),
+ 'no-v-text': require('./rules/no-v-text'),
+ 'no-watch-after-await': require('./rules/no-watch-after-await'),
+ 'object-curly-newline': require('./rules/object-curly-newline'),
+ 'object-curly-spacing': require('./rules/object-curly-spacing'),
+ 'object-property-newline': require('./rules/object-property-newline'),
+ 'object-shorthand': require('./rules/object-shorthand'),
+ 'one-component-per-file': require('./rules/one-component-per-file'),
+ 'operator-linebreak': require('./rules/operator-linebreak'),
+ 'order-in-components': require('./rules/order-in-components'),
+ 'padding-line-between-blocks': require('./rules/padding-line-between-blocks'),
+ 'padding-line-between-tags': require('./rules/padding-line-between-tags'),
+ 'padding-lines-in-component-definition': require('./rules/padding-lines-in-component-definition'),
+ 'prefer-define-options': require('./rules/prefer-define-options'),
+ 'prefer-import-from-vue': require('./rules/prefer-import-from-vue'),
+ 'prefer-prop-type-boolean-first': require('./rules/prefer-prop-type-boolean-first'),
+ 'prefer-separate-static-class': require('./rules/prefer-separate-static-class'),
+ 'prefer-template': require('./rules/prefer-template'),
+ 'prefer-true-attribute-shorthand': require('./rules/prefer-true-attribute-shorthand'),
+ 'prefer-use-template-ref': require('./rules/prefer-use-template-ref'),
+ 'prop-name-casing': require('./rules/prop-name-casing'),
+ 'quote-props': require('./rules/quote-props'),
+ 'require-component-is': require('./rules/require-component-is'),
+ 'require-default-export': require('./rules/require-default-export'),
+ 'require-default-prop': require('./rules/require-default-prop'),
+ 'require-direct-export': require('./rules/require-direct-export'),
+ 'require-emit-validator': require('./rules/require-emit-validator'),
+ 'require-explicit-emits': require('./rules/require-explicit-emits'),
+ 'require-explicit-slots': require('./rules/require-explicit-slots'),
+ 'require-expose': require('./rules/require-expose'),
+ 'require-macro-variable-name': require('./rules/require-macro-variable-name'),
+ 'require-name-property': require('./rules/require-name-property'),
+ 'require-prop-comment': require('./rules/require-prop-comment'),
+ 'require-prop-type-constructor': require('./rules/require-prop-type-constructor'),
+ 'require-prop-types': require('./rules/require-prop-types'),
+ 'require-render-return': require('./rules/require-render-return'),
+ 'require-slots-as-functions': require('./rules/require-slots-as-functions'),
+ 'require-toggle-inside-transition': require('./rules/require-toggle-inside-transition'),
+ 'require-typed-object-prop': require('./rules/require-typed-object-prop'),
+ 'require-typed-ref': require('./rules/require-typed-ref'),
+ 'require-v-for-key': require('./rules/require-v-for-key'),
+ 'require-valid-default-prop': require('./rules/require-valid-default-prop'),
+ 'restricted-component-names': require('./rules/restricted-component-names'),
+ 'return-in-computed-property': require('./rules/return-in-computed-property'),
+ 'return-in-emits-validator': require('./rules/return-in-emits-validator'),
+ 'script-indent': require('./rules/script-indent'),
+ 'singleline-html-element-content-newline': require('./rules/singleline-html-element-content-newline'),
+ 'slot-name-casing': require('./rules/slot-name-casing'),
+ 'sort-keys': require('./rules/sort-keys'),
+ 'space-in-parens': require('./rules/space-in-parens'),
+ 'space-infix-ops': require('./rules/space-infix-ops'),
+ 'space-unary-ops': require('./rules/space-unary-ops'),
+ 'static-class-names-order': require('./rules/static-class-names-order'),
+ 'template-curly-spacing': require('./rules/template-curly-spacing'),
+ 'this-in-template': require('./rules/this-in-template'),
+ 'use-v-on-exact': require('./rules/use-v-on-exact'),
+ 'v-bind-style': require('./rules/v-bind-style'),
+ 'v-for-delimiter-style': require('./rules/v-for-delimiter-style'),
+ 'v-if-else-key': require('./rules/v-if-else-key'),
+ 'v-on-event-hyphenation': require('./rules/v-on-event-hyphenation'),
+ 'v-on-handler-style': require('./rules/v-on-handler-style'),
+ 'v-on-style': require('./rules/v-on-style'),
+ 'v-slot-style': require('./rules/v-slot-style'),
+ 'valid-attribute-name': require('./rules/valid-attribute-name'),
+ 'valid-define-emits': require('./rules/valid-define-emits'),
+ 'valid-define-options': require('./rules/valid-define-options'),
+ 'valid-define-props': require('./rules/valid-define-props'),
+ 'valid-model-definition': require('./rules/valid-model-definition'),
+ 'valid-next-tick': require('./rules/valid-next-tick'),
+ 'valid-template-root': require('./rules/valid-template-root'),
+ 'valid-v-bind-sync': require('./rules/valid-v-bind-sync'),
+ 'valid-v-bind': require('./rules/valid-v-bind'),
+ 'valid-v-cloak': require('./rules/valid-v-cloak'),
+ 'valid-v-else-if': require('./rules/valid-v-else-if'),
+ 'valid-v-else': require('./rules/valid-v-else'),
+ 'valid-v-for': require('./rules/valid-v-for'),
+ 'valid-v-html': require('./rules/valid-v-html'),
+ 'valid-v-if': require('./rules/valid-v-if'),
+ 'valid-v-is': require('./rules/valid-v-is'),
+ 'valid-v-memo': require('./rules/valid-v-memo'),
+ 'valid-v-model': require('./rules/valid-v-model'),
+ 'valid-v-on': require('./rules/valid-v-on'),
+ 'valid-v-once': require('./rules/valid-v-once'),
+ 'valid-v-pre': require('./rules/valid-v-pre'),
+ 'valid-v-show': require('./rules/valid-v-show'),
+ 'valid-v-slot': require('./rules/valid-v-slot'),
+ 'valid-v-text': require('./rules/valid-v-text')
+ },
+ processors: {
+ '.vue': require('./processor'),
+ vue: require('./processor')
+ }
+}
+
+module.exports = plugin
diff --git a/lib/rules/no-multi-spaces.js b/lib/rules/no-multi-spaces.js
index b4d17bb8e..978f4e9e1 100644
--- a/lib/rules/no-multi-spaces.js
+++ b/lib/rules/no-multi-spaces.js
@@ -30,6 +30,9 @@ module.exports = {
properties: {
ignoreProperties: {
type: 'boolean'
+ },
+ ignoreEOLComments: {
+ type: 'boolean'
}
},
additionalProperties: false
@@ -49,6 +52,7 @@ module.exports = {
create(context) {
const options = context.options[0] || {}
const ignoreProperties = options.ignoreProperties === true
+ const ignoreEOLComments = options.ignoreEOLComments === true
return {
Program(node) {
@@ -74,9 +78,23 @@ module.exports = {
let prevToken = /** @type {Token} */ (tokens.shift())
for (const token of tokens) {
const spaces = token.range[0] - prevToken.range[1]
- const shouldIgnore =
+ let shouldIgnore =
ignoreProperties &&
(isProperty(context, token) || isProperty(context, prevToken))
+
+ if (
+ !shouldIgnore &&
+ ignoreEOLComments &&
+ (token.type === 'Line' || token.type === 'Block')
+ ) {
+ const nextToken = tokenStore.getTokenAfter(token, {
+ includeComments: true
+ })
+ if (!nextToken || nextToken.loc.start.line > token.loc.end.line) {
+ shouldIgnore = true
+ }
+ }
+
if (
spaces > 1 &&
token.loc.start.line === prevToken.loc.start.line &&
diff --git a/lib/rules/no-negated-v-if-condition.js b/lib/rules/no-negated-v-if-condition.js
index d9fa99767..72ec21138 100644
--- a/lib/rules/no-negated-v-if-condition.js
+++ b/lib/rules/no-negated-v-if-condition.js
@@ -76,13 +76,10 @@ module.exports = {
categories: undefined,
url: 'https://eslint.vuejs.org/rules/no-negated-v-if-condition.html'
},
- fixable: null,
- hasSuggestions: true,
+ fixable: 'code',
schema: [],
messages: {
- negatedCondition: 'Unexpected negated condition in v-if with v-else.',
- fixNegatedCondition:
- 'Convert to positive condition and swap if/else blocks.'
+ negatedCondition: 'Unexpected negated condition in v-if with v-else.'
}
},
/** @param {RuleContext} context */
@@ -152,14 +149,7 @@ module.exports = {
context.report({
node: expression,
messageId: 'negatedCondition',
- suggest: [
- {
- messageId: 'fixNegatedCondition',
- *fix(fixer) {
- yield* swapElements(fixer, element, elseElement, expression)
- }
- }
- ]
+ fix: (fixer) => swapElements(fixer, element, elseElement, expression)
})
}
diff --git a/lib/rules/no-undef-directives.js b/lib/rules/no-undef-directives.js
new file mode 100644
index 000000000..fe60791bd
--- /dev/null
+++ b/lib/rules/no-undef-directives.js
@@ -0,0 +1,204 @@
+/**
+ * @author rzzf
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const utils = require('../utils')
+const casing = require('../utils/casing')
+const regexp = require('../utils/regexp')
+
+/**
+ * @param {ObjectExpression} componentObject
+ * @returns { { node: Property, name: string }[] } Array of ASTNodes
+ */
+function getRegisteredDirectives(componentObject) {
+ const directivesNode = componentObject.properties.find(
+ (p) =>
+ p.type === 'Property' &&
+ utils.getStaticPropertyName(p) === 'directives' &&
+ p.value.type === 'ObjectExpression'
+ )
+
+ if (
+ !directivesNode ||
+ directivesNode.type !== 'Property' ||
+ directivesNode.value.type !== 'ObjectExpression'
+ ) {
+ return []
+ }
+
+ return directivesNode.value.properties.flatMap((node) => {
+ const name =
+ node.type === 'Property' ? utils.getStaticPropertyName(node) : null
+ return name ? [{ node: /** @type {Property} */ (node), name }] : []
+ })
+}
+
+/**
+ * @param {string} rawName
+ * @param {Set} definedNames
+ */
+function isDefinedInSetup(rawName, definedNames) {
+ const camelName = casing.camelCase(rawName)
+ const variableName = `v${casing.capitalize(camelName)}`
+ return definedNames.has(variableName)
+}
+
+/**
+ * @param {string} rawName
+ * @param {Set} definedNames
+ */
+function isDefinedInOptions(rawName, definedNames) {
+ const camelName = casing.camelCase(rawName)
+
+ if (definedNames.has(rawName)) {
+ return true
+ }
+
+ // allow case-insensitive only when the directive name itself contains capitalized letters
+ for (const name of definedNames) {
+ const lowercaseName = name.toLowerCase()
+ if (name !== lowercaseName && lowercaseName === camelName.toLowerCase()) {
+ return true
+ }
+ }
+
+ return false
+}
+
+module.exports = {
+ meta: {
+ type: 'suggestion',
+ docs: {
+ description: 'disallow use of undefined custom directives',
+ categories: undefined,
+ url: 'https://eslint.vuejs.org/rules/no-undef-directives.html'
+ },
+ fixable: null,
+ schema: [
+ {
+ type: 'object',
+ properties: {
+ ignore: {
+ type: 'array',
+ items: { type: 'string' },
+ uniqueItems: true
+ }
+ },
+ additionalProperties: false
+ }
+ ],
+ messages: {
+ undef: "The 'v-{{name}}' directive has been used, but not defined."
+ }
+ },
+ /** @param {RuleContext} context */
+ create(context) {
+ const options = context.options[0] || {}
+ const { ignore = [] } = options
+ const isAnyIgnored = regexp.toRegExpGroupMatcher(ignore)
+
+ /**
+ * Check whether the given directive name is a verify target or not.
+ *
+ * @param {string} rawName The directive name.
+ * @returns {boolean}
+ */
+ function isVerifyTargetDirective(rawName) {
+ const kebabName = casing.kebabCase(rawName)
+ if (
+ utils.isBuiltInDirectiveName(rawName) ||
+ isAnyIgnored(rawName, kebabName)
+ ) {
+ return false
+ }
+ return true
+ }
+
+ /**
+ * @param {(rawName: string) => boolean} isDefined
+ * @returns {TemplateListener}
+ */
+ function createTemplateBodyVisitor(isDefined) {
+ return {
+ /** @param {VDirective} node */
+ 'VAttribute[directive=true]'(node) {
+ const name = node.key.name.name
+ if (utils.isBuiltInDirectiveName(name)) {
+ return
+ }
+ const rawName = node.key.name.rawName || name
+ if (isVerifyTargetDirective(rawName) && !isDefined(rawName)) {
+ context.report({
+ node: node.key,
+ messageId: 'undef',
+ data: {
+ name: rawName
+ }
+ })
+ }
+ }
+ }
+ }
+
+ /** @type {Set} */
+ const definedInOptionDirectives = new Set()
+
+ if (utils.isScriptSetup(context)) {
+ // For ',
@@ -71,44 +72,36 @@ tester.run('block-order', rule, {
// order
{
code: '',
- output: null,
options: [{ order: ['script', 'template', 'style'] }]
},
{
code: '',
- output: null,
options: [{ order: ['template', 'script', 'style'] }]
},
{
code: '',
- output: null,
options: [{ order: ['style', 'template', 'script'] }]
},
{
code: '',
- output: null,
options: [{ order: ['template', 'docs', 'script', 'style'] }]
},
{
code: '',
- output: null,
options: [{ order: ['template', 'script', 'style'] }]
},
{
code: 'text
',
- output: null,
options: [{ order: ['docs', 'script', 'template', 'style'] }]
},
{
code: '',
- output: null,
options: [
{ order: ['script[setup]', 'script:not([setup])', 'template', 'style'] }
]
},
{
code: '',
- output: null,
options: [
{
order: [['script[setup]', 'script:not([setup])', 'template'], 'style']
@@ -117,24 +110,20 @@ tester.run('block-order', rule, {
},
{
code: '',
- output: null,
options: [{ order: ['script', 'template', 'style'] }]
},
{
code: '',
- output: null,
options: [{ order: [['script', 'template'], 'style'] }]
},
{
code: '',
- output: null,
options: [
{ order: ['script:not([setup])', 'script[setup]', 'template', 'style'] }
]
},
{
code: '',
- output: null,
options: [
{
order: [['script:not([setup])', 'script[setup]', 'template'], 'style']
@@ -143,7 +132,6 @@ tester.run('block-order', rule, {
},
{
code: '',
- output: null,
options: [
{
order: [
@@ -158,7 +146,6 @@ tester.run('block-order', rule, {
},
{
code: '',
- output: null,
options: [
{
order: [
@@ -175,17 +162,14 @@ tester.run('block-order', rule, {
},
{
code: '',
- output: null,
options: [{ order: [['docs', 'script', 'template'], 'style'] }]
},
{
code: '',
- output: null,
options: [{ order: ['i18n[locale=en]', 'i18n[locale=ja]'] }]
},
{
code: '',
- output: null,
options: [{ order: ['style:not([scoped])', 'style[scoped]'] }]
},
diff --git a/tests/lib/rules/comment-directive.js b/tests/lib/rules/comment-directive.ts
similarity index 97%
rename from tests/lib/rules/comment-directive.js
rename to tests/lib/rules/comment-directive.ts
index b9acb1092..2a7efdab6 100644
--- a/tests/lib/rules/comment-directive.js
+++ b/tests/lib/rules/comment-directive.ts
@@ -3,10 +3,11 @@
* @author Toru Nagashima
*/
-'use strict'
-
-const assert = require('assert')
-const { ESLint } = require('../../eslint-compat')
+import assert from 'assert'
+import parserVue from 'vue-eslint-parser'
+import { ESLint } from '../../eslint-compat'
+import pluginVue from '../../../lib'
+import processor from '../../../lib/processor'
// Initialize linter.
const eslint = new ESLint({
@@ -14,21 +15,21 @@ const eslint = new ESLint({
overrideConfig: {
files: ['*.*'],
languageOptions: {
- parser: require('vue-eslint-parser'),
+ parser: parserVue,
ecmaVersion: 2015
},
- plugins: { vue: require('../../../lib/index') },
+ plugins: { vue: pluginVue },
rules: {
'no-unused-vars': 'error',
'vue/comment-directive': 'error',
'vue/no-parsing-error': 'error',
'vue/no-duplicate-attributes': 'error'
},
- processor: require('../../../lib/processor')
+ processor
}
})
-async function lintMessages(code) {
+async function lintMessages(code: string) {
const result = await eslint.lintText(code, { filePath: 'test.vue' })
return result[0].messages
}
@@ -357,10 +358,10 @@ describe('comment-directive', () => {
overrideConfig: {
files: ['**/*.vue'],
languageOptions: {
- parser: require('vue-eslint-parser'),
+ parser: parserVue,
ecmaVersion: 2015
},
- plugins: { vue: require('../../../lib/index') },
+ plugins: { vue: pluginVue },
rules: {
'no-unused-vars': 'error',
'vue/comment-directive': [
@@ -370,11 +371,11 @@ describe('comment-directive', () => {
'vue/no-parsing-error': 'error',
'vue/no-duplicate-attributes': 'error'
},
- processor: require('../../../lib/processor')
+ processor
}
})
- async function lintMessages(code) {
+ async function lintMessages(code: string) {
const result = await eslint.lintText(code, { filePath: 'test.vue' })
return result[0].messages
}
diff --git a/tests/lib/rules/component-name-in-template-casing.js b/tests/lib/rules/component-name-in-template-casing.js
index 34e3574fc..9ad24fad3 100644
--- a/tests/lib/rules/component-name-in-template-casing.js
+++ b/tests/lib/rules/component-name-in-template-casing.js
@@ -4,7 +4,6 @@
'use strict'
const rule = require('../../../lib/rules/component-name-in-template-casing')
-const semver = require('semver')
const RuleTester = require('../../eslint-compat').RuleTester
const tester = new RuleTester({
@@ -218,42 +217,36 @@ tester.run('component-name-in-template-casing', rule, {
},
// type-only imports
- ...(semver.gte(
- require('@typescript-eslint/parser/package.json').version,
- '5.0.0'
- )
- ? [
- {
- code: `
-
-
-
-
-
-
-
-
-
-
- `,
- options: ['PascalCase', { registeredComponentsOnly: true }],
- languageOptions: {
- parserOptions: {
- parser: require.resolve('@typescript-eslint/parser')
- }
- }
- }
- ]
- : [])
+ {
+ code: `
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ options: ['PascalCase', { registeredComponentsOnly: true }],
+ languageOptions: {
+ parserOptions: {
+ parser: require.resolve('@typescript-eslint/parser')
+ }
+ }
+ }
],
invalid: [
{
@@ -1305,106 +1298,99 @@ tester.run('component-name-in-template-casing', rule, {
]
},
// type-only imports
- ...(semver.gte(
- require('@typescript-eslint/parser/package.json').version,
- '5.0.0'
- )
- ? [
- {
- code: `
-
+ {
+ code: `
+
-
-
-
-
-
-
-
-
-
- `,
- options: ['PascalCase', { registeredComponentsOnly: false }],
- languageOptions: {
- parserOptions: {
- parser: require.resolve('@typescript-eslint/parser')
- }
- },
- output: `
-
+
+
+
+
+
+
+
+
+
+ `,
+ output: `
+
-
-
-
-
-
-
-
-
-
- `,
- errors: [
- {
- message: 'Component name "foo" is not PascalCase.',
- line: 13,
- column: 17,
- endLine: 13,
- endColumn: 21
- },
- {
- message: 'Component name "hello-world1" is not PascalCase.',
- line: 14,
- column: 17,
- endLine: 14,
- endColumn: 30
- },
- {
- message: 'Component name "hello-world2" is not PascalCase.',
- line: 15,
- column: 17,
- endLine: 15,
- endColumn: 30
- },
- {
- message: 'Component name "hello-world3" is not PascalCase.',
- line: 16,
- column: 17,
- endLine: 16,
- endColumn: 30
- },
- {
- message: 'Component name "hello-world4" is not PascalCase.',
- line: 17,
- column: 17,
- endLine: 17,
- endColumn: 30
- },
- {
- message: 'Component name "hello-world5" is not PascalCase.',
- line: 18,
- column: 17,
- endLine: 18,
- endColumn: 30
- }
- ]
- }
- ]
- : [])
+
+
+
+
+
+
+
+
+
+ `,
+ options: ['PascalCase', { registeredComponentsOnly: false }],
+ languageOptions: {
+ parserOptions: {
+ parser: require.resolve('@typescript-eslint/parser')
+ }
+ },
+ errors: [
+ {
+ message: 'Component name "foo" is not PascalCase.',
+ line: 13,
+ column: 11,
+ endLine: 13,
+ endColumn: 15
+ },
+ {
+ message: 'Component name "hello-world1" is not PascalCase.',
+ line: 14,
+ column: 11,
+ endLine: 14,
+ endColumn: 24
+ },
+ {
+ message: 'Component name "hello-world2" is not PascalCase.',
+ line: 15,
+ column: 11,
+ endLine: 15,
+ endColumn: 24
+ },
+ {
+ message: 'Component name "hello-world3" is not PascalCase.',
+ line: 16,
+ column: 11,
+ endLine: 16,
+ endColumn: 24
+ },
+ {
+ message: 'Component name "hello-world4" is not PascalCase.',
+ line: 17,
+ column: 11,
+ endLine: 17,
+ endColumn: 24
+ },
+ {
+ message: 'Component name "hello-world5" is not PascalCase.',
+ line: 18,
+ column: 11,
+ endLine: 18,
+ endColumn: 24
+ }
+ ]
+ }
]
})
diff --git a/tests/lib/rules/html-self-closing.js b/tests/lib/rules/html-self-closing.js
index 37991580a..b115cfa1e 100644
--- a/tests/lib/rules/html-self-closing.js
+++ b/tests/lib/rules/html-self-closing.js
@@ -56,7 +56,6 @@ tester.run('html-self-closing', rule, {
// Don't error if there are comments in their content.
{
code: '',
- output: null,
options: [{ html: { normal: 'always' } }]
},
diff --git a/tests/lib/rules/no-boolean-default.js b/tests/lib/rules/no-boolean-default.js
index c3132a5fd..56e9cd1cc 100644
--- a/tests/lib/rules/no-boolean-default.js
+++ b/tests/lib/rules/no-boolean-default.js
@@ -4,7 +4,6 @@
*/
'use strict'
-const semver = require('semver')
const rule = require('../../../lib/rules/no-boolean-default')
const RuleTester = require('../../eslint-compat').RuleTester
@@ -484,15 +483,9 @@ ruleTester.run('no-boolean-default', rule, {
}
]
},
- ...(semver.lt(
- require('@typescript-eslint/parser/package.json').version,
- '4.0.0'
- )
- ? []
- : [
- {
- filename: 'test.vue',
- code: `
+ {
+ filename: 'test.vue',
+ code: `
`,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- parserOptions: {
- parser: require.resolve('@typescript-eslint/parser')
- }
- },
- errors: [
- {
- message:
- 'Boolean prop should not set a default (Vue defaults it to false).',
- line: 7,
- column: 14,
- endLine: 7,
- endColumn: 19
- }
- ]
- },
- {
- filename: 'test.vue',
- code: `
+ languageOptions: {
+ parser: require('vue-eslint-parser'),
+ parserOptions: {
+ parser: require.resolve('@typescript-eslint/parser')
+ }
+ },
+ errors: [
+ {
+ message:
+ 'Boolean prop should not set a default (Vue defaults it to false).',
+ line: 7,
+ column: 14,
+ endLine: 7,
+ endColumn: 19
+ }
+ ]
+ },
+ {
+ filename: 'test.vue',
+ code: `
`,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- parserOptions: {
- parser: require.resolve('@typescript-eslint/parser')
- }
- },
- options: ['default-false'],
- errors: [
- {
- message: 'Boolean prop should only be defaulted to false.',
- line: 7,
- column: 14,
- endLine: 7,
- endColumn: 18
- }
- ]
- }
- ]),
+ options: ['default-false'],
+ languageOptions: {
+ parser: require('vue-eslint-parser'),
+ parserOptions: {
+ parser: require.resolve('@typescript-eslint/parser')
+ }
+ },
+ errors: [
+ {
+ message: 'Boolean prop should only be defaulted to false.',
+ line: 7,
+ column: 14,
+ endLine: 7,
+ endColumn: 18
+ }
+ ]
+ },
{
filename: 'test.vue',
code: `
diff --git a/tests/lib/rules/no-deprecated-props-default-this.js b/tests/lib/rules/no-deprecated-props-default-this.js
index ed0b2005d..c3be42a8f 100644
--- a/tests/lib/rules/no-deprecated-props-default-this.js
+++ b/tests/lib/rules/no-deprecated-props-default-this.js
@@ -71,8 +71,7 @@ ruleTester.run('no-deprecated-props-default-this', rule, {
}
}
- `,
- errors: [{}, {}]
+ `
},
{
filename: 'test.vue',
diff --git a/tests/lib/rules/no-export-in-script-setup.js b/tests/lib/rules/no-export-in-script-setup.js
index bf24b8682..e678d5f99 100644
--- a/tests/lib/rules/no-export-in-script-setup.js
+++ b/tests/lib/rules/no-export-in-script-setup.js
@@ -42,11 +42,10 @@ ruleTester.run('no-export-in-script-setup', rule, {
`
},
- ...(semver.gte(
- require('@typescript-eslint/parser/package.json').version,
- '5.4.0'
- ) &&
- semver.satisfies(require('typescript/package.json').version, '>=4.5.0-0')
+ ...(semver.satisfies(
+ require('typescript/package.json').version,
+ '>=4.5.0-0'
+ )
? [
{
filename: 'test.vue',
diff --git a/tests/lib/rules/no-implicit-coercion.js b/tests/lib/rules/no-implicit-coercion.js
index 7a2f89359..78e8ac91e 100644
--- a/tests/lib/rules/no-implicit-coercion.js
+++ b/tests/lib/rules/no-implicit-coercion.js
@@ -49,9 +49,7 @@ tester.run('no-implicit-coercion', rule, {
]
},
``,
- ...(semver.gte(ESLint.version, '8.28.0')
- ? [``]
- : []),
+ ``,
{
filename: 'test.vue',
code: ``,
@@ -238,40 +236,35 @@ tester.run('no-implicit-coercion', rule, {
}
]
},
- ...(semver.gte(ESLint.version, '7.24.0')
- ? [
- {
- filename: 'test.vue',
- code: ``,
- output: semver.gte(ESLint.version, '9.0.0')
- ? null
- : ``,
- options: [
- {
- disallowTemplateShorthand: true
- }
- ],
- errors: [
- {
- message: getExpectedErrorMessage('String(foo)'),
- line: 1,
- column: 27,
- endLine: 1,
- endColumn: 35,
- suggestions: semver.gte(ESLint.version, '9.0.0')
- ? [
- {
- messageId: 'useRecommendation',
- data: { recommendation: 'String(foo)' },
- output:
- ''
- }
- ]
- : []
- }
- ]
- }
- ]
- : [])
+ {
+ filename: 'test.vue',
+ code: ``,
+ output: semver.gte(ESLint.version, '9.0.0')
+ ? null
+ : ``,
+ options: [
+ {
+ disallowTemplateShorthand: true
+ }
+ ],
+ errors: [
+ {
+ message: getExpectedErrorMessage('String(foo)'),
+ line: 1,
+ column: 27,
+ endLine: 1,
+ endColumn: 35,
+ suggestions: semver.gte(ESLint.version, '9.0.0')
+ ? [
+ {
+ messageId: 'useRecommendation',
+ data: { recommendation: 'String(foo)' },
+ output: ''
+ }
+ ]
+ : []
+ }
+ ]
+ }
]
})
diff --git a/tests/lib/rules/no-loss-of-precision.js b/tests/lib/rules/no-loss-of-precision.js
index a9d632862..1b60a33ca 100644
--- a/tests/lib/rules/no-loss-of-precision.js
+++ b/tests/lib/rules/no-loss-of-precision.js
@@ -4,8 +4,7 @@
*/
'use strict'
-const { RuleTester, ESLint } = require('../../eslint-compat')
-const semver = require('semver')
+const { RuleTester } = require('../../eslint-compat')
const rule = require('../../../lib/rules/no-loss-of-precision')
const tester = new RuleTester({
@@ -17,86 +16,66 @@ const tester = new RuleTester({
})
tester.run('no-loss-of-precision', rule, {
valid: [
- ...(semver.gte(ESLint.version, '7.1.0')
- ? [
- {
- filename: 'test.vue',
- code: `
-
- {{12345}}
- {{123.45}}
-
- `
- },
- {
- filename: 'test.vue',
- code: `
-
-
-
- `
- }
- ]
- : [])
+ {
+ filename: 'test.vue',
+ code: `
+
+ {{12345}}
+ {{123.45}}
+
+ `
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+
+
+ `
+ }
],
invalid: [
- ...(semver.gte(ESLint.version, '7.1.0')
- ? [
- {
- filename: 'test.vue',
- code: `
-
- {{12345678901234567890}}
- {{0.12345678901234567890}}
-
- `,
- errors: [
- {
- message: 'This number literal will lose precision at runtime.',
- line: 3,
- column: 17,
- endLine: 3,
- endColumn: 37
- },
- {
- message: 'This number literal will lose precision at runtime.',
- line: 4,
- column: 17,
- endLine: 4,
- endColumn: 39
- }
- ]
- },
- {
- filename: 'test.vue',
- code: `
-
-
-
- `,
- errors: [
- {
- message: 'This number literal will lose precision at runtime.',
- line: 3,
- column: 34,
- endLine: 3,
- endColumn: 54
- }
- ]
- }
- ]
- : [
- {
- filename: 'test.vue',
- code: `
-
-
-
- `,
- errors: [
- 'Failed to extend ESLint core rule "no-loss-of-precision". You may be able to use this rule by upgrading the version of ESLint. If you cannot upgrade it, turn off this rule.'
- ]
- }
- ])
+ {
+ filename: 'test.vue',
+ code: `
+
+ {{12345678901234567890}}
+ {{0.12345678901234567890}}
+
+ `,
+ errors: [
+ {
+ message: 'This number literal will lose precision at runtime.',
+ line: 3,
+ column: 13,
+ endLine: 3,
+ endColumn: 33
+ },
+ {
+ message: 'This number literal will lose precision at runtime.',
+ line: 4,
+ column: 13,
+ endLine: 4,
+ endColumn: 35
+ }
+ ]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+
+
+ `,
+ errors: [
+ {
+ message: 'This number literal will lose precision at runtime.',
+ line: 3,
+ column: 30,
+ endLine: 3,
+ endColumn: 50
+ }
+ ]
+ }
]
})
diff --git a/tests/lib/rules/no-multi-spaces.js b/tests/lib/rules/no-multi-spaces.js
index 909a5063a..5f33a25e7 100644
--- a/tests/lib/rules/no-multi-spaces.js
+++ b/tests/lib/rules/no-multi-spaces.js
@@ -73,6 +73,38 @@ ruleTester.run('no-multi-spaces', rule, {
ignoreProperties: true
}
]
+ },
+ {
+ code: `
+
+
+
+ `,
+ options: [
+ {
+ ignoreEOLComments: true
+ }
+ ]
+ },
+ {
+ code: `
+
+
+
+ `,
+ options: [
+ {
+ ignoreEOLComments: true
+ }
+ ]
}
],
invalid: [
@@ -329,6 +361,132 @@ ruleTester.run('no-multi-spaces', rule, {
endColumn: 30
}
]
+ },
+ {
+ code: `
+
+
+
+ `,
+ output: `
+
+
+
+ `,
+ errors: [
+ {
+ message: "Multiple spaces found before '// comment'.",
+ line: 5,
+ column: 23,
+ endLine: 5,
+ endColumn: 25
+ }
+ ]
+ },
+ {
+ code: `
+
+
+
+ `,
+ output: `
+
+
+
+ `,
+ errors: [
+ {
+ message: "Multiple spaces found before '/* multiline comment */'.",
+ line: 5,
+ column: 23,
+ endLine: 5,
+ endColumn: 25
+ }
+ ]
+ },
+ {
+ code: `
+
+
+
+ `,
+ output: `
+
+
+
+ `,
+ options: [
+ {
+ ignoreEOLComments: false
+ }
+ ],
+ errors: [
+ {
+ message: "Multiple spaces found before '// comment'.",
+ line: 5,
+ column: 23,
+ endLine: 5,
+ endColumn: 25
+ }
+ ]
+ },
+ {
+ code: `
+
+
+
+ `,
+ output: `
+
+
+
+ `,
+ options: [
+ {
+ ignoreEOLComments: false
+ }
+ ],
+ errors: [
+ {
+ message: "Multiple spaces found before '/* multiline comment */'.",
+ line: 5,
+ column: 23,
+ endLine: 5,
+ endColumn: 25
+ }
+ ]
}
]
})
diff --git a/tests/lib/rules/no-negated-v-if-condition.js b/tests/lib/rules/no-negated-v-if-condition.js
index fc0e02d0d..0b97c7909 100644
--- a/tests/lib/rules/no-negated-v-if-condition.js
+++ b/tests/lib/rules/no-negated-v-if-condition.js
@@ -153,24 +153,19 @@ tester.run('no-negated-v-if-condition', rule, {
Alternative
`,
+ output: `
+
+ Alternative
+ Content
+
+ `,
errors: [
{
messageId: 'negatedCondition',
line: 3,
column: 20,
endLine: 3,
- endColumn: 24,
- suggestions: [
- {
- messageId: 'fixNegatedCondition',
- output: `
-
- Alternative
- Content
-
- `
- }
- ]
+ endColumn: 24
}
]
},
@@ -182,24 +177,19 @@ tester.run('no-negated-v-if-condition', rule, {
Otherwise
`,
+ output: `
+
+ Otherwise
+ Negated condition
+
+ `,
errors: [
{
messageId: 'negatedCondition',
line: 3,
column: 20,
endLine: 3,
- endColumn: 33,
- suggestions: [
- {
- messageId: 'fixNegatedCondition',
- output: `
-
- Otherwise
- Negated condition
-
- `
- }
- ]
+ endColumn: 33
}
]
},
@@ -211,24 +201,19 @@ tester.run('no-negated-v-if-condition', rule, {
Equal
`,
+ output: `
+
+ Equal
+ Not equal
+
+ `,
errors: [
{
messageId: 'negatedCondition',
line: 3,
column: 20,
endLine: 3,
- endColumn: 26,
- suggestions: [
- {
- messageId: 'fixNegatedCondition',
- output: `
-
- Equal
- Not equal
-
- `
- }
- ]
+ endColumn: 26
}
]
},
@@ -240,24 +225,19 @@ tester.run('no-negated-v-if-condition', rule, {
Strictly equal
`,
+ output: `
+
+ Strictly equal
+ Strictly not equal
+
+ `,
errors: [
{
messageId: 'negatedCondition',
line: 3,
column: 20,
endLine: 3,
- endColumn: 27,
- suggestions: [
- {
- messageId: 'fixNegatedCondition',
- output: `
-
- Strictly equal
- Strictly not equal
-
- `
- }
- ]
+ endColumn: 27
}
]
},
@@ -270,25 +250,20 @@ tester.run('no-negated-v-if-condition', rule, {
Default
`,
+ output: `
+
+ First
+ Default
+ Second
+
+ `,
errors: [
{
messageId: 'negatedCondition',
line: 4,
column: 26,
endLine: 4,
- endColumn: 30,
- suggestions: [
- {
- messageId: 'fixNegatedCondition',
- output: `
-
- First
- Default
- Second
-
- `
- }
- ]
+ endColumn: 30
}
]
},
@@ -301,25 +276,20 @@ tester.run('no-negated-v-if-condition', rule, {
Default
`,
+ output: `
+
+ First
+ Default
+ Second
+
+ `,
errors: [
{
messageId: 'negatedCondition',
line: 4,
column: 26,
endLine: 4,
- endColumn: 28,
- suggestions: [
- {
- messageId: 'fixNegatedCondition',
- output: `
-
- First
- Default
- Second
-
- `
- }
- ]
+ endColumn: 28
}
]
},
@@ -331,24 +301,19 @@ tester.run('no-negated-v-if-condition', rule, {
span contents
`,
+ output: `
+
+ span contents
+ div contents
+
+ `,
errors: [
{
messageId: 'negatedCondition',
line: 3,
column: 20,
endLine: 3,
- endColumn: 30,
- suggestions: [
- {
- messageId: 'fixNegatedCondition',
- output: `
-
- span contents
- div contents
-
- `
- }
- ]
+ endColumn: 30
}
]
},
@@ -366,17 +331,7 @@ tester.run('no-negated-v-if-condition', rule, {
`,
- errors: [
- {
- messageId: 'negatedCondition',
- line: 3,
- column: 20,
- endLine: 3,
- endColumn: 26,
- suggestions: [
- {
- messageId: 'fixNegatedCondition',
- output: `
+ output: `
Nested if content
@@ -387,57 +342,28 @@ tester.run('no-negated-v-if-condition', rule, {
Inner else content
- `
- }
- ]
+ `,
+ errors: [
+ {
+ messageId: 'negatedCondition',
+ line: 3,
+ column: 20,
+ endLine: 3,
+ endColumn: 26
},
{
messageId: 'negatedCondition',
line: 4,
column: 23,
endLine: 4,
- endColumn: 29,
- suggestions: [
- {
- messageId: 'fixNegatedCondition',
- output: `
-
-
-
Inner else content
-
Inner if content
-
-
- Nested if content
- Nested else content
-
-
- `
- }
- ]
+ endColumn: 29
},
{
messageId: 'negatedCondition',
line: 8,
column: 23,
endLine: 8,
- endColumn: 30,
- suggestions: [
- {
- messageId: 'fixNegatedCondition',
- output: `
-
-
-
Inner if content
-
Inner else content
-
-
- Nested else content
- Nested if content
-
-
- `
- }
- ]
+ endColumn: 30
}
]
}
diff --git a/tests/lib/rules/no-parsing-error.js b/tests/lib/rules/no-parsing-error.js
index 54194a7b5..9225e4bda 100644
--- a/tests/lib/rules/no-parsing-error.js
+++ b/tests/lib/rules/no-parsing-error.js
@@ -80,13 +80,11 @@ tester.run('no-parsing-error', rule, {
},
{
code: '