Port changes to the new template parser

This commit is contained in:
skirtle 2023-12-31 01:36:38 +00:00
parent 6014976d00
commit 63f96a2ace
3 changed files with 35 additions and 11 deletions

View File

@ -3905,10 +3905,9 @@ exports[`compiler: parse > Errors > X_DIRECTIVE_SHORTHAND_NO_ARGUMENT > <div #="
"offset": 5, "offset": 5,
}, },
}, },
"modifiers": [ "modifiers": [],
"",
],
"name": "slot", "name": "slot",
"rawName": "#",
"type": 7, "type": 7,
}, },
], ],
@ -3936,6 +3935,7 @@ exports[`compiler: parse > Errors > X_DIRECTIVE_SHORTHAND_NO_ARGUMENT > <div #="
"offset": 0, "offset": 0,
}, },
}, },
"source": "<div #="obj" />",
"temps": 0, "temps": 0,
"type": 0, "type": 0,
} }
@ -3999,10 +3999,10 @@ exports[`compiler: parse > Errors > X_DIRECTIVE_SHORTHAND_NO_ARGUMENT > <div .="
}, },
}, },
"modifiers": [ "modifiers": [
"",
"prop", "prop",
], ],
"name": "bind", "name": "bind",
"rawName": ".",
"type": 7, "type": 7,
}, },
], ],
@ -4030,6 +4030,7 @@ exports[`compiler: parse > Errors > X_DIRECTIVE_SHORTHAND_NO_ARGUMENT > <div .="
"offset": 0, "offset": 0,
}, },
}, },
"source": "<div .="obj" />",
"temps": 0, "temps": 0,
"type": 0, "type": 0,
} }
@ -4092,10 +4093,9 @@ exports[`compiler: parse > Errors > X_DIRECTIVE_SHORTHAND_NO_ARGUMENT > <div :="
"offset": 5, "offset": 5,
}, },
}, },
"modifiers": [ "modifiers": [],
"",
],
"name": "bind", "name": "bind",
"rawName": ":",
"type": 7, "type": 7,
}, },
], ],
@ -4123,6 +4123,7 @@ exports[`compiler: parse > Errors > X_DIRECTIVE_SHORTHAND_NO_ARGUMENT > <div :="
"offset": 0, "offset": 0,
}, },
}, },
"source": "<div :="obj" />",
"temps": 0, "temps": 0,
"type": 0, "type": 0,
} }
@ -4185,10 +4186,9 @@ exports[`compiler: parse > Errors > X_DIRECTIVE_SHORTHAND_NO_ARGUMENT > <div @="
"offset": 5, "offset": 5,
}, },
}, },
"modifiers": [ "modifiers": [],
"",
],
"name": "on", "name": "on",
"rawName": "@",
"type": 7, "type": 7,
}, },
], ],
@ -4216,6 +4216,7 @@ exports[`compiler: parse > Errors > X_DIRECTIVE_SHORTHAND_NO_ARGUMENT > <div @="
"offset": 0, "offset": 0,
}, },
}, },
"source": "<div @="obj" />",
"temps": 0, "temps": 0,
"type": 0, "type": 0,
} }

View File

@ -2063,6 +2063,9 @@ describe('compiler: parse', () => {
exp: undefined, exp: undefined,
arg: undefined, arg: undefined,
}) })
expect(
`the directive shorthand '#' cannot be used without an argument`,
).toHaveBeenWarned()
}) })
// edge case found in vue-macros where the input is TS or JSX // edge case found in vue-macros where the input is TS or JSX

View File

@ -243,7 +243,21 @@ const tokenizer = new Tokenizer(stack, {
}, },
ondirarg(start, end) { ondirarg(start, end) {
if (start === end) return if (start === end) {
if (__DEV__) {
const currentDir = currentProp as DirectiveNode
if (currentDir.rawName?.length === 1) {
emitWarning(
ErrorCodes.X_DIRECTIVE_SHORTHAND_NO_ARGUMENT,
start - 1,
`the directive shorthand '${currentDir.rawName}' cannot be used without an argument. ` +
`Use v-${currentDir.name} instead or provide an argument.`,
)
}
}
return
}
const arg = getSlice(start, end) const arg = getSlice(start, end)
if (inVPre) { if (inVPre) {
;(currentProp as AttributeNode).name += arg ;(currentProp as AttributeNode).name += arg
@ -1007,6 +1021,12 @@ function emitError(code: ErrorCodes, index: number, message?: string) {
) )
} }
function emitWarning(code: ErrorCodes, index: number, message?: string) {
currentOptions.onWarn(
createCompilerError(code, getLoc(index, index), undefined, message),
)
}
function reset() { function reset() {
tokenizer.reset() tokenizer.reset()
currentOpenTag = null currentOpenTag = null