test('should error if no expression', () => {
const onError = jest.fn()
- parseWithVBind(`<div v-bind />`, { onError })
+ parseWithVBind(`<div v-bind:arg />`, { onError })
expect(onError.mock.calls[0][0]).toMatchObject({
code: ErrorCodes.X_V_BIND_NO_EXPRESSION,
loc: {
},
end: {
line: 1,
- column: 12
+ column: 16
}
}
})
})
})
- test('should error if no expression', () => {
+ test('should error if no expression AND no modifier', () => {
const onError = jest.fn()
- parseWithVOn(`<div v-on />`, { onError })
+ parseWithVOn(`<div v-on:click />`, { onError })
expect(onError.mock.calls[0][0]).toMatchObject({
code: ErrorCodes.X_V_ON_NO_EXPRESSION,
loc: {
},
end: {
line: 1,
- column: 10
+ column: 16
}
}
})
})
+ test('should NOT error if no expression but has modifier', () => {
+ const onError = jest.fn()
+ parseWithVOn(`<div v-on:click.prevent />`, { onError })
+ expect(onError).not.toHaveBeenCalled()
+ })
+
test.todo('.once modifier')
})
// v-on without arg is handled directly in ./element.ts due to it affecting
// codegen for the entire props object. This transform here is only for v-on
// *with* args.
-export const transformOn: DirectiveTransform = ({ arg, exp, loc }, context) => {
- if (!exp) {
+export const transformOn: DirectiveTransform = (
+ { arg, exp, loc, modifiers },
+ context
+) => {
+ if (!exp && !modifiers.length) {
context.onError(createCompilerError(ErrorCodes.X_V_ON_NO_EXPRESSION, loc))
}
const { content, children, isStatic, loc: argLoc } = arg!