Skip to content

Commit 46436c0

Browse files
committed
Implement rule
1 parent 0cc4d09 commit 46436c0

File tree

2 files changed

+95
-50
lines changed

2 files changed

+95
-50
lines changed

lib/rules/no-extra-space-between-attributes.js

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
*/
55
'use strict'
66

7+
// ------------------------------------------------------------------------------
8+
// Requirements
9+
// ------------------------------------------------------------------------------
10+
11+
const utils = require('../utils')
12+
713
// ------------------------------------------------------------------------------
814
// Rule Definition
915
// ------------------------------------------------------------------------------
@@ -21,21 +27,34 @@ module.exports = {
2127
]
2228
},
2329

30+
/**
31+
* @param {RuleContext} context - The rule context.
32+
* @returns {Object} AST event handlers.
33+
*/
2434
create (context) {
25-
// variables should be defined here
26-
27-
// ----------------------------------------------------------------------
28-
// Helpers
29-
// ----------------------------------------------------------------------
30-
31-
// any helper functions should go here or else delete this section
35+
const sourceCode = context.getSourceCode()
3236

3337
// ----------------------------------------------------------------------
3438
// Public
3539
// ----------------------------------------------------------------------
3640

37-
return {
38-
// give me methods
39-
}
41+
utils.registerTemplateBodyVisitor(context, {
42+
VStartTag (node) {
43+
const text = sourceCode.getText(node)
44+
const newText = text
45+
.replace(/([^\r\n\t\s])([ \t]+)/g, '$1 ')
46+
.replace(/([ \t]*)([\r\n]+)/, '$2')
47+
if (text !== newText) {
48+
context.report({
49+
node,
50+
loc: node.loc,
51+
message: 'Extra whitespace detected.',
52+
fix: (fixer) => fixer.replaceText(node, newText)
53+
})
54+
}
55+
}
56+
})
57+
58+
return { }
4059
}
4160
}

tests/lib/rules/no-extra-space-between-attributes.js

Lines changed: 66 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,39 @@ ruleTester.run('no-extra-space-between-attributes', rule, {
2424
valid: [
2525
{
2626
filename: 'test.vue',
27-
code: `
28-
<template>
29-
<div></div>
30-
<div />
31-
<div class="foo"></div>
32-
<div class="foo" @click="bar"></div>
33-
<div class="foo"></div>
34-
<div class="foo"
35-
:style="foo"></div>
36-
<div class="foo"
37-
:style="foo"
38-
></div>
39-
<div class="foo"
40-
:style="foo" />
41-
</template>
42-
`
27+
code: '<template></template>'
28+
},
29+
{
30+
filename: 'test.vue',
31+
code: '<template><div></div></template>'
32+
},
33+
{
34+
filename: 'test.vue',
35+
code: '<template><div /></template>'
36+
},
37+
{
38+
filename: 'test.vue',
39+
code: '<template><div class="foo"></div></template>'
40+
},
41+
{
42+
filename: 'test.vue',
43+
code: '<template><div class="foo" @click="bar"></div></template>'
44+
},
45+
{
46+
filename: 'test.vue',
47+
code: '<template><div class="foo"\n :style="foo"></div></template>'
48+
},
49+
{
50+
filename: 'test.vue',
51+
code: '<template><div class="foo"\n :style="foo"\n ></div></template>'
52+
},
53+
{
54+
filename: 'test.vue',
55+
code: '<template><div class="foo"\n :style="foo" /></template>'
56+
},
57+
{
58+
filename: 'test.vue',
59+
code: '<template><div class="foo"\n :style="foo"\n /></template>'
4360
}
4461
],
4562

@@ -49,57 +66,66 @@ ruleTester.run('no-extra-space-between-attributes', rule, {
4966
output: '<template><div /></template>',
5067
errors: [{
5168
message: 'Extra whitespace detected.',
52-
type: 'VText'
69+
type: 'VStartTag'
5370
}]
5471
},
5572
{
5673
code: '<template><div class="foo" /></template>',
5774
output: '<template><div class="foo" /></template>',
58-
errors: [{
59-
message: 'Extra whitespace detected.',
60-
type: 'VText'
61-
}, {
62-
message: 'Extra whitespace detected.',
63-
type: 'VText'
64-
}]
75+
errors: [
76+
// {
77+
// message: 'Extra whitespace detected.',
78+
// type: 'VStartTag'
79+
// },
80+
{
81+
message: 'Extra whitespace detected.',
82+
type: 'VStartTag'
83+
}
84+
]
6585
},
6686
{
6787
code: '<template><div :class="foo" /></template>',
6888
output: '<template><div :class="foo" /></template>',
69-
errors: [{
70-
message: 'Extra whitespace detected.',
71-
type: 'VText'
72-
}, {
73-
message: 'Extra whitespace detected.',
74-
type: 'VText'
75-
}]
89+
errors: [
90+
// {
91+
// message: 'Extra whitespace detected.',
92+
// type: 'VStartTag'
93+
// },
94+
{
95+
message: 'Extra whitespace detected.',
96+
type: 'VStartTag'
97+
}
98+
]
7699
},
77100
{
78101
code: '<template><div foo="" class="foo" /></template>',
79102
output: '<template><div foo="" class="foo" /></template>',
80103
errors: [{
81104
message: 'Extra whitespace detected.',
82-
type: 'VText'
105+
type: 'VStartTag'
83106
}]
84107
},
85108
{
86109
code: '<template><div v-foo="" class="foo" /></template>',
87110
output: '<template><div v-foo="" class="foo" /></template>',
88111
errors: [{
89112
message: 'Extra whitespace detected.',
90-
type: 'VText'
113+
type: 'VStartTag'
91114
}]
92115
},
93116
{
94117
code: '<template><div v-foo="" \n class="foo" /></template>',
95118
output: '<template><div v-foo=""\n class="foo" /></template>',
96-
errors: [{
97-
message: 'Extra whitespace detected.',
98-
type: 'VText'
99-
}, {
100-
message: 'Extra whitespace detected.',
101-
type: 'VText'
102-
}]
119+
errors: [
120+
// {
121+
// message: 'Extra whitespace detected.',
122+
// type: 'VStartTag'
123+
// },
124+
{
125+
message: 'Extra whitespace detected.',
126+
type: 'VStartTag'
127+
}
128+
]
103129
}
104130
]
105131
})

0 commit comments

Comments
 (0)