| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /**
- * @fileoverview Prevents duplication of field names.
- * @author Armano
- */
- 'use strict'
- const utils = require('../utils')
- // ------------------------------------------------------------------------------
- // Rule Definition
- // ------------------------------------------------------------------------------
- const GROUP_NAMES = ['props', 'computed', 'data', 'methods']
- module.exports = {
- meta: {
- docs: {
- description: 'disallow duplication of field names',
- category: 'essential',
- url: 'https://github.com/vuejs/eslint-plugin-vue/blob/v4.7.1/docs/rules/no-dupe-keys.md'
- },
- fixable: null, // or "code" or "whitespace"
- schema: [
- {
- type: 'object',
- properties: {
- groups: {
- type: 'array'
- }
- },
- additionalProperties: false
- }
- ]
- },
- create (context) {
- const options = context.options[0] || {}
- const groups = new Set(GROUP_NAMES.concat(options.groups || []))
- // ----------------------------------------------------------------------
- // Public
- // ----------------------------------------------------------------------
- return utils.executeOnVue(context, (obj) => {
- const usedNames = []
- const properties = utils.iterateProperties(obj, groups)
- for (const o of properties) {
- if (usedNames.indexOf(o.name) !== -1) {
- context.report({
- node: o.node,
- message: "Duplicated key '{{name}}'.",
- data: {
- name: o.name
- }
- })
- }
- usedNames.push(o.name)
- }
- })
- }
- }
|