From 5add3e073223c94ba2ae0a405625500485bd1b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Fri, 27 Oct 2023 16:11:10 +0800 Subject: [PATCH] fix(compiler-core): fix variable naming conflicts using priority --- .../__snapshots__/transformExpressions.spec.ts.snap | 4 ++-- .../__tests__/transforms/transformExpressions.spec.ts | 9 ++++++--- .../compiler-core/src/transforms/transformExpression.ts | 2 ++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/compiler-core/__tests__/transforms/__snapshots__/transformExpressions.spec.ts.snap b/packages/compiler-core/__tests__/transforms/__snapshots__/transformExpressions.spec.ts.snap index c72e0229832..504c866e128 100644 --- a/packages/compiler-core/__tests__/transforms/__snapshots__/transformExpressions.spec.ts.snap +++ b/packages/compiler-core/__tests__/transforms/__snapshots__/transformExpressions.spec.ts.snap @@ -2,7 +2,7 @@ exports[`compiler: expression transform > bindingMetadata > inline mode 1`] = ` "(_ctx, _cache) => { - return (_openBlock(), _createElementBlock(\\"div\\", null, _toDisplayString(__props.props) + \\" \\" + _toDisplayString(_unref(setup)) + \\" \\" + _toDisplayString(setupConst) + \\" \\" + _toDisplayString(_ctx.data) + \\" \\" + _toDisplayString(_ctx.options), 1 /* TEXT */)) + return (_openBlock(), _createElementBlock(\\"div\\", null, _toDisplayString(__props.props) + \\" \\" + _toDisplayString(_unref(setup)) + \\" \\" + _toDisplayString(setupConst) + \\" \\" + _toDisplayString(_ctx.data) + \\" \\" + _toDisplayString(_ctx.options) + \\" \\" + _toDisplayString(isNaN.value), 1 /* TEXT */)) }" `; @@ -10,6 +10,6 @@ exports[`compiler: expression transform > bindingMetadata > non-inline mode 1`] "const { toDisplayString: _toDisplayString, openBlock: _openBlock, createElementBlock: _createElementBlock } = Vue return function render(_ctx, _cache, $props, $setup, $data, $options) { - return (_openBlock(), _createElementBlock(\\"div\\", null, _toDisplayString($props.props) + \\" \\" + _toDisplayString($setup.setup) + \\" \\" + _toDisplayString($data.data) + \\" \\" + _toDisplayString($options.options), 1 /* TEXT */)) + return (_openBlock(), _createElementBlock(\\"div\\", null, _toDisplayString($props.props) + \\" \\" + _toDisplayString($setup.setup) + \\" \\" + _toDisplayString($data.data) + \\" \\" + _toDisplayString($options.options) + \\" \\" + _toDisplayString($setup.isNaN), 1 /* TEXT */)) }" `; diff --git a/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts b/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts index 686794c23ab..f8b82396b08 100644 --- a/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts +++ b/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts @@ -506,7 +506,8 @@ describe('compiler: expression transform', () => { data: BindingTypes.DATA, options: BindingTypes.OPTIONS, reactive: BindingTypes.SETUP_REACTIVE_CONST, - literal: BindingTypes.LITERAL_CONST + literal: BindingTypes.LITERAL_CONST, + isNaN: BindingTypes.SETUP_REF } function compileWithBindingMetadata( @@ -522,10 +523,11 @@ describe('compiler: expression transform', () => { test('non-inline mode', () => { const { code } = compileWithBindingMetadata( - `
{{ props }} {{ setup }} {{ data }} {{ options }}
` + `
{{ props }} {{ setup }} {{ data }} {{ options }} {{ isNaN }}
` ) expect(code).toMatch(`$props.props`) expect(code).toMatch(`$setup.setup`) + expect(code).toMatch(`$setup.isNaN`) expect(code).toMatch(`$data.data`) expect(code).toMatch(`$options.options`) expect(code).toMatch(`_ctx, _cache, $props, $setup, $data, $options`) @@ -534,7 +536,7 @@ describe('compiler: expression transform', () => { test('inline mode', () => { const { code } = compileWithBindingMetadata( - `
{{ props }} {{ setup }} {{ setupConst }} {{ data }} {{ options }}
`, + `
{{ props }} {{ setup }} {{ setupConst }} {{ data }} {{ options }} {{ isNaN }}
`, { inline: true } ) expect(code).toMatch(`__props.props`) @@ -542,6 +544,7 @@ describe('compiler: expression transform', () => { expect(code).toMatch(`_toDisplayString(setupConst)`) expect(code).toMatch(`_ctx.data`) expect(code).toMatch(`_ctx.options`) + expect(code).toMatch(`isNaN.value`) expect(code).toMatchSnapshot() }) diff --git a/packages/compiler-core/src/transforms/transformExpression.ts b/packages/compiler-core/src/transforms/transformExpression.ts index eab6b237f13..51420fc1746 100644 --- a/packages/compiler-core/src/transforms/transformExpression.ts +++ b/packages/compiler-core/src/transforms/transformExpression.ts @@ -240,6 +240,8 @@ export function processExpression( } else { node.constType = ConstantTypes.CAN_HOIST } + } else if (isAllowedGlobal && bindingMetadata[rawExp]) { + node.content = rewriteIdentifier(rawExp) } return node }