Skip to content

Commit b0639d7

Browse files
authored
Improve auto-fix for vue/define-macros-order rule (#1863)
* vue/define-macros-order improvements * vue/define-macros-order improvements * Add test for corner case
1 parent 07a7833 commit b0639d7

File tree

2 files changed

+34
-15
lines changed

2 files changed

+34
-15
lines changed

lib/rules/define-macros-order.js

+18-8
Original file line numberDiff line numberDiff line change
@@ -232,13 +232,12 @@ function create(context) {
232232
const targetComment = sourceCode.getTokenAfter(beforeTargetToken, {
233233
includeComments: true
234234
})
235-
const textSpace = getTextBetweenTokens(beforeTargetToken, targetComment)
236235
// make insert text: comments + node + space before target
237236
const textNode = sourceCode.getText(
238237
node,
239238
node.range[0] - nodeComment.range[0]
240239
)
241-
const insertText = textNode + textSpace
240+
const insertText = getInsertText(textNode, target)
242241

243242
return [
244243
fixer.insertTextBefore(targetComment, insertText),
@@ -247,17 +246,28 @@ function create(context) {
247246
}
248247

249248
/**
250-
* @param {ASTNode} tokenBefore
251-
* @param {ASTNode} tokenAfter
249+
* Get result text to insert
250+
* @param {string} textNode
251+
* @param {ASTNode} target
252252
*/
253-
function getTextBetweenTokens(tokenBefore, tokenAfter) {
254-
return sourceCode.text.slice(tokenBefore.range[1], tokenAfter.range[0])
253+
function getInsertText(textNode, target) {
254+
const afterTargetComment = sourceCode.getTokenAfter(target, {
255+
includeComments: true
256+
})
257+
const afterText = sourceCode.text.slice(
258+
target.range[1],
259+
afterTargetComment.range[0]
260+
)
261+
// handle case when a();b() -> b()a();
262+
const invalidResult = !textNode.endsWith(';') && !afterText.includes('\n')
263+
264+
return textNode + afterText + (invalidResult ? ';' : '')
255265
}
256266

257267
/**
258268
* Get position of the beginning of the token's line(or prevToken end if no line)
259-
* @param {ASTNode} token
260-
* @param {ASTNode} prevToken
269+
* @param {ASTNode|Token} token
270+
* @param {ASTNode|Token} prevToken
261271
*/
262272
function getLineStartIndex(token, prevToken) {
263273
// if we have next token on the same line - get index right before that token

tests/lib/rules/define-macros-order.js

+16-7
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,7 @@ tester.run('define-macros-order', rule, {
155155
defineProps({
156156
test: Boolean
157157
})
158-
159158
defineEmits(['update:test'])
160-
161159
console.log('test1')
162160
console.log('test2')
163161
console.log('test3')
@@ -192,7 +190,6 @@ tester.run('define-macros-order', rule, {
192190
defineProps({
193191
test: Boolean
194192
})
195-
196193
defineEmits(['update:test'])
197194
console.log('test1')
198195
</script>
@@ -261,7 +258,6 @@ tester.run('define-macros-order', rule, {
261258
}
262259
263260
const emit = defineEmits<{(e: 'update:test'): void}>()
264-
265261
const props = withDefaults(defineProps<Props>(), {
266262
msg: 'hello',
267263
labels: () => ['one', 'two']
@@ -377,8 +373,7 @@ tester.run('define-macros-order', rule, {
377373
`,
378374
output: `
379375
<script setup>
380-
defineEmits(['update:test'])
381-
const props = defineProps({ test: Boolean }); </script>
376+
defineEmits(['update:test']);const props = defineProps({ test: Boolean }); </script>
382377
`,
383378
options: optionsEmitsFirst,
384379
errors: [
@@ -413,7 +408,6 @@ tester.run('define-macros-order', rule, {
413408
import 'test'
414409
415410
const props = defineProps({ test: Boolean });
416-
417411
defineEmits(['update:test'])
418412
</script>
419413
`,
@@ -423,6 +417,21 @@ tester.run('define-macros-order', rule, {
423417
line: 11
424418
}
425419
]
420+
},
421+
{
422+
filename: 'test.vue',
423+
code: `
424+
<script setup>defineEmits(['update:test']);defineProps({ test: Boolean })</script>
425+
`,
426+
output: `
427+
<script setup>defineProps({ test: Boolean });defineEmits(['update:test']);</script>
428+
`,
429+
errors: [
430+
{
431+
message: message('defineProps'),
432+
line: 2
433+
}
434+
]
426435
}
427436
]
428437
})

0 commit comments

Comments
 (0)