Skip to content

Commit 9fab6bd

Browse files
authored
fix: fix walking program AST when multiple script blocks (#2703)
1 parent 7bd1d9a commit 9fab6bd

File tree

2 files changed

+89
-1
lines changed

2 files changed

+89
-1
lines changed

lib/utils/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1380,7 +1380,7 @@ module.exports = {
13801380
* @param {any[]} args
13811381
*/
13821382
function callVisitor(key, node, ...args) {
1383-
if (visitor[key] && inScriptSetup(node)) {
1383+
if (visitor[key] && (node.type === 'Program' || inScriptSetup(node))) {
13841384
// @ts-expect-error
13851385
visitor[key](node, ...args)
13861386
}

tests/lib/rules/prefer-use-template-ref.js

+88
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,40 @@ tester.run('prefer-use-template-ref', rule, {
263263
})
264264
</script>
265265
`
266+
},
267+
{
268+
filename: 'multiple-scripts-setup-first.vue',
269+
code: `
270+
<template>
271+
<div ref="root" :data-a="A" />
272+
</template>
273+
274+
<script setup>
275+
import { useTemplateRef } from 'vue'
276+
const root = useTemplateRef('root')
277+
</script>
278+
279+
<script>
280+
const A = 'foo'
281+
</script>
282+
`
283+
},
284+
{
285+
filename: 'multiple-scripts-setup-last.vue',
286+
code: `
287+
<template>
288+
<div ref="root" :data-a="A" />
289+
</template>
290+
291+
<script>
292+
const A = 'foo'
293+
</script>
294+
295+
<script setup>
296+
import { useTemplateRef } from 'vue'
297+
const root = useTemplateRef('root')
298+
</script>
299+
`
266300
}
267301
],
268302
invalid: [
@@ -420,6 +454,60 @@ tester.run('prefer-use-template-ref', rule, {
420454
column: 28
421455
}
422456
]
457+
},
458+
{
459+
filename: 'multiple-scripts-setup-first.vue',
460+
code: `
461+
<template>
462+
<div ref="root" :data-a="A" />
463+
</template>
464+
465+
<script setup>
466+
import { ref } from 'vue'
467+
const root = ref()
468+
</script>
469+
470+
<script>
471+
const A = 'foo'
472+
</script>
473+
`,
474+
errors: [
475+
{
476+
messageId: 'preferUseTemplateRef',
477+
data: {
478+
name: 'ref'
479+
},
480+
line: 8,
481+
column: 20
482+
}
483+
]
484+
},
485+
{
486+
filename: 'multiple-scripts-setup-last.vue',
487+
code: `
488+
<template>
489+
<div ref="root" :data-a="A" />
490+
</template>
491+
492+
<script>
493+
const A = 'foo'
494+
</script>
495+
496+
<script setup>
497+
import { ref } from 'vue'
498+
const root = ref()
499+
</script>
500+
`,
501+
errors: [
502+
{
503+
messageId: 'preferUseTemplateRef',
504+
data: {
505+
name: 'ref'
506+
},
507+
line: 12,
508+
column: 20
509+
}
510+
]
423511
}
424512
]
425513
})

0 commit comments

Comments
 (0)