From ff10e775078f4b451a40995facb7363e9f8553ac Mon Sep 17 00:00:00 2001 From: sunxinyu Date: Thu, 10 Nov 2022 17:26:11 +0800 Subject: [PATCH] feat: rule fixer for require-name-property --- lib/rules/require-name-property.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/rules/require-name-property.js b/lib/rules/require-name-property.js index d4052f153..99ff3b01d 100644 --- a/lib/rules/require-name-property.js +++ b/lib/rules/require-name-property.js @@ -4,6 +4,7 @@ */ 'use strict' +const path = require('path') const utils = require('../utils') const { getVueComponentDefinitionType } = require('../utils') @@ -27,7 +28,8 @@ module.exports = { categories: undefined, url: 'https://eslint.vuejs.org/rules/require-name-property.html' }, - fixable: null, + fixable: 'whitespace', + hasSuggestions: true, schema: [] }, /** @param {RuleContext} context */ @@ -47,7 +49,23 @@ module.exports = { context.report({ node: component, - message: 'Required name property is not set.' + message: 'Required name property is not set.', + fix: (fixer) => { + const extension = path.extname(context.getFilename()) + const filename = path.basename(context.getFilename(), extension) + // fix only when property is not empty + if (component.properties.length > 0) { + const startColumn = component.properties[0].loc.start.column + // insert name property before the first property + return fixer.insertTextBefore( + component.properties[0], + `name: '${filename}',\n${Array.from({ + length: startColumn + 1 + }).join(' ')}` + ) + } + return null + } }) }) }