Skip to content

Commit 14e7aa6

Browse files
committed
Add more tests & update message & improve coverage
1 parent f40938e commit 14e7aa6

File tree

2 files changed

+45
-34
lines changed

2 files changed

+45
-34
lines changed

lib/rules/no-multi-spaces.js

+14-4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@ module.exports = {
2626
create (context) {
2727
const sourceCode = context.getSourceCode()
2828

29+
function formatValue (token) {
30+
switch (token.type) {
31+
case 'HTMLSelfClosingTagClose': return '/>'
32+
case 'HTMLTagClose': return '>'
33+
}
34+
35+
return token.value
36+
}
37+
2938
// ----------------------------------------------------------------------
3039
// Public
3140
// ----------------------------------------------------------------------
@@ -44,7 +53,8 @@ module.exports = {
4453

4554
let prevToken = tokens.shift()
4655
for (const token of tokens) {
47-
const text = sourceCode.getText(token, (token.range[0] - prevToken.range[1] + 1), 0)
56+
const length = token.range[0] - prevToken.range[1] + 1
57+
const text = sourceCode.getText(token, length, 0).substring(0, length)
4858

4959
const match = text.match(/([^\r\n\t\s])([ \t]+)([>]?)([\n\r]?)/)
5060
if (!match) {
@@ -61,17 +71,17 @@ module.exports = {
6171
loc: {
6272
start: {
6373
line: prevToken.loc.end.line,
64-
column: prevToken.loc.end.column + requiredSpaces
74+
column: prevToken.loc.end.column
6575
},
6676
end: {
6777
line: prevToken.loc.end.line,
6878
column: prevToken.loc.end.column + spaces
6979
}
7080
},
7181
message: "Multiple spaces found before '{{displayValue}}'.",
72-
fix: (fixer) => fixer.removeRange([prevToken.range[1] + requiredSpaces, prevToken.range[1] + spaces]),
82+
fix: (fixer) => fixer.replaceTextRange([prevToken.range[1], prevToken.range[1] + spaces], requiredSpaces ? ' ' : ''),
7383
data: {
74-
displayValue: ''
84+
displayValue: formatValue(token)
7585
}
7686
})
7787
}

tests/lib/rules/no-multi-spaces.js

+31-30
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ ruleTester.run('no-multi-spaces', rule, {
2626
'<template></template>',
2727
'<template><div /></template>',
2828
'<template><div class="foo"></div></template>',
29+
'<template><div class=" foo " style=" foo "></div></template>',
2930
'<template><div class="foo" @click="bar"></div></template>',
3031
'<template><div class="foo"\n :style="foo"></div></template>',
3132
'<template><div class="foo"\n\t\t\t:style="foo"></div></template>',
@@ -34,14 +35,18 @@ ruleTester.run('no-multi-spaces', rule, {
3435
'<template><div class="foo"\n :style="foo"\n /></template>',
3536
'<template><div>{{ test }}</div></template>',
3637
'<template><div>{{test}}</div></template>',
37-
'<template><div>{{test}}<!-- fooo --></div></template>'
38+
'<template><div>{{test}}<!-- fooo --></div></template>',
39+
'<template><div>{{test}} <!-- fooo --></div></template>',
40+
'<template><div v-for="i in b">{{ i }}</div></template>',
41+
'<template><div v-for=" i in b ">{{ i }}</div></template>',
42+
'<template><div :test="` `"> {{ a }} </div></template>'
3843
],
3944
invalid: [
4045
{
4146
code: '<template><div /></template>',
4247
output: '<template><div /></template>',
4348
errors: [{
44-
message: "Multiple spaces found before ''.",
49+
message: "Multiple spaces found before '/>'.",
4550
type: 'HTMLSelfClosingTagClose'
4651
}]
4752
},
@@ -50,25 +55,25 @@ ruleTester.run('no-multi-spaces', rule, {
5055
output: '<template><div class="foo" /></template>',
5156
errors: [
5257
{
53-
message: "Multiple spaces found before ''.",
58+
message: "Multiple spaces found before 'class'.",
5459
type: 'HTMLIdentifier'
5560
},
5661
{
57-
message: "Multiple spaces found before ''.",
62+
message: "Multiple spaces found before '/>'.",
5863
type: 'HTMLSelfClosingTagClose'
5964
}
6065
]
6166
},
6267
{
6368
code: '<template><div\t\tclass="foo"\t\t/></template>',
64-
output: '<template><div\tclass="foo"\t/></template>',
69+
output: '<template><div class="foo" /></template>',
6570
errors: [
6671
{
67-
message: "Multiple spaces found before ''.",
72+
message: "Multiple spaces found before 'class'.",
6873
type: 'HTMLIdentifier'
6974
},
7075
{
71-
message: "Multiple spaces found before ''.",
76+
message: "Multiple spaces found before '/>'.",
7277
type: 'HTMLSelfClosingTagClose'
7378
}
7479
]
@@ -78,11 +83,11 @@ ruleTester.run('no-multi-spaces', rule, {
7883
output: '<template><div :class="foo" /></template>',
7984
errors: [
8085
{
81-
message: "Multiple spaces found before ''.",
86+
message: "Multiple spaces found before ':class'.",
8287
type: 'HTMLIdentifier'
8388
},
8489
{
85-
message: "Multiple spaces found before ''.",
90+
message: "Multiple spaces found before '/>'.",
8691
type: 'HTMLSelfClosingTagClose'
8792
}
8893
]
@@ -91,23 +96,23 @@ ruleTester.run('no-multi-spaces', rule, {
9196
code: '<template><div :foo="" class="foo" /></template>',
9297
output: '<template><div :foo="" class="foo" /></template>',
9398
errors: [{
94-
message: "Multiple spaces found before ''.",
99+
message: "Multiple spaces found before '/>'.",
95100
type: 'HTMLSelfClosingTagClose'
96101
}]
97102
},
98103
{
99104
code: '<template><div foo="" class="foo" /></template>',
100105
output: '<template><div foo="" class="foo" /></template>',
101106
errors: [{
102-
message: "Multiple spaces found before ''.",
107+
message: "Multiple spaces found before '/>'.",
103108
type: 'HTMLSelfClosingTagClose'
104109
}]
105110
},
106111
{
107112
code: '<template><foo v-foo="" class="foo" /></template>',
108113
output: '<template><foo v-foo="" class="foo" /></template>',
109114
errors: [{
110-
message: "Multiple spaces found before ''.",
115+
message: "Multiple spaces found before '/>'.",
111116
type: 'HTMLSelfClosingTagClose'
112117
}]
113118
},
@@ -116,11 +121,11 @@ ruleTester.run('no-multi-spaces', rule, {
116121
output: '<template><foo v-foo=""\n class="foo" /></template>',
117122
errors: [
118123
{
119-
message: "Multiple spaces found before ''.",
124+
message: "Multiple spaces found before 'class'.",
120125
type: 'HTMLIdentifier'
121126
},
122127
{
123-
message: "Multiple spaces found before ''.",
128+
message: "Multiple spaces found before '/>'.",
124129
type: 'HTMLSelfClosingTagClose'
125130
}
126131
]
@@ -130,47 +135,43 @@ ruleTester.run('no-multi-spaces', rule, {
130135
output: '<template><div>{{ test }}</div></template>',
131136
errors: [
132137
{
133-
message: "Multiple spaces found before ''.",
138+
message: "Multiple spaces found before 'test'.",
134139
type: 'Identifier'
135140
},
136141
{
137-
message: "Multiple spaces found before ''.",
142+
message: "Multiple spaces found before '}}'.",
138143
type: 'VExpressionEnd'
139144
}
140145
]
141146
},
142147
{
143-
code: '<template><div>{{test}} <!-- fooo --></div></template>',
144-
output: '<template><div>{{test}} <!-- fooo --></div></template>',
148+
code: '<template><div ></div></template>',
149+
output: '<template><div ></div></template>',
145150
errors: [
146151
{
147-
message: "Multiple spaces found before ''.",
148-
type: 'HTMLComment'
149-
},
150-
{
151-
message: "Multiple spaces found before ''.",
152-
153-
type: 'HTMLComment'
152+
message: "Multiple spaces found before '>'.",
153+
type: 'HTMLTagClose'
154154
}
155-
] },
155+
]
156+
},
156157
{
157158
code: '<template><div v-for=" i in b ">{{ test }}</div></template>',
158159
output: '<template><div v-for=" i in b ">{{ test }}</div></template>',
159160
errors: [
160161
{
161-
message: "Multiple spaces found before ''.",
162+
message: "Multiple spaces found before 'i'.",
162163
type: 'Identifier'
163164
},
164165
{
165-
message: "Multiple spaces found before ''.",
166+
message: "Multiple spaces found before 'in'.",
166167
type: 'Keyword'
167168
},
168169
{
169-
message: "Multiple spaces found before ''.",
170+
message: "Multiple spaces found before 'b'.",
170171
type: 'Identifier'
171172
},
172173
{
173-
message: "Multiple spaces found before ''.",
174+
message: "Multiple spaces found before '\"'.",
174175
type: 'Punctuator'
175176
}
176177
]

0 commit comments

Comments
 (0)