File tree 3 files changed +29
-1
lines changed
3 files changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -1244,6 +1244,27 @@ describe('compiler: parse', () => {
1244
1244
}
1245
1245
} )
1246
1246
} )
1247
+ test ( 'directive with no name' , ( ) => {
1248
+ let errorCode = - 1
1249
+ const ast = baseParse ( '<div v-/>' , {
1250
+ onError : err => {
1251
+ errorCode = err . code as number
1252
+ }
1253
+ } )
1254
+ const directive = ( ast . children [ 0 ] as ElementNode ) . props [ 0 ]
1255
+
1256
+ expect ( errorCode ) . toBe ( ErrorCodes . X_MISSING_DIRECTIVE_NAME )
1257
+ expect ( directive ) . toStrictEqual ( {
1258
+ type : NodeTypes . ATTRIBUTE ,
1259
+ name : 'v-' ,
1260
+ value : undefined ,
1261
+ loc : {
1262
+ start : { offset : 5 , line : 1 , column : 6 } ,
1263
+ end : { offset : 7 , line : 1 , column : 8 } ,
1264
+ source : 'v-'
1265
+ }
1266
+ } )
1267
+ } )
1247
1268
1248
1269
test ( 'v-bind shorthand' , ( ) => {
1249
1270
const ast = baseParse ( '<div :a=b />' )
Original file line number Diff line number Diff line change @@ -67,6 +67,7 @@ export const enum ErrorCodes {
67
67
X_INVALID_END_TAG ,
68
68
X_MISSING_END_TAG ,
69
69
X_MISSING_INTERPOLATION_END ,
70
+ X_MISSING_DIRECTIVE_NAME ,
70
71
X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END ,
71
72
72
73
// transform errors
@@ -143,6 +144,7 @@ export const errorMessages: Record<ErrorCodes, string> = {
143
144
[ ErrorCodes . X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END ] :
144
145
'End bracket for dynamic directive argument was not found. ' +
145
146
'Note that dynamic directive argument cannot contain spaces.' ,
147
+ [ ErrorCodes . X_MISSING_DIRECTIVE_NAME ] : 'Legal directive name was expected.' ,
146
148
147
149
// transform errors
148
150
[ ErrorCodes . X_V_IF_NO_EXPRESSION ] : `v-if/v-else-if is missing expression.` ,
Original file line number Diff line number Diff line change @@ -775,7 +775,7 @@ function parseAttribute(
775
775
}
776
776
const loc = getSelection ( context , start )
777
777
778
- if ( ! context . inVPre && / ^ ( v - | : | \. | @ | # ) / . test ( name ) ) {
778
+ if ( ! context . inVPre && / ^ ( v - [ A - Z a - z 0 - 9 - ] | : | \. | @ | # ) / . test ( name ) ) {
779
779
const match =
780
780
/ (?: ^ v - ( [ a - z 0 - 9 - ] + ) ) ? (?: (?: : | ^ \. | ^ @ | ^ # ) ( \[ [ ^ \] ] + \] | [ ^ \. ] + ) ) ? ( .+ ) ? $ / i. exec (
781
781
name
@@ -888,6 +888,11 @@ function parseAttribute(
888
888
}
889
889
}
890
890
891
+ // missing directive name or illegal directive name
892
+ if ( ! context . inVPre && startsWith ( name , 'v-' ) ) {
893
+ emitError ( context , ErrorCodes . X_MISSING_DIRECTIVE_NAME )
894
+ }
895
+
891
896
return {
892
897
type : NodeTypes . ATTRIBUTE ,
893
898
name,
You can’t perform that action at this time.
0 commit comments