Skip to content

Commit eb0d6d2

Browse files
committed
refactor
1 parent ce38578 commit eb0d6d2

File tree

2 files changed

+70
-44
lines changed

2 files changed

+70
-44
lines changed

Diff for: lib/rules/no-import-compiler-macros.js

+36-32
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ const COMPILER_MACROS = new Set([
88
'defineProps',
99
'defineEmits',
1010
'defineExpose',
11-
'withDefaults'
11+
'withDefaults',
12+
'defineModel',
13+
'defineOptions',
14+
'defineSlots'
1215
])
1316

1417
const VUE_MODULES = new Set(['@vue/runtime-core', '@vue/runtime-dom', 'vue'])
@@ -39,7 +42,7 @@ module.exports = {
3942
schema: [],
4043
messages: {
4144
noImportCompilerMacros:
42-
"'{{name}}' is a compiler macro and no longer needs to be imported from '{{source}}'."
45+
"'{{name}}' is a compiler macro and doesn't need to be imported."
4346
}
4447
},
4548
/**
@@ -53,40 +56,41 @@ module.exports = {
5356
ImportDeclaration(node) {
5457
if (node.specifiers.length === 0) return
5558

56-
if (VUE_MODULES.has(node.source.value)) {
57-
for (const specifier of node.specifiers) {
58-
if (
59-
specifier.type === 'ImportSpecifier' &&
60-
COMPILER_MACROS.has(specifier.imported.name)
61-
) {
62-
context.report({
63-
node: specifier,
64-
messageId: 'noImportCompilerMacros',
65-
data: {
66-
name: specifier.imported.name,
67-
source: node.source.value
68-
},
69-
fix: (fixer) => {
70-
const tokenAfter = sourceCode.getTokenAfter(specifier)
71-
const tokenBefore = sourceCode.getTokenBefore(specifier)
59+
if (!VUE_MODULES.has(node.source.value)) return
7260

73-
const hasCommaAfter = isComma(tokenAfter)
74-
const isFirstSpecifier = isLeftCurlyBrace(tokenBefore)
61+
for (const specifier of node.specifiers) {
62+
if (
63+
specifier.type !== 'ImportSpecifier' ||
64+
!COMPILER_MACROS.has(specifier.imported.name)
65+
) {
66+
continue
67+
}
68+
69+
context.report({
70+
node: specifier,
71+
messageId: 'noImportCompilerMacros',
72+
data: {
73+
name: specifier.imported.name
74+
},
75+
fix: (fixer) => {
76+
const tokenAfter = sourceCode.getTokenAfter(specifier)
77+
const tokenBefore = sourceCode.getTokenBefore(specifier)
7578

76-
const codeStart = hasCommaAfter
77-
? tokenBefore.range[1]
78-
: isFirstSpecifier
79-
? specifier.range[0]
80-
: tokenBefore.range[0]
81-
const codeEnd = hasCommaAfter
82-
? tokenAfter.range[1]
83-
: specifier.range[1]
79+
const hasCommaAfter = isComma(tokenAfter)
80+
const isFirstSpecifier = isLeftCurlyBrace(tokenBefore)
8481

85-
return fixer.removeRange([codeStart, codeEnd])
86-
}
87-
})
82+
const codeStart = hasCommaAfter
83+
? tokenBefore.range[1]
84+
: isFirstSpecifier
85+
? specifier.range[0]
86+
: tokenBefore.range[0]
87+
const codeEnd = hasCommaAfter
88+
? tokenAfter.range[1]
89+
: specifier.range[1]
90+
91+
return fixer.removeRange([codeStart, codeEnd])
8892
}
89-
}
93+
})
9094
}
9195
}
9296
}

Diff for: tests/lib/rules/no-import-compiler-macros.js

+34-12
Original file line numberDiff line numberDiff line change
@@ -56,35 +56,31 @@ tester.run('no-import-compiler-macros', rule, {
5656
{
5757
messageId: 'noImportCompilerMacros',
5858
data: {
59-
name: 'defineProps',
60-
source: 'vue'
59+
name: 'defineProps'
6160
},
6261
line: 3,
6362
column: 26
6463
},
6564
{
6665
messageId: 'noImportCompilerMacros',
6766
data: {
68-
name: 'defineEmits',
69-
source: '@vue/runtime-core'
67+
name: 'defineEmits'
7068
},
7169
line: 4,
7270
column: 16
7371
},
7472
{
7573
messageId: 'noImportCompilerMacros',
7674
data: {
77-
name: 'withDefaults',
78-
source: '@vue/runtime-core'
75+
name: 'withDefaults'
7976
},
8077
line: 4,
8178
column: 34
8279
},
8380
{
8481
messageId: 'noImportCompilerMacros',
8582
data: {
86-
name: 'defineExpose',
87-
source: '@vue/runtime-dom'
83+
name: 'defineExpose'
8884
},
8985
line: 5,
9086
column: 16
@@ -107,22 +103,48 @@ tester.run('no-import-compiler-macros', rule, {
107103
{
108104
messageId: 'noImportCompilerMacros',
109105
data: {
110-
name: 'defineProps',
111-
source: 'vue'
106+
name: 'defineProps'
112107
},
113108
line: 3,
114109
column: 16
115110
},
116111
{
117112
messageId: 'noImportCompilerMacros',
118113
data: {
119-
name: 'withDefaults',
120-
source: 'vue'
114+
name: 'withDefaults'
121115
},
122116
line: 3,
123117
column: 29
124118
}
125119
]
120+
},
121+
{
122+
filename: 'test.vue',
123+
code: `
124+
<script setup lang="ts">
125+
import { ref as refFoo, defineProps as definePropsFoo, type computed } from '@vue/runtime-core'
126+
</script>
127+
`,
128+
output: `
129+
<script setup lang="ts">
130+
import { ref as refFoo, type computed } from '@vue/runtime-core'
131+
</script>
132+
`,
133+
languageOptions: {
134+
parserOptions: {
135+
parser: require.resolve('@typescript-eslint/parser')
136+
}
137+
},
138+
errors: [
139+
{
140+
messageId: 'noImportCompilerMacros',
141+
data: {
142+
name: 'defineProps'
143+
},
144+
line: 3,
145+
column: 31
146+
}
147+
]
126148
}
127149
]
128150
})

0 commit comments

Comments
 (0)