Skip to content
19 changes: 13 additions & 6 deletions lib/rules/valid-define-options.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,19 @@ module.exports = {
variable &&
variable.references.some((ref) => ref.identifier === node) &&
variable.defs.length > 0 &&
variable.defs.every(
(def) =>
def.type !== 'ImportBinding' &&
utils.inRange(scriptSetup.range, def.name) &&
!utils.inRange(defineOptions.range, def.name)
)
variable.defs.every((def) => {
if (def.type === 'ImportBinding') return false
if (!utils.inRange(scriptSetup.range, def.name)) return false
if (utils.inRange(defineOptions.range, def.name)) return false
if (
def.type === 'Variable' &&
def.parent.kind === 'const' &&
def.node.init &&
def.node.init.type === 'Literal'
)
return false
return true
})
) {
if (utils.withinTypeNode(node)) {
continue
Expand Down
8 changes: 8 additions & 0 deletions tests/lib/rules/valid-define-options.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@ tester.run('valid-define-options', rule, {

defineOptions(def);
</script>`
},
{
filename: 'test.vue',
code: `
<script setup>
const def = 'foo';
defineOptions({ name: def });
</script>`
}
],
invalid: [
Expand Down
Loading