123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /**
- * @author ItMaga
- * See LICENSE file in root directory for full license.
- */
- 'use strict'
- const utils = require('../utils')
- const DEFAULT_OPTIONS = {
- defineProps: 'props',
- defineEmits: 'emit',
- defineSlots: 'slots',
- useSlots: 'slots',
- useAttrs: 'attrs'
- }
- module.exports = {
- meta: {
- type: 'suggestion',
- docs: {
- description: 'require a certain macro variable name',
- categories: undefined,
- url: 'https://eslint.vuejs.org/rules/require-macro-variable-name.html'
- },
- fixable: null,
- hasSuggestions: true,
- schema: [
- {
- type: 'object',
- properties: {
- defineProps: {
- type: 'string',
- default: DEFAULT_OPTIONS.defineProps
- },
- defineEmits: {
- type: 'string',
- default: DEFAULT_OPTIONS.defineEmits
- },
- defineSlots: {
- type: 'string',
- default: DEFAULT_OPTIONS.defineSlots
- },
- useSlots: {
- type: 'string',
- default: DEFAULT_OPTIONS.useSlots
- },
- useAttrs: {
- type: 'string',
- default: DEFAULT_OPTIONS.useAttrs
- }
- },
- additionalProperties: false
- }
- ],
- messages: {
- requireName:
- 'The variable name of "{{macroName}}" must be "{{variableName}}".',
- changeName: 'Change the variable name to "{{variableName}}".'
- }
- },
- /** @param {RuleContext} context */
- create(context) {
- const options = context.options[0] || DEFAULT_OPTIONS
- const relevantMacros = new Set([
- ...Object.keys(DEFAULT_OPTIONS),
- 'withDefaults'
- ])
- return utils.defineScriptSetupVisitor(context, {
- VariableDeclarator(node) {
- if (
- node.init &&
- node.init.type === 'CallExpression' &&
- node.init.callee.type === 'Identifier' &&
- relevantMacros.has(node.init.callee.name)
- ) {
- const macroName =
- node.init.callee.name === 'withDefaults'
- ? 'defineProps'
- : node.init.callee.name
- if (
- node.id.type === 'Identifier' &&
- node.id.name !== options[macroName]
- ) {
- context.report({
- node: node.id,
- loc: node.id.loc,
- messageId: 'requireName',
- data: {
- macroName,
- variableName: options[macroName]
- },
- suggest: [
- {
- messageId: 'changeName',
- data: {
- variableName: options[macroName]
- },
- fix(fixer) {
- return fixer.replaceText(node.id, options[macroName])
- }
- }
- ]
- })
- }
- }
- }
- })
- }
- }
|