+
+
+
+
+ `,
+ options: [{ maxDepth: 3 }],
+ errors: [
+ {
+ message:
+ 'Element is nested too deeply (depth of 4, maximum allowed is 3).',
+ line: 9,
+ endLine: 12
+ },
+ {
+ message:
+ 'Element is nested too deeply (depth of 5, maximum allowed is 3).',
+ line: 10,
+ endLine: 10
+ },
+ {
+ message:
+ 'Element is nested too deeply (depth of 5, maximum allowed is 3).',
+ line: 11,
+ endLine: 12
+ }
+ ]
+ }
+ ]
+})
diff --git a/tests/lib/rules/no-deprecated-slot-attribute.js b/tests/lib/rules/no-deprecated-slot-attribute.js
index 51d109358..2fd5fa401 100644
--- a/tests/lib/rules/no-deprecated-slot-attribute.js
+++ b/tests/lib/rules/no-deprecated-slot-attribute.js
@@ -643,6 +643,44 @@ tester.run('no-deprecated-slot-attribute', rule, {
}
],
errors: ['`slot` attributes are deprecated.']
+ },
+ {
+ code: `
+
+
+
+
+ `,
+ output: `
+
+
+
+
+
+
+ `,
+ errors: ['`slot` attributes are deprecated.']
+ },
+ {
+ code: `
+
+
+
+ Passing in a named slot to a div worked with old syntax
+ But not with new syntax
+
+
+ `,
+ output: null,
+ errors: ['`slot` attributes are deprecated.']
}
]
})
diff --git a/tests/lib/rules/require-default-export.js b/tests/lib/rules/require-default-export.js
new file mode 100644
index 000000000..279af4a38
--- /dev/null
+++ b/tests/lib/rules/require-default-export.js
@@ -0,0 +1,190 @@
+/**
+ * @author ItMaga
+ * See LICENSE file in root directory for full license.
+ */
+'use strict'
+
+const RuleTester = require('../../eslint-compat').RuleTester
+const rule = require('../../../lib/rules/require-default-export')
+
+const tester = new RuleTester({
+ languageOptions: {
+ parser: require('vue-eslint-parser'),
+ ecmaVersion: 2020,
+ sourceType: 'module'
+ }
+})
+
+tester.run('require-default-export', rule, {
+ valid: [
+ {
+ filename: 'test.vue',
+ code: `
+
Without script
+ `
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `
+ },
+ {
+ filename: 'test.js',
+ code: `
+ const foo = 'foo';
+ export const bar = 'bar';
+ `
+ },
+ {
+ filename: 'test.js',
+ code: `
+ import {defineComponent} from 'vue';
+ defineComponent({});
+ `
+ }
+ ],
+ invalid: [
+ {
+ filename: 'test.vue',
+ code: `
+
+ `,
+ errors: [
+ {
+ messageId: 'missing',
+ line: 4,
+ endLine: 4,
+ column: 7,
+ endColumn: 16
+ }
+ ]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `,
+ errors: [
+ {
+ messageId: 'missing',
+ line: 4,
+ endLine: 4,
+ column: 7,
+ endColumn: 16
+ }
+ ]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `,
+ errors: [
+ {
+ messageId: 'missing',
+ line: 6,
+ endLine: 6,
+ column: 7,
+ endColumn: 16
+ }
+ ]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `,
+ errors: [
+ {
+ messageId: 'missing',
+ line: 5,
+ endLine: 5,
+ column: 7,
+ endColumn: 16
+ }
+ ]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `,
+ errors: [
+ {
+ messageId: 'mustBeDefaultExport',
+ line: 6,
+ endLine: 6,
+ column: 7,
+ endColumn: 16
+ }
+ ]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `,
+ errors: [
+ {
+ messageId: 'mustBeDefaultExport',
+ line: 6,
+ endLine: 6,
+ column: 7,
+ endColumn: 16
+ }
+ ]
+ }
+ ]
+})
diff --git a/tests/lib/rules/require-toggle-inside-transition.js b/tests/lib/rules/require-toggle-inside-transition.js
index d40ad4748..cdd48c493 100644
--- a/tests/lib/rules/require-toggle-inside-transition.js
+++ b/tests/lib/rules/require-toggle-inside-transition.js
@@ -77,6 +77,15 @@ tester.run('require-toggle-inside-transition', rule, {
{
filename: 'test.vue',
code: '
'
+ },
+ {
+ filename: 'test.vue',
+ code: '
',
+ options: [
+ {
+ additionalDirectives: ['dialog']
+ }
+ ]
}
],
invalid: [
@@ -132,6 +141,36 @@ tester.run('require-toggle-inside-transition', rule, {
filename: 'test.vue',
code: '
',
errors: [{ messageId: 'expected' }]
+ },
+ {
+ filename: 'test.vue',
+ code: '
',
+ options: [
+ {
+ additionalDirectives: []
+ }
+ ],
+ errors: [
+ {
+ messageId: 'expected',
+ data: { allowedDirectives: '`v-if` or `v-show`' }
+ }
+ ]
+ },
+ {
+ filename: 'test.vue',
+ code: '
',
+ options: [
+ {
+ additionalDirectives: ['dialog']
+ }
+ ],
+ errors: [
+ {
+ messageId: 'expected',
+ data: { allowedDirectives: '`v-if`, `v-show` or `v-dialog`' }
+ }
+ ]
}
]
})
diff --git a/tests/lib/rules/require-typed-object-prop.js b/tests/lib/rules/require-typed-object-prop.js
index 9f5f000a9..8a16fb567 100644
--- a/tests/lib/rules/require-typed-object-prop.js
+++ b/tests/lib/rules/require-typed-object-prop.js
@@ -9,7 +9,12 @@ const rule = require('../../../lib/rules/require-typed-object-prop')
const ruleTester = new RuleTester({
languageOptions: {
- parser: require('@typescript-eslint/parser')
+ parser: require('vue-eslint-parser'),
+ ecmaVersion: 6,
+ sourceType: 'module',
+ parserOptions: {
+ parser: require.resolve('@typescript-eslint/parser')
+ }
}
})
@@ -19,20 +24,22 @@ ruleTester.run('require-typed-object-prop', rule, {
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
@@ -40,31 +47,28 @@ ruleTester.run('require-typed-object-prop', rule, {
- `,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- ecmaVersion: 6,
- sourceType: 'module'
- }
+ `
},
// array props
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
@@ -72,31 +76,28 @@ ruleTester.run('require-typed-object-prop', rule, {
- `,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- ecmaVersion: 6,
- sourceType: 'module'
- }
+ `
},
// primitive props
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
@@ -104,31 +105,28 @@ ruleTester.run('require-typed-object-prop', rule, {
- `,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- ecmaVersion: 6,
- sourceType: 'module'
- }
+ `
},
// union
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
@@ -136,31 +134,28 @@ ruleTester.run('require-typed-object-prop', rule, {
- `,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- ecmaVersion: 6,
- sourceType: 'module'
- }
+ `
},
// function
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
@@ -168,40 +163,38 @@ ruleTester.run('require-typed-object-prop', rule, {
- `,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- ecmaVersion: 6,
- sourceType: 'module'
- }
+ `
},
// typed object
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
@@ -209,42 +202,28 @@ 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',
code: `
+
+ `
},
{
filename: 'test.vue',
code: `
+
+ `
},
{
filename: 'test.vue',
@@ -252,15 +231,7 @@ ruleTester.run('require-typed-object-prop', rule, {
- `,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- ecmaVersion: 6,
- sourceType: 'module',
- parserOptions: {
- parser: require.resolve('@typescript-eslint/parser')
- }
- }
+ `
},
// any
{
@@ -269,15 +240,7 @@ 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',
@@ -289,15 +252,7 @@ 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',
@@ -309,13 +264,7 @@ ruleTester.run('require-typed-object-prop', rule, {
}
});
- `,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- ecmaVersion: 6,
- sourceType: 'module',
- parserOptions: { parser: require.resolve('@typescript-eslint/parser') }
- }
+ `
},
// unknown
{
@@ -324,13 +273,7 @@ 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',
@@ -342,13 +285,7 @@ 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',
@@ -360,13 +297,34 @@ ruleTester.run('require-typed-object-prop', rule, {
}
});
- `,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- ecmaVersion: 6,
- sourceType: 'module',
- parserOptions: { parser: require.resolve('@typescript-eslint/parser') }
- }
+ `
+ },
+ // JavaScript components
+ {
+ filename: 'test.vue',
+ code: `
+
+ `
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `
+ },
+ {
+ filename: 'test.js',
+ code: `
+ export default Vue.extend({
+ props: { foo: Object }
+ });
+ `
}
],
invalid: [
@@ -377,14 +335,6 @@ ruleTester.run('require-typed-object-prop', rule, {
defineProps({ foo: Object });
`,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- ecmaVersion: 6,
- sourceType: 'module',
- parserOptions: {
- parser: require.resolve('@typescript-eslint/parser')
- }
- },
errors: [
{
messageId: 'expectedTypeAnnotation',
@@ -422,14 +372,6 @@ ruleTester.run('require-typed-object-prop', rule, {
defineProps({ foo: Array });
`,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- ecmaVersion: 6,
- sourceType: 'module',
- parserOptions: {
- parser: require.resolve('@typescript-eslint/parser')
- }
- },
errors: [
{
messageId: 'expectedTypeAnnotation',
@@ -463,35 +405,40 @@ ruleTester.run('require-typed-object-prop', rule, {
{
filename: 'test.vue',
code: `
+
`,
- languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [
{
messageId: 'expectedTypeAnnotation',
- line: 3,
+ line: 4,
column: 23,
- endLine: 3,
+ endLine: 4,
endColumn: 29,
suggestions: [
{
messageId: 'addTypeAnnotation',
data: { type: 'any' },
output: `
+
`
},
{
messageId: 'addTypeAnnotation',
data: { type: 'unknown' },
output: `
+
`
}
]
@@ -501,35 +448,40 @@ ruleTester.run('require-typed-object-prop', rule, {
{
filename: 'test.vue',
code: `
+
`,
- languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [
{
messageId: 'expectedTypeAnnotation',
- line: 3,
+ line: 4,
column: 23,
- endLine: 3,
+ endLine: 4,
endColumn: 29,
suggestions: [
{
messageId: 'addTypeAnnotation',
data: { type: 'any' },
output: `
+
`
},
{
messageId: 'addTypeAnnotation',
data: { type: 'unknown' },
output: `
+
`
}
]
@@ -539,35 +491,40 @@ ruleTester.run('require-typed-object-prop', rule, {
{
filename: 'test.vue',
code: `
+
`,
- languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [
{
messageId: 'expectedTypeAnnotation',
- line: 3,
+ line: 4,
column: 31,
- endLine: 3,
+ endLine: 4,
endColumn: 37,
suggestions: [
{
messageId: 'addTypeAnnotation',
data: { type: 'any' },
output: `
+
`
},
{
messageId: 'addTypeAnnotation',
data: { type: 'unknown' },
output: `
+
`
}
]
@@ -577,35 +534,40 @@ ruleTester.run('require-typed-object-prop', rule, {
{
filename: 'test.vue',
code: `
+
`,
- languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [
{
messageId: 'expectedTypeAnnotation',
- line: 3,
+ line: 4,
column: 31,
- endLine: 3,
+ endLine: 4,
endColumn: 37,
suggestions: [
{
messageId: 'addTypeAnnotation',
data: { type: 'any' },
output: `
+
`
},
{
messageId: 'addTypeAnnotation',
data: { type: 'unknown' },
output: `
+
`
}
]
@@ -619,14 +581,6 @@ ruleTester.run('require-typed-object-prop', rule, {
defineProps({ foo: { type: Object } });
`,
- languageOptions: {
- parser: require('vue-eslint-parser'),
- ecmaVersion: 6,
- sourceType: 'module',
- parserOptions: {
- parser: require.resolve('@typescript-eslint/parser')
- }
- },
errors: [
{
messageId: 'expectedTypeAnnotation',
@@ -656,6 +610,44 @@ ruleTester.run('require-typed-object-prop', rule, {
]
}
]
+ },
+ {
+ // `.ts` file
+ filename: 'test.ts',
+ code: `
+ export default Vue.extend({
+ props: { foo: Object }
+ });
+ `,
+ errors: [
+ {
+ messageId: 'expectedTypeAnnotation',
+ line: 3,
+ column: 23,
+ endLine: 3,
+ endColumn: 29,
+ suggestions: [
+ {
+ messageId: 'addTypeAnnotation',
+ data: { type: 'any' },
+ output: `
+ export default Vue.extend({
+ props: { foo: Object as PropType
}
+ });
+ `
+ },
+ {
+ messageId: 'addTypeAnnotation',
+ data: { type: 'unknown' },
+ output: `
+ export default Vue.extend({
+ props: { foo: Object as PropType }
+ });
+ `
+ }
+ ]
+ }
+ ]
}
]
})
diff --git a/tests/lib/rules/v-if-else-key.js b/tests/lib/rules/v-if-else-key.js
index 16d975a0a..46c42f52f 100644
--- a/tests/lib/rules/v-if-else-key.js
+++ b/tests/lib/rules/v-if-else-key.js
@@ -127,6 +127,90 @@ tester.run('v-if-else-key', rule, {
}
`
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+
+
+
+ `
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+
+
+
+ `
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+
+
+ …
+ …
+
+ …
+ …
+
+
+
+ `
}
],
invalid: [
@@ -424,6 +508,74 @@ tester.run('v-if-else-key', rule, {
line: 6
}
]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ output: `
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ errors: [
+ {
+ message:
+ "Conditionally rendered repeated component 'ComponentA' expected to have a 'key' attribute.",
+ line: 4
+ },
+ {
+ message:
+ "Conditionally rendered repeated component 'ComponentA' expected to have a 'key' attribute.",
+ line: 5
+ },
+ {
+ message:
+ "Conditionally rendered repeated component 'ComponentA' expected to have a 'key' attribute.",
+ line: 7
+ },
+ {
+ message:
+ "Conditionally rendered repeated component 'ComponentA' expected to have a 'key' attribute.",
+ line: 8
+ },
+ {
+ message:
+ "Conditionally rendered repeated component 'ComponentA' expected to have a 'key' attribute.",
+ line: 9
+ }
+ ]
}
]
})
diff --git a/tools/update-lib-flat-configs.js b/tools/update-lib-flat-configs.js
index 9d1671b90..d25ba2815 100644
--- a/tools/update-lib-flat-configs.js
+++ b/tools/update-lib-flat-configs.js
@@ -58,7 +58,7 @@ function formatCategory(category) {
const globals = require('globals')
module.exports = [
{
- name: 'vue:base:setup',
+ name: 'vue/base/setup',
plugins: {
get vue() {
return require('../../index')
@@ -70,7 +70,7 @@ module.exports = [
}
},
{
- name: 'vue:base:setup-for-vue',
+ name: 'vue/base/setup-for-vue',
files: ['*.vue', '**/*.vue'],
plugins: {
get vue() {
@@ -99,7 +99,7 @@ const config = require('./${extendsCategoryId}.js')
module.exports = [
...config,
{
- name: 'vue:${category.categoryId.replace(/^vue3-/u, '')}:rules',
+ name: 'vue/${category.categoryId.replace(/^vue3-/u, '')}/rules',
rules: ${formatRules(category.rules, category.categoryId)},
}
]
pFad - Phonifier reborn
Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy