From: 三咲智子 Kevin Deng Date: Sat, 27 Jan 2024 18:11:05 +0000 (+0800) Subject: feat(compiler-vapor): add error check and simplify for v-if X-Git-Tag: v3.6.0-alpha.1~16^2~649 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e47ae17f9326a4886b4b13700f1f6ffebe74d7f;p=thirdparty%2Fvuejs%2Fcore.git feat(compiler-vapor): add error check and simplify for v-if --- diff --git a/packages/compiler-vapor/src/transforms/vIf.ts b/packages/compiler-vapor/src/transforms/vIf.ts index c8473baa52..a3c69307e9 100644 --- a/packages/compiler-vapor/src/transforms/vIf.ts +++ b/packages/compiler-vapor/src/transforms/vIf.ts @@ -1,9 +1,12 @@ import { ElementTypes, + ErrorCodes, NodeTypes, type RootNode, type TemplateChildNode, type TemplateNode, + createCompilerError, + createSimpleExpression, } from '@vue/compiler-dom' import { type TransformContext, @@ -12,7 +15,6 @@ import { import { type BlockFunctionIRNode, IRNodeTypes, - type IfIRNode, type VaporDirectiveNode, } from '../ir' import { extend } from '@vue/shared' @@ -27,24 +29,29 @@ export function processIf( dir: VaporDirectiveNode, context: TransformContext, ) { - // TODO refactor this - const parentContext = extend({}, context, { - currentScopeIR: context.block, - }) + if (dir.name !== 'else' && (!dir.exp || !dir.exp.content.trim())) { + const loc = dir.exp ? dir.exp.loc : node.loc + context.options.onError( + createCompilerError(ErrorCodes.X_V_IF_NO_EXPRESSION, dir.loc), + ) + dir.exp = createSimpleExpression(`true`, false, loc) + } if (dir.name === 'if') { const id = context.reference() context.dynamic.ghost = true const [branch, onExit] = createIfBranch(node, dir, context) - const operation: IfIRNode = { - type: IRNodeTypes.IF, - id, - loc: dir.loc, - condition: dir.exp!, - positive: branch, + + return () => { + onExit() + context.registerOperation({ + type: IRNodeTypes.IF, + id, + loc: dir.loc, + condition: dir.exp!, + positive: branch, + }) } - parentContext.registerOperation(operation) - return onExit } }