diff --git a/.eslintrc.js b/.eslintrc.js
index da047d7b9..b73aa7c94 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -119,6 +119,7 @@ module.exports = {
'prefer-spread': 'error',
'dot-notation': 'error',
+ 'arrow-body-style': 'error',
'unicorn/consistent-function-scoping': [
'error',
diff --git a/docs/rules/no-expose-after-await.md b/docs/rules/no-expose-after-await.md
index 54c587116..7855b833c 100644
--- a/docs/rules/no-expose-after-await.md
+++ b/docs/rules/no-expose-after-await.md
@@ -13,14 +13,14 @@ since: v8.1.0
## :book: Rule Details
-This rule reports usages of `expose()` after an `await` expression.
-In the `setup()` function, `expose()` should be registered synchronously.
+This rule reports usages of `expose()` and `defineExpose()` after an `await` expression.
+In the `setup()` function, `expose()` should be registered synchronously.
+In the `
+```
+
+
+
## :wrench: Options
Nothing.
diff --git a/lib/rules/attribute-hyphenation.js b/lib/rules/attribute-hyphenation.js
index 0502ae3bc..1c097763c 100644
--- a/lib/rules/attribute-hyphenation.js
+++ b/lib/rules/attribute-hyphenation.js
@@ -107,9 +107,7 @@ module.exports = {
* @param {string} value
*/
function isIgnoredAttribute(value) {
- const isIgnored = ignoredAttributes.some((attr) => {
- return value.includes(attr)
- })
+ const isIgnored = ignoredAttributes.some((attr) => value.includes(attr))
if (isIgnored) {
return true
diff --git a/lib/rules/no-dupe-v-else-if.js b/lib/rules/no-dupe-v-else-if.js
index d0d74cfed..1500d7d24 100644
--- a/lib/rules/no-dupe-v-else-if.js
+++ b/lib/rules/no-dupe-v-else-if.js
@@ -167,11 +167,10 @@ module.exports = {
for (const condition of listToCheck) {
const operands = (condition.operands = condition.operands.filter(
- (orOperand) => {
- return !currentOrOperands.operands.some((currentOrOperand) =>
+ (orOperand) =>
+ !currentOrOperands.operands.some((currentOrOperand) =>
isSubset(currentOrOperand, orOperand)
)
- }
))
if (operands.length === 0) {
context.report({
diff --git a/lib/rules/no-expose-after-await.js b/lib/rules/no-expose-after-await.js
index 9d753ab81..fdfa10869 100644
--- a/lib/rules/no-expose-after-await.js
+++ b/lib/rules/no-expose-after-await.js
@@ -46,7 +46,7 @@ module.exports = {
fixable: null,
schema: [],
messages: {
- forbidden: 'The `expose` after `await` expression are forbidden.'
+ forbidden: '`{{name}}` is forbidden after an `await` expression.'
}
},
/** @param {RuleContext} context */
@@ -55,147 +55,192 @@ module.exports = {
* @typedef {object} SetupScopeData
* @property {boolean} afterAwait
* @property {[number,number]} range
- * @property {Set} exposeReferenceIds
- * @property {Set} contextReferenceIds
+ * @property {(node: Identifier, callNode: CallExpression) => boolean} isExposeReferenceId
+ * @property {(node: Identifier) => boolean} isContextReferenceId
*/
/**
* @typedef {object} ScopeStack
* @property {ScopeStack | null} upper
- * @property {FunctionDeclaration | FunctionExpression | ArrowFunctionExpression} scopeNode
+ * @property {FunctionDeclaration | FunctionExpression | ArrowFunctionExpression | Program} scopeNode
*/
- /** @type {Map} */
+ /** @type {Map} */
const setupScopes = new Map()
/** @type {ScopeStack | null} */
let scopeStack = null
- return utils.defineVueVisitor(context, {
- onSetupFunctionEnter(node) {
- const contextParam = node.params[1]
- if (!contextParam) {
- // no arguments
- return
- }
- if (contextParam.type === 'RestElement') {
- // cannot check
- return
- }
- if (contextParam.type === 'ArrayPattern') {
- // cannot check
- return
+ return utils.compositingVisitors(
+ {
+ /**
+ * @param {Program} node
+ */
+ Program(node) {
+ scopeStack = {
+ upper: scopeStack,
+ scopeNode: node
+ }
}
- /** @type {Set} */
- const contextReferenceIds = new Set()
- /** @type {Set} */
- const exposeReferenceIds = new Set()
- if (contextParam.type === 'ObjectPattern') {
- const exposeProperty = utils.findAssignmentProperty(
- contextParam,
- 'expose'
- )
- if (!exposeProperty) {
- return
+ },
+ {
+ /**
+ * @param {FunctionExpression | FunctionDeclaration | ArrowFunctionExpression} node
+ */
+ ':function'(node) {
+ scopeStack = {
+ upper: scopeStack,
+ scopeNode: node
}
- const exposeParam = exposeProperty.value
- // `setup(props, {emit})`
- const variable =
- exposeParam.type === 'Identifier'
- ? findVariable(context.getScope(), exposeParam)
- : null
- if (!variable) {
+ },
+ ':function:exit'() {
+ scopeStack = scopeStack && scopeStack.upper
+ },
+ /** @param {AwaitExpression} node */
+ AwaitExpression(node) {
+ if (!scopeStack) {
return
}
- for (const reference of variable.references) {
- if (!reference.isRead()) {
- continue
- }
- exposeReferenceIds.add(reference.identifier)
+ const setupScope = setupScopes.get(scopeStack.scopeNode)
+ if (!setupScope || !utils.inRange(setupScope.range, node)) {
+ return
}
- } else if (contextParam.type === 'Identifier') {
- // `setup(props, context)`
- const variable = findVariable(context.getScope(), contextParam)
- if (!variable) {
+ setupScope.afterAwait = true
+ },
+ /** @param {CallExpression} node */
+ CallExpression(node) {
+ if (!scopeStack) {
return
}
- for (const reference of variable.references) {
- if (!reference.isRead()) {
- continue
- }
- contextReferenceIds.add(reference.identifier)
+ const setupScope = setupScopes.get(scopeStack.scopeNode)
+ if (
+ !setupScope ||
+ !setupScope.afterAwait ||
+ !utils.inRange(setupScope.range, node)
+ ) {
+ return
}
- }
- setupScopes.set(node, {
- afterAwait: false,
- range: node.range,
- exposeReferenceIds,
- contextReferenceIds
- })
- },
- /**
- * @param {FunctionExpression | FunctionDeclaration | ArrowFunctionExpression} node
- */
- ':function'(node) {
- scopeStack = {
- upper: scopeStack,
- scopeNode: node
- }
- },
- ':function:exit'() {
- scopeStack = scopeStack && scopeStack.upper
- },
- /** @param {AwaitExpression} node */
- AwaitExpression(node) {
- if (!scopeStack) {
- return
- }
- const setupScope = setupScopes.get(scopeStack.scopeNode)
- if (!setupScope || !utils.inRange(setupScope.range, node)) {
- return
- }
- setupScope.afterAwait = true
- },
- /** @param {CallExpression} node */
- CallExpression(node) {
- if (!scopeStack) {
- return
- }
- const setupScope = setupScopes.get(scopeStack.scopeNode)
- if (
- !setupScope ||
- !setupScope.afterAwait ||
- !utils.inRange(setupScope.range, node)
- ) {
- return
- }
- const { contextReferenceIds, exposeReferenceIds } = setupScope
- if (
- node.callee.type === 'Identifier' &&
- exposeReferenceIds.has(node.callee)
- ) {
- // setup(props,{expose}) {expose()}
- context.report({
- node,
- messageId: 'forbidden'
- })
- } else {
- const expose = getCalleeMemberNode(node)
+ const { isContextReferenceId, isExposeReferenceId } = setupScope
if (
- expose &&
- expose.name === 'expose' &&
- expose.member.object.type === 'Identifier' &&
- contextReferenceIds.has(expose.member.object)
+ node.callee.type === 'Identifier' &&
+ isExposeReferenceId(node.callee, node)
) {
- // setup(props,context) {context.emit()}
+ // setup(props,{expose}) {expose()}
context.report({
node,
- messageId: 'forbidden'
+ messageId: 'forbidden',
+ data: {
+ name: node.callee.name
+ }
})
+ } else {
+ const expose = getCalleeMemberNode(node)
+ if (
+ expose &&
+ expose.name === 'expose' &&
+ expose.member.object.type === 'Identifier' &&
+ isContextReferenceId(expose.member.object)
+ ) {
+ // setup(props,context) {context.emit()}
+ context.report({
+ node,
+ messageId: 'forbidden',
+ data: {
+ name: expose.name
+ }
+ })
+ }
}
}
},
- onSetupFunctionExit(node) {
- setupScopes.delete(node)
- }
- })
+ (() => {
+ const scriptSetup = utils.getScriptSetupElement(context)
+ if (!scriptSetup) {
+ return {}
+ }
+ return {
+ /**
+ * @param {Program} node
+ */
+ Program(node) {
+ context
+ .getScope()
+ .references.find((ref) => ref.identifier.name === 'defineExpose')
+ setupScopes.set(node, {
+ afterAwait: false,
+ range: scriptSetup.range,
+ isExposeReferenceId: (_id, callNode) =>
+ callNode.parent.type === 'ExpressionStatement' &&
+ callNode.parent.parent === node,
+ isContextReferenceId: () => false
+ })
+ }
+ }
+ })(),
+ utils.defineVueVisitor(context, {
+ onSetupFunctionEnter(node) {
+ const contextParam = node.params[1]
+ if (!contextParam) {
+ // no arguments
+ return
+ }
+ if (contextParam.type === 'RestElement') {
+ // cannot check
+ return
+ }
+ if (contextParam.type === 'ArrayPattern') {
+ // cannot check
+ return
+ }
+ /** @type {Set} */
+ const contextReferenceIds = new Set()
+ /** @type {Set} */
+ const exposeReferenceIds = new Set()
+ if (contextParam.type === 'ObjectPattern') {
+ const exposeProperty = utils.findAssignmentProperty(
+ contextParam,
+ 'expose'
+ )
+ if (!exposeProperty) {
+ return
+ }
+ const exposeParam = exposeProperty.value
+ // `setup(props, {emit})`
+ const variable =
+ exposeParam.type === 'Identifier'
+ ? findVariable(context.getScope(), exposeParam)
+ : null
+ if (!variable) {
+ return
+ }
+ for (const reference of variable.references) {
+ if (!reference.isRead()) {
+ continue
+ }
+ exposeReferenceIds.add(reference.identifier)
+ }
+ } else if (contextParam.type === 'Identifier') {
+ // `setup(props, context)`
+ const variable = findVariable(context.getScope(), contextParam)
+ if (!variable) {
+ return
+ }
+ for (const reference of variable.references) {
+ if (!reference.isRead()) {
+ continue
+ }
+ contextReferenceIds.add(reference.identifier)
+ }
+ }
+ setupScopes.set(node, {
+ afterAwait: false,
+ range: node.range,
+ isExposeReferenceId: (id) => exposeReferenceIds.has(id),
+ isContextReferenceId: (id) => contextReferenceIds.has(id)
+ })
+ },
+ onSetupFunctionExit(node) {
+ setupScopes.delete(node)
+ }
+ })
+ )
}
}
diff --git a/lib/rules/no-lifecycle-after-await.js b/lib/rules/no-lifecycle-after-await.js
index d38a97a59..bb097910f 100644
--- a/lib/rules/no-lifecycle-after-await.js
+++ b/lib/rules/no-lifecycle-after-await.js
@@ -35,7 +35,7 @@ module.exports = {
fixable: null,
schema: [],
messages: {
- forbidden: 'The lifecycle hooks after `await` expression are forbidden.'
+ forbidden: 'Lifecycle hooks are forbidden after an `await` expression.'
}
},
/** @param {RuleContext} context */
diff --git a/lib/rules/no-restricted-call-after-await.js b/lib/rules/no-restricted-call-after-await.js
index 7b6ff74e7..f4f3b6d38 100644
--- a/lib/rules/no-restricted-call-after-await.js
+++ b/lib/rules/no-restricted-call-after-await.js
@@ -169,9 +169,9 @@ module.exports = {
local[ReferenceTracker.CALL] = true
const message =
option.message ||
- `The \`${[`import("${module}")`, ...paths].join(
+ `\`${[`import("${module}")`, ...paths].join(
'.'
- )}\` after \`await\` expression are forbidden.`
+ )}\` is forbidden after an \`await\` expression.`
for (const { node } of tracker.iterateEsmReferences(traceMap)) {
restrictedCallNodes.set(node, message)
diff --git a/lib/rules/no-restricted-v-bind.js b/lib/rules/no-restricted-v-bind.js
index 2fdb5b744..f9bf5462b 100644
--- a/lib/rules/no-restricted-v-bind.js
+++ b/lib/rules/no-restricted-v-bind.js
@@ -69,9 +69,9 @@ function parseOption(option) {
if (!argTest(key)) {
return false
}
- return /** @type {string[]} */ (option.modifiers).every((modName) => {
- return key.modifiers.some((mid) => mid.name === modName)
- })
+ return /** @type {string[]} */ (option.modifiers).every((modName) =>
+ key.modifiers.some((mid) => mid.name === modName)
+ )
}
parsed.modifiers = option.modifiers
}
diff --git a/lib/rules/no-side-effects-in-computed-properties.js b/lib/rules/no-side-effects-in-computed-properties.js
index 6e43266fb..7f7697b50 100644
--- a/lib/rules/no-side-effects-in-computed-properties.js
+++ b/lib/rules/no-side-effects-in-computed-properties.js
@@ -74,14 +74,13 @@ module.exports = {
const computedProperty = (
info ? computedPropertiesMap.get(info.node) || [] : []
- ).find((cp) => {
- return (
+ ).find(
+ (cp) =>
cp.value &&
cp.value.range[0] <= node.range[0] &&
node.range[1] <= cp.value.range[1] &&
targetBody === cp.value
- )
- })
+ )
if (computedProperty) {
const mem = node.parent
if (mem.object !== node) {
diff --git a/lib/rules/no-watch-after-await.js b/lib/rules/no-watch-after-await.js
index 6ecc4dd75..ae88fd51a 100644
--- a/lib/rules/no-watch-after-await.js
+++ b/lib/rules/no-watch-after-await.js
@@ -51,7 +51,7 @@ module.exports = {
fixable: null,
schema: [],
messages: {
- forbidden: 'The `watch` after `await` expression are forbidden.'
+ forbidden: '`watch` is forbidden after an `await` expression.'
}
},
/** @param {RuleContext} context */
diff --git a/lib/rules/order-in-components.js b/lib/rules/order-in-components.js
index 83e814413..1e0b517f8 100644
--- a/lib/rules/order-in-components.js
+++ b/lib/rules/order-in-components.js
@@ -259,15 +259,13 @@ module.exports = {
function checkOrder(propertiesNodes) {
const properties = propertiesNodes
.filter(utils.isProperty)
- .map((property) => {
- return {
- node: property,
- name:
- utils.getStaticPropertyName(property) ||
- (property.key.type === 'Identifier' && property.key.name) ||
- ''
- }
- })
+ .map((property) => ({
+ node: property,
+ name:
+ utils.getStaticPropertyName(property) ||
+ (property.key.type === 'Identifier' && property.key.name) ||
+ ''
+ }))
for (const [i, property] of properties.entries()) {
const orderPos = getOrderPosition(property.name)
diff --git a/lib/rules/static-class-names-order.js b/lib/rules/static-class-names-order.js
index bee820fa2..3e5e9a631 100644
--- a/lib/rules/static-class-names-order.js
+++ b/lib/rules/static-class-names-order.js
@@ -25,8 +25,8 @@ module.exports = {
schema: []
},
/** @param {RuleContext} context */
- create: (context) => {
- return defineTemplateBodyVisitor(context, {
+ create: (context) =>
+ defineTemplateBodyVisitor(context, {
/** @param {VAttribute} node */
"VAttribute[directive=false][key.name='class']"(node) {
const value = node.value
@@ -57,5 +57,4 @@ module.exports = {
}
}
})
- }
}
diff --git a/lib/rules/v-on-event-hyphenation.js b/lib/rules/v-on-event-hyphenation.js
index 16ea753ab..7060ab620 100644
--- a/lib/rules/v-on-event-hyphenation.js
+++ b/lib/rules/v-on-event-hyphenation.js
@@ -74,9 +74,7 @@ module.exports = {
autofix &&
// It cannot be converted in snake_case.
!name.includes('_')
- ? (fixer) => {
- return fixer.replaceText(argument, caseConverter(name))
- }
+ ? (fixer) => fixer.replaceText(argument, caseConverter(name))
: null
})
}
@@ -85,9 +83,7 @@ module.exports = {
* @param {string} value
*/
function isIgnoredAttribute(value) {
- const isIgnored = ignoredAttributes.some((attr) => {
- return value.includes(attr)
- })
+ const isIgnored = ignoredAttributes.some((attr) => value.includes(attr))
if (isIgnored) {
return true
diff --git a/lib/utils/index.js b/lib/utils/index.js
index 63a838bca..5a423faa4 100644
--- a/lib/utils/index.js
+++ b/lib/utils/index.js
@@ -675,13 +675,10 @@ module.exports = {
* @param {ESNode} p
* @returns {p is (Property & { key: Identifier & {name: 'components'}, value: ObjectExpression })}
*/
- (p) => {
- return (
- p.type === 'Property' &&
- getStaticPropertyName(p) === 'components' &&
- p.value.type === 'ObjectExpression'
- )
- }
+ (p) =>
+ p.type === 'Property' &&
+ getStaticPropertyName(p) === 'components' &&
+ p.value.type === 'ObjectExpression'
)
if (!componentsNode) {
@@ -913,13 +910,10 @@ module.exports = {
* @param {ESNode} p
* @returns {p is (Property & { key: Identifier & {name: 'computed'}, value: ObjectExpression })}
*/
- (p) => {
- return (
- p.type === 'Property' &&
- getStaticPropertyName(p) === 'computed' &&
- p.value.type === 'ObjectExpression'
- )
- }
+ (p) =>
+ p.type === 'Property' &&
+ getStaticPropertyName(p) === 'computed' &&
+ p.value.type === 'ObjectExpression'
)
if (!computedPropertiesNode) {
@@ -2705,14 +2699,11 @@ function getAttribute(node, name, value) {
* @param {VAttribute | VDirective} node
* @returns {node is VAttribute}
*/
- (node) => {
- return (
- !node.directive &&
- node.key.name === name &&
- (value === undefined ||
- (node.value != null && node.value.value === value))
- )
- }
+ (node) =>
+ !node.directive &&
+ node.key.name === name &&
+ (value === undefined ||
+ (node.value != null && node.value.value === value))
) || null
)
}
@@ -2731,9 +2722,7 @@ function getDirectives(node, name) {
* @param {VAttribute | VDirective} node
* @returns {node is VDirective}
*/
- (node) => {
- return node.directive && node.key.name.name === name
- }
+ (node) => node.directive && node.key.name.name === name
)
}
/**
@@ -2750,16 +2739,13 @@ function getDirective(node, name, argument) {
* @param {VAttribute | VDirective} node
* @returns {node is VDirective}
*/
- (node) => {
- return (
- node.directive &&
- node.key.name.name === name &&
- (argument === undefined ||
- (node.key.argument &&
- node.key.argument.type === 'VIdentifier' &&
- node.key.argument.name) === argument)
- )
- }
+ (node) =>
+ node.directive &&
+ node.key.name.name === name &&
+ (argument === undefined ||
+ (node.key.argument &&
+ node.key.argument.type === 'VIdentifier' &&
+ node.key.argument.name) === argument)
) || null
)
}
@@ -2851,9 +2837,7 @@ function getComponentPropsFromOptions(componentObject) {
* @param {ESNode} p
* @returns {p is (Property & { key: Identifier & {name: 'props'} })}
*/
- (p) => {
- return p.type === 'Property' && getStaticPropertyName(p) === 'props'
- }
+ (p) => p.type === 'Property' && getStaticPropertyName(p) === 'props'
)
if (!propsNode) {
@@ -2888,9 +2872,7 @@ function getComponentEmitsFromOptions(componentObject) {
* @param {ESNode} p
* @returns {p is (Property & { key: Identifier & {name: 'emits'} })}
*/
- (p) => {
- return p.type === 'Property' && getStaticPropertyName(p) === 'emits'
- }
+ (p) => p.type === 'Property' && getStaticPropertyName(p) === 'emits'
)
if (!emitsNode) {
diff --git a/lib/utils/property-references.js b/lib/utils/property-references.js
index e89457230..beb3118d6 100644
--- a/lib/utils/property-references.js
+++ b/lib/utils/property-references.js
@@ -533,9 +533,9 @@ function definePropertyReferenceExtractor(context) {
// unknown name
return ANY
}
- return extractFromName(refName, nameNode, () => {
- return extractFromExpression(node, false).getNest('value')
- })
+ return extractFromName(refName, nameNode, () =>
+ extractFromExpression(node, false).getNest('value')
+ )
}
/**
diff --git a/lib/utils/selector.js b/lib/utils/selector.js
index a1b18bc83..862f695fb 100644
--- a/lib/utils/selector.js
+++ b/lib/utils/selector.js
@@ -373,9 +373,7 @@ function pseudoNodeToVElementMatcher(selector) {
case ':not': {
// https://developer.mozilla.org/en-US/docs/Web/CSS/:not
const selectors = selectorsToVElementMatcher(selector.nodes)
- return (element, subject) => {
- return !selectors(element, subject)
- }
+ return (element, subject) => !selectors(element, subject)
}
case ':is':
case ':where':
diff --git a/tests/lib/rules/no-expose-after-await.js b/tests/lib/rules/no-expose-after-await.js
index 2f33c58e6..d335da64a 100644
--- a/tests/lib/rules/no-expose-after-await.js
+++ b/tests/lib/rules/no-expose-after-await.js
@@ -101,7 +101,19 @@ tester.run('no-expose-after-await', rule, {
+ `,
+ parserOptions: { ecmaVersion: 2022 }
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
`,
parserOptions: { ecmaVersion: 2022 }
@@ -122,7 +134,7 @@ tester.run('no-expose-after-await', rule, {
`,
errors: [
{
- message: 'The `expose` after `await` expression are forbidden.',
+ message: '`expose` is forbidden after an `await` expression.',
line: 6,
column: 11
}
@@ -142,11 +154,28 @@ tester.run('no-expose-after-await', rule, {
`,
errors: [
{
- message: 'The `expose` after `await` expression are forbidden.',
+ message: '`expose` is forbidden after an `await` expression.',
line: 6,
column: 11
}
]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `,
+ parserOptions: { ecmaVersion: 2022 },
+ errors: [
+ {
+ message: '`defineExpose` is forbidden after an `await` expression.',
+ line: 4,
+ column: 7
+ }
+ ]
}
]
})
diff --git a/tests/lib/rules/no-lifecycle-after-await.js b/tests/lib/rules/no-lifecycle-after-await.js
index bb7414682..e75995a5f 100644
--- a/tests/lib/rules/no-lifecycle-after-await.js
+++ b/tests/lib/rules/no-lifecycle-after-await.js
@@ -174,8 +174,7 @@ tester.run('no-lifecycle-after-await', rule, {
`,
errors: [
{
- message:
- 'The lifecycle hooks after `await` expression are forbidden.',
+ message: 'Lifecycle hooks are forbidden after an `await` expression.',
line: 8,
column: 11,
endLine: 8,
diff --git a/tests/lib/rules/no-reserved-component-names.js b/tests/lib/rules/no-reserved-component-names.js
index 126123dd4..4b39c0858 100644
--- a/tests/lib/rules/no-reserved-component-names.js
+++ b/tests/lib/rules/no-reserved-component-names.js
@@ -536,212 +536,188 @@ ruleTester.run('no-reserved-component-names', rule, {
code: `fn1(component.data)`,
parserOptions
},
- ...vue2BuiltInComponents.map((name) => {
- return {
- filename: `${name}.vue`,
- code: `
+ ...vue2BuiltInComponents.map((name) => ({
+ filename: `${name}.vue`,
+ code: `
export default {
name: '${name}'
}
`,
- parserOptions
- }
- }),
- ...vue3BuiltInComponents.map((name) => {
- return {
- filename: `${name}.vue`,
- code: `
+ parserOptions
+ })),
+ ...vue3BuiltInComponents.map((name) => ({
+ filename: `${name}.vue`,
+ code: `
export default {
name: '${name}'
}
`,
- parserOptions
- }
- }),
- ...vue3BuiltInComponents.map((name) => {
- return {
- filename: `${name}.vue`,
- code: `
+ parserOptions
+ })),
+ ...vue3BuiltInComponents.map((name) => ({
+ filename: `${name}.vue`,
+ code: `
export default {
name: '${name}'
}
`,
- parserOptions,
- options: [{ disallowVueBuiltInComponents: true }]
- }
- })
+ parserOptions,
+ options: [{ disallowVueBuiltInComponents: true }]
+ }))
],
invalid: [
- ...invalidElements.map((name) => {
- return {
- filename: `${name}.vue`,
- code: `
+ ...invalidElements.map((name) => ({
+ filename: `${name}.vue`,
+ code: `
export default {
name: '${name}'
}
`,
- parserOptions,
- errors: [
- {
- messageId: RESERVED_NAMES_IN_HTML.has(name)
- ? 'reservedInHtml'
- : 'reserved',
- data: { name },
- type: 'Literal',
- line: 3
- }
- ]
- }
- }),
- ...invalidElements.map((name) => {
- return {
- filename: 'test.vue',
- code: `Vue.component('${name}', component)`,
- parserOptions,
- errors: [
- {
- messageId: RESERVED_NAMES_IN_HTML.has(name)
- ? 'reservedInHtml'
- : 'reserved',
- data: { name },
- type: 'Literal',
- line: 1
- }
- ]
- }
- }),
- ...invalidElements.map((name) => {
- return {
- filename: 'test.vue',
- code: `app.component('${name}', component)`,
- parserOptions,
- errors: [
- {
- messageId: RESERVED_NAMES_IN_HTML.has(name)
- ? 'reservedInHtml'
- : 'reserved',
- data: { name },
- type: 'Literal',
- line: 1
- }
- ]
- }
- }),
- ...invalidElements.map((name) => {
- return {
- filename: 'test.vue',
- code: `Vue.component(\`${name}\`, {})`,
- parserOptions,
- errors: [
- {
- messageId: RESERVED_NAMES_IN_HTML.has(name)
- ? 'reservedInHtml'
- : 'reserved',
- data: { name },
- type: 'TemplateLiteral',
- line: 1
- }
- ]
- }
- }),
- ...invalidElements.map((name) => {
- return {
- filename: 'test.vue',
- code: `app.component(\`${name}\`, {})`,
- parserOptions,
- errors: [
- {
- messageId: RESERVED_NAMES_IN_HTML.has(name)
- ? 'reservedInHtml'
- : 'reserved',
- data: { name },
- type: 'TemplateLiteral',
- line: 1
- }
- ]
- }
- }),
- ...invalidElements.map((name) => {
- return {
- filename: 'test.vue',
- code: `export default {
+ parserOptions,
+ errors: [
+ {
+ messageId: RESERVED_NAMES_IN_HTML.has(name)
+ ? 'reservedInHtml'
+ : 'reserved',
+ data: { name },
+ type: 'Literal',
+ line: 3
+ }
+ ]
+ })),
+ ...invalidElements.map((name) => ({
+ filename: 'test.vue',
+ code: `Vue.component('${name}', component)`,
+ parserOptions,
+ errors: [
+ {
+ messageId: RESERVED_NAMES_IN_HTML.has(name)
+ ? 'reservedInHtml'
+ : 'reserved',
+ data: { name },
+ type: 'Literal',
+ line: 1
+ }
+ ]
+ })),
+ ...invalidElements.map((name) => ({
+ filename: 'test.vue',
+ code: `app.component('${name}', component)`,
+ parserOptions,
+ errors: [
+ {
+ messageId: RESERVED_NAMES_IN_HTML.has(name)
+ ? 'reservedInHtml'
+ : 'reserved',
+ data: { name },
+ type: 'Literal',
+ line: 1
+ }
+ ]
+ })),
+ ...invalidElements.map((name) => ({
+ filename: 'test.vue',
+ code: `Vue.component(\`${name}\`, {})`,
+ parserOptions,
+ errors: [
+ {
+ messageId: RESERVED_NAMES_IN_HTML.has(name)
+ ? 'reservedInHtml'
+ : 'reserved',
+ data: { name },
+ type: 'TemplateLiteral',
+ line: 1
+ }
+ ]
+ })),
+ ...invalidElements.map((name) => ({
+ filename: 'test.vue',
+ code: `app.component(\`${name}\`, {})`,
+ parserOptions,
+ errors: [
+ {
+ messageId: RESERVED_NAMES_IN_HTML.has(name)
+ ? 'reservedInHtml'
+ : 'reserved',
+ data: { name },
+ type: 'TemplateLiteral',
+ line: 1
+ }
+ ]
+ })),
+ ...invalidElements.map((name) => ({
+ filename: 'test.vue',
+ code: `export default {
components: {
'${name}': {},
}
}`,
- parserOptions,
- errors: [
- {
- messageId: RESERVED_NAMES_IN_HTML.has(name)
- ? 'reservedInHtml'
- : 'reserved',
- data: { name },
- type: 'Property',
- line: 3
- }
- ]
- }
- }),
- ...vue2BuiltInComponents.map((name) => {
- return {
- filename: `${name}.vue`,
- code: `
+ parserOptions,
+ errors: [
+ {
+ messageId: RESERVED_NAMES_IN_HTML.has(name)
+ ? 'reservedInHtml'
+ : 'reserved',
+ data: { name },
+ type: 'Property',
+ line: 3
+ }
+ ]
+ })),
+ ...vue2BuiltInComponents.map((name) => ({
+ filename: `${name}.vue`,
+ code: `
export default {
name: '${name}'
}
`,
- parserOptions,
- options: [{ disallowVueBuiltInComponents: true }],
- errors: [
- {
- messageId: 'reservedInVue',
- data: { name },
- type: 'Literal',
- line: 3
- }
- ]
- }
- }),
- ...vue2BuiltInComponents.map((name) => {
- return {
- filename: `${name}.vue`,
- code: `
+ parserOptions,
+ options: [{ disallowVueBuiltInComponents: true }],
+ errors: [
+ {
+ messageId: 'reservedInVue',
+ data: { name },
+ type: 'Literal',
+ line: 3
+ }
+ ]
+ })),
+ ...vue2BuiltInComponents.map((name) => ({
+ filename: `${name}.vue`,
+ code: `
export default {
name: '${name}'
}
`,
- parserOptions,
- options: [{ disallowVue3BuiltInComponents: true }],
- errors: [
- {
- messageId: 'reservedInVue',
- data: { name },
- type: 'Literal',
- line: 3
- }
- ]
- }
- }),
- ...vue3BuiltInComponents.map((name) => {
- return {
- filename: `${name}.vue`,
- code: `
+ parserOptions,
+ options: [{ disallowVue3BuiltInComponents: true }],
+ errors: [
+ {
+ messageId: 'reservedInVue',
+ data: { name },
+ type: 'Literal',
+ line: 3
+ }
+ ]
+ })),
+ ...vue3BuiltInComponents.map((name) => ({
+ filename: `${name}.vue`,
+ code: `
export default {
name: '${name}'
}
`,
- parserOptions,
- options: [{ disallowVue3BuiltInComponents: true }],
- errors: [
- {
- messageId: 'reservedInVue3',
- data: { name },
- type: 'Literal',
- line: 3
- }
- ]
- }
- })
+ parserOptions,
+ options: [{ disallowVue3BuiltInComponents: true }],
+ errors: [
+ {
+ messageId: 'reservedInVue3',
+ data: { name },
+ type: 'Literal',
+ line: 3
+ }
+ ]
+ }))
]
})
diff --git a/tests/lib/rules/no-restricted-call-after-await.js b/tests/lib/rules/no-restricted-call-after-await.js
index 0eef6713b..69eaf3a42 100644
--- a/tests/lib/rules/no-restricted-call-after-await.js
+++ b/tests/lib/rules/no-restricted-call-after-await.js
@@ -170,7 +170,7 @@ tester.run('no-restricted-call-after-await', rule, {
errors: [
{
message:
- 'The `import("vue-i18n").useI18n` after `await` expression are forbidden.',
+ '`import("vue-i18n").useI18n` is forbidden after an `await` expression.',
line: 7,
column: 25,
endLine: 7,
@@ -195,7 +195,7 @@ tester.run('no-restricted-call-after-await', rule, {
errors: [
{
message:
- 'The `import("foo").bar.baz` after `await` expression are forbidden.',
+ '`import("foo").bar.baz` is forbidden after an `await` expression.',
line: 7
}
]
@@ -222,12 +222,12 @@ tester.run('no-restricted-call-after-await', rule, {
errors: [
{
message:
- 'The `import("vue-i18n").useI18n` after `await` expression are forbidden.',
+ '`import("vue-i18n").useI18n` is forbidden after an `await` expression.',
line: 8
},
{
message:
- 'The `import("foo").bar.baz` after `await` expression are forbidden.',
+ '`import("foo").bar.baz` is forbidden after an `await` expression.',
line: 9
}
]
@@ -249,7 +249,7 @@ tester.run('no-restricted-call-after-await', rule, {
errors: [
{
message:
- 'The `import("foo").default` after `await` expression are forbidden.',
+ '`import("foo").default` is forbidden after an `await` expression.',
line: 7
}
]
@@ -271,7 +271,7 @@ tester.run('no-restricted-call-after-await', rule, {
errors: [
{
message:
- 'The `import("foo").default` after `await` expression are forbidden.',
+ '`import("foo").default` is forbidden after an `await` expression.',
line: 7
}
]
@@ -293,7 +293,7 @@ tester.run('no-restricted-call-after-await', rule, {
errors: [
{
message:
- 'The `import("vue-i18n").useI18n` after `await` expression are forbidden.',
+ '`import("vue-i18n").useI18n` is forbidden after an `await` expression.',
line: 7
}
]
@@ -324,17 +324,17 @@ tester.run('no-restricted-call-after-await', rule, {
errors: [
{
message:
- 'The `import("./foo").bar` after `await` expression are forbidden.',
+ '`import("./foo").bar` is forbidden after an `await` expression.',
line: 10
},
{
message:
- 'The `import("./baz").qux` after `await` expression are forbidden.',
+ '`import("./baz").qux` is forbidden after an `await` expression.',
line: 11
},
{
message:
- 'The `import("vue-i18n").useI18n` after `await` expression are forbidden.',
+ '`import("vue-i18n").useI18n` is forbidden after an `await` expression.',
line: 12
}
]
@@ -365,17 +365,17 @@ tester.run('no-restricted-call-after-await', rule, {
errors: [
{
message:
- 'The `import("./foo").bar` after `await` expression are forbidden.',
+ '`import("./foo").bar` is forbidden after an `await` expression.',
line: 10
},
{
message:
- 'The `import("./baz").qux` after `await` expression are forbidden.',
+ '`import("./baz").qux` is forbidden after an `await` expression.',
line: 11
},
{
message:
- 'The `import("vue-i18n").useI18n` after `await` expression are forbidden.',
+ '`import("vue-i18n").useI18n` is forbidden after an `await` expression.',
line: 12
}
]
@@ -397,7 +397,7 @@ tester.run('no-restricted-call-after-await', rule, {
errors: [
{
message:
- 'The `import("..").foo` after `await` expression are forbidden.',
+ '`import("..").foo` is forbidden after an `await` expression.',
line: 7
}
]
diff --git a/tests/lib/rules/no-watch-after-await.js b/tests/lib/rules/no-watch-after-await.js
index e97c78c63..c54c36eb7 100644
--- a/tests/lib/rules/no-watch-after-await.js
+++ b/tests/lib/rules/no-watch-after-await.js
@@ -188,7 +188,7 @@ tester.run('no-watch-after-await', rule, {
`,
errors: [
{
- message: 'The `watch` after `await` expression are forbidden.',
+ message: '`watch` is forbidden after an `await` expression.',
line: 8,
column: 11,
endLine: 8,