no-spaces-around-equal-signs-in-attribute.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * @author Yosuke Ota
  3. * issue https://github.com/vuejs/eslint-plugin-vue/issues/460
  4. */
  5. 'use strict'
  6. const utils = require('../utils')
  7. module.exports = {
  8. meta: {
  9. type: 'layout',
  10. docs: {
  11. description: 'disallow spaces around equal signs in attribute',
  12. categories: ['vue3-strongly-recommended', 'strongly-recommended'],
  13. url: 'https://eslint.vuejs.org/rules/no-spaces-around-equal-signs-in-attribute.html'
  14. },
  15. fixable: 'whitespace',
  16. schema: []
  17. },
  18. /** @param {RuleContext} context */
  19. create(context) {
  20. const sourceCode = context.getSourceCode()
  21. return utils.defineTemplateBodyVisitor(context, {
  22. VAttribute(node) {
  23. if (!node.value) {
  24. return
  25. }
  26. /** @type {Range} */
  27. const range = [node.key.range[1], node.value.range[0]]
  28. const eqText = sourceCode.text.slice(range[0], range[1])
  29. const expect = eqText.trim()
  30. if (eqText !== expect) {
  31. context.report({
  32. node: node.key,
  33. loc: {
  34. start: node.key.loc.end,
  35. end: node.value.loc.start
  36. },
  37. message: 'Unexpected spaces found around equal signs.',
  38. data: {},
  39. fix: (fixer) => fixer.replaceTextRange(range, expect)
  40. })
  41. }
  42. }
  43. })
  44. }
  45. }