diff --git a/packages/compiler-core/__tests__/transforms/vBind.spec.ts b/packages/compiler-core/__tests__/transforms/vBind.spec.ts index e804d1a1..016efeed 100644 --- a/packages/compiler-core/__tests__/transforms/vBind.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vBind.spec.ts @@ -87,7 +87,7 @@ describe('compiler: transform v-bind', () => { test('should error if no expression', () => { const onError = jest.fn() - parseWithVBind(`
`, { onError }) + parseWithVBind(``, { onError }) expect(onError.mock.calls[0][0]).toMatchObject({ code: ErrorCodes.X_V_BIND_NO_EXPRESSION, loc: { @@ -97,7 +97,7 @@ describe('compiler: transform v-bind', () => { }, end: { line: 1, - column: 12 + column: 16 } } }) diff --git a/packages/compiler-core/__tests__/transforms/vOn.spec.ts b/packages/compiler-core/__tests__/transforms/vOn.spec.ts index 41159d97..713b34be 100644 --- a/packages/compiler-core/__tests__/transforms/vOn.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vOn.spec.ts @@ -103,9 +103,9 @@ describe('compiler: transform v-bind', () => { }) }) - test('should error if no expression', () => { + test('should error if no expression AND no modifier', () => { const onError = jest.fn() - parseWithVOn(``, { onError }) + parseWithVOn(``, { onError }) expect(onError.mock.calls[0][0]).toMatchObject({ code: ErrorCodes.X_V_ON_NO_EXPRESSION, loc: { @@ -115,11 +115,17 @@ describe('compiler: transform v-bind', () => { }, end: { line: 1, - column: 10 + column: 16 } } }) }) + test('should NOT error if no expression but has modifier', () => { + const onError = jest.fn() + parseWithVOn(``, { onError }) + expect(onError).not.toHaveBeenCalled() + }) + test.todo('.once modifier') }) diff --git a/packages/compiler-core/src/transforms/vOn.ts b/packages/compiler-core/src/transforms/vOn.ts index db3b51ee..7d88aa7c 100644 --- a/packages/compiler-core/src/transforms/vOn.ts +++ b/packages/compiler-core/src/transforms/vOn.ts @@ -7,8 +7,11 @@ import { isSimpleIdentifier } from '../utils' // 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!