Skip to content

Commit

Permalink
fix(compiler-sfc): allow declaring variables after defineProps (#7461)
Browse files Browse the repository at this point in the history
* fix(compiler-sfc): allow declaring variables after defineProps

* test(compiler-sfc): test defineProps in multiple variable declaration
  • Loading branch information
huang-julien authored Jan 9, 2023
1 parent 1fa3d95 commit 686c829
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,24 @@ return () => {}
})"
`;

exports[`sfc props transform multiple variable declarations 1`] = `
"import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue"
export default {
props: ['foo'],
setup(__props) {
const bar = 'fish', hello = 'world'
return (_ctx, _cache) => {
return (_openBlock(), _createElementBlock("div", null, _toDisplayString(__props.foo) + " " + _toDisplayString(hello) + " " + _toDisplayString(bar), 1 /* TEXT */))
}
}
}"
`;

exports[`sfc props transform nested scope 1`] = `
"export default {
props: ['foo', 'bar'],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,26 @@ describe('sfc props transform', () => {
})
})

test('multiple variable declarations', () => {
const { content, bindings } = compile(`
<script setup>
const bar = 'fish', { foo } = defineProps(['foo']), hello = 'world'
</script>
<template><div>{{ foo }} {{ hello }} {{ bar }}</div></template>
`)
expect(content).not.toMatch(`const { foo } =`)
expect(content).toMatch(`const bar = 'fish', hello = 'world'`)
expect(content).toMatch(`_toDisplayString(hello)`)
expect(content).toMatch(`_toDisplayString(bar)`)
expect(content).toMatch(`_toDisplayString(__props.foo)`)
assertCode(content)
expect(bindings).toStrictEqual({
foo: BindingTypes.PROPS,
bar: BindingTypes.SETUP_CONST,
hello: BindingTypes.SETUP_CONST
})
})

test('nested scope', () => {
const { content, bindings } = compile(`
<script setup>
Expand Down
3 changes: 1 addition & 2 deletions packages/compiler-sfc/src/compileScript.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1758,8 +1758,7 @@ function walkDeclaration(
registerBinding(bindings, id, bindingType)
} else {
if (isCallOf(init, DEFINE_PROPS)) {
// skip walking props destructure
return
continue
}
if (id.type === 'ObjectPattern') {
walkObjectPattern(id, bindings, isConst, isDefineCall)
Expand Down

0 comments on commit 686c829

Please sign in to comment.