Skip to content
5 changes: 5 additions & 0 deletions .changeset/fresh-taxis-glow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'eslint-plugin-vue': minor
---

Changed `vue/valid-define-options` to allow local literal constant references
8 changes: 7 additions & 1 deletion lib/rules/valid-define-options.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,13 @@ module.exports = {
(def) =>
def.type !== 'ImportBinding' &&
utils.inRange(scriptSetup.range, def.name) &&
!utils.inRange(defineOptions.range, def.name)
!utils.inRange(defineOptions.range, def.name) &&
!(
def.type === 'Variable' &&
def.parent.kind === 'const' &&
def.node.init &&
def.node.init.type === 'Literal'
)
)
) {
if (utils.withinTypeNode(node)) {
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