}"
`;
+exports[`SFC compile <script setup> > defineProps/defineEmits in multi-variable declaration fix #7422 1`] = `
+"export default {
+ props: ['item'],
+ emits: ['foo'],
+ setup(__props, { expose, emit: emits }) {
+ expose();
+
+const props = __props;
+
+ const a = 0,
+ b = 0;
+
+return { props, emits, a, b }
+}
+
+}"
+`;
+
exports[`SFC compile <script setup> > dev mode import usage check > TS annotations 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { Foo, Bar, Baz, Qux, Fred } from './x'
expect(content).toMatch(`emits: ['a'],`)
})
+ // #7422
+ test('defineProps/defineEmits in multi-variable declaration fix #7422', () => {
+ const { content } = compile(`
+ <script setup>
+ const props = defineProps(['item']),
+ emits = defineEmits(['foo']),
+ a = 0,
+ b = 0;
+ </script>
+ `)
+ assertCode(content)
+ expect(content).toMatch(`props: ['item'],`)
+ expect(content).toMatch(`emits: ['foo'],`)
+ expect(content).toMatch(`const a = 0,`)
+ expect(content).toMatch(`b = 0;`)
+ })
+
test('defineProps/defineEmits in multi-variable declaration (full removal)', () => {
const { content } = compile(`
<script setup>
if (node.type === 'VariableDeclaration' && !node.declare) {
const total = node.declarations.length
let left = total
+ let lastNonRemoved: number | undefined
+
for (let i = 0; i < total; i++) {
const decl = node.declarations[i]
const init = decl.init && unwrapTSNode(decl.init)
} else {
let start = decl.start! + startOffset
let end = decl.end! + startOffset
- if (i === 0) {
- // first one, locate the start of the next
- end = node.declarations[i + 1].start! + startOffset
+ if (i === total - 1) {
+ // last one, locate the end of the last one that is not removed
+ // if we arrive at this branch, there must have been a
+ // non-removed decl before us, so lastNonRemoved is non-null.
+ start = node.declarations[lastNonRemoved!].end! + startOffset
} else {
- // not first one, locate the end of the prev
- start = node.declarations[i - 1].end! + startOffset
+ // not the last one, locate the start of the next
+ end = node.declarations[i + 1].start! + startOffset
}
s.remove(start, end)
left--
}
+ } else {
+ lastNonRemoved = i
}
}
}