Skip to content

Commit a3c98d8

Browse files
authored
Fix checking for script setup in vue/require-typed-ref (#2427)
1 parent 98e030a commit a3c98d8

File tree

2 files changed

+55
-7
lines changed

2 files changed

+55
-7
lines changed

lib/rules/require-typed-ref.js

+17-7
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,23 @@ module.exports = {
4444
return {}
4545
}
4646

47-
const scriptSetup = utils.getScriptSetupElement(context)
48-
if (
49-
scriptSetup &&
50-
!utils.hasAttribute(scriptSetup, 'lang', 'ts') &&
51-
!utils.hasAttribute(scriptSetup, 'lang', 'typescript')
52-
) {
53-
return {}
47+
if (utils.isVueFile(filename)) {
48+
const sourceCode = context.getSourceCode()
49+
const documentFragment =
50+
sourceCode.parserServices.getDocumentFragment &&
51+
sourceCode.parserServices.getDocumentFragment()
52+
if (!documentFragment) {
53+
return {}
54+
}
55+
const scripts = documentFragment.children.filter(
56+
/** @returns {element is VElement} */
57+
(element) => utils.isVElement(element) && element.name === 'script'
58+
)
59+
if (
60+
scripts.every((script) => !utils.hasAttribute(script, 'lang', 'ts'))
61+
) {
62+
return {}
63+
}
5464
}
5565

5666
const defines = iterateDefineRefs(

tests/lib/rules/require-typed-ref.js

+38
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,20 @@ tester.run('require-typed-ref', rule, {
8686
`,
8787
languageOptions: { parser: require('vue-eslint-parser') }
8888
},
89+
{
90+
filename: 'test.vue',
91+
code: `
92+
<script>
93+
import { ref } from 'vue'
94+
export default {
95+
setup() {
96+
const count = ref()
97+
}
98+
}
99+
</script>
100+
`,
101+
languageOptions: { parser: require('vue-eslint-parser') }
102+
},
89103
{
90104
filename: 'test.js',
91105
code: `
@@ -217,6 +231,30 @@ tester.run('require-typed-ref', rule, {
217231
],
218232
languageOptions: { parser: require('vue-eslint-parser') }
219233
},
234+
{
235+
filename: 'test.vue',
236+
code: `
237+
<script lang="ts">
238+
import { ref } from 'vue'
239+
export default {
240+
setup() {
241+
const count = ref()
242+
}
243+
}
244+
</script>
245+
}
246+
`,
247+
errors: [
248+
{
249+
messageId: 'noType',
250+
line: 6,
251+
column: 29,
252+
endLine: 6,
253+
endColumn: 34
254+
}
255+
],
256+
languageOptions: { parser: require('vue-eslint-parser') }
257+
},
220258
{
221259
filename: 'test.ts',
222260
code: `

0 commit comments

Comments
 (0)