Skip to content

Commit 26a3965

Browse files
committed
support highlighting embedded expressions inside vue directives
1 parent 6e787b5 commit 26a3965

File tree

2 files changed

+168
-36
lines changed

2 files changed

+168
-36
lines changed

vue.YAML-tmLanguage

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -240,17 +240,13 @@ patterns:
240240

241241
repository:
242242

243-
string-entities:
243+
entities:
244244
patterns:
245245
- name: constant.character.entity.html
246246
match: (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)
247247
captures:
248248
'1': {name: punctuation.definition.entity.html}
249249
'3': {name: punctuation.definition.entity.html}
250-
251-
entities:
252-
patterns:
253-
- include: '#string-entities'
254250
- name: invalid.illegal.bad-ampersand.html
255251
match: '&'
256252

@@ -263,7 +259,7 @@ repository:
263259
endCaptures:
264260
'0': {name: punctuation.definition.string.end.html}
265261
patterns:
266-
- include: '#string-entities'
262+
- include: '#entities'
267263

268264
string-single-quoted:
269265
name: string.quoted.single.html
@@ -274,7 +270,38 @@ repository:
274270
endCaptures:
275271
'0': {name: punctuation.definition.string.end.html}
276272
patterns:
277-
- include: '#string-entities'
273+
- include: '#entities'
274+
275+
vue-directive:
276+
name: meta.directive.vue
277+
begin: (?:\b(v-)|(:|@))([a-zA-Z\-]+)(?:\:([a-zA-Z\-]+))?(?:\.([a-zA-Z\-]+))*\s*(=)
278+
end: (?<='|")
279+
captures:
280+
'1': {name: entity.other.attribute-name.html}
281+
'2': {name: punctuation.separator.key-value.html}
282+
'3': {name: entity.other.attribute-name.html}
283+
'4': {name: entity.other.attribute-name.html}
284+
'5': {name: entity.other.attribute-name.html}
285+
'6': {name: punctuation.separator.key-value.html}
286+
patterns:
287+
- name: source.directive.vue
288+
begin: '"'
289+
beginCaptures:
290+
'0': {name: punctuation.definition.string.begin.html}
291+
end: '"'
292+
endCaptures:
293+
'0': {name: punctuation.definition.string.end.html}
294+
patterns:
295+
- include: source.js
296+
- name: source.directive.vue
297+
begin: ''''
298+
beginCaptures:
299+
'0': {name: punctuation.definition.string.begin.html}
300+
end: ''''
301+
endCaptures:
302+
'0': {name: punctuation.definition.string.end.html}
303+
patterns:
304+
- include: source.js
278305

279306
tag-generic-attribute:
280307
name: entity.other.attribute-name.html
@@ -311,10 +338,12 @@ repository:
311338

312339
tag-stuff:
313340
patterns:
341+
- include: '#vue-directive'
314342
- include: '#tag-id-attribute'
315343
- include: '#tag-generic-attribute'
316344
- include: '#string-double-quoted'
317345
- include: '#string-single-quoted'
346+
318347
foldingStartMarker: |-
319348
(?x)
320349
(<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|li|form|dl)\b.*?>
@@ -324,6 +353,7 @@ foldingStartMarker: |-
324353
|\{\{?(if|foreach|capture|literal|foreach|php|section|strip)
325354
|\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/)))
326355
)
356+
327357
foldingStopMarker: |-
328358
(?x)
329359
(</(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|li|form|dl)>
@@ -333,4 +363,5 @@ foldingStopMarker: |-
333363
|\{\{?/(if|foreach|capture|literal|foreach|php|section|strip)
334364
|^[^{]*\}
335365
)
366+
336367
keyEquivalent: ^~H

vue.tmLanguage

Lines changed: 130 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -797,8 +797,23 @@
797797
<key>patterns</key>
798798
<array>
799799
<dict>
800-
<key>include</key>
801-
<string>#string-entities</string>
800+
<key>captures</key>
801+
<dict>
802+
<key>1</key>
803+
<dict>
804+
<key>name</key>
805+
<string>punctuation.definition.entity.html</string>
806+
</dict>
807+
<key>3</key>
808+
<dict>
809+
<key>name</key>
810+
<string>punctuation.definition.entity.html</string>
811+
</dict>
812+
</dict>
813+
<key>match</key>
814+
<string>(&amp;)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)</string>
815+
<key>name</key>
816+
<string>constant.character.entity.html</string>
802817
</dict>
803818
<dict>
804819
<key>match</key>
@@ -836,32 +851,7 @@
836851
<array>
837852
<dict>
838853
<key>include</key>
839-
<string>#string-entities</string>
840-
</dict>
841-
</array>
842-
</dict>
843-
<key>string-entities</key>
844-
<dict>
845-
<key>patterns</key>
846-
<array>
847-
<dict>
848-
<key>captures</key>
849-
<dict>
850-
<key>1</key>
851-
<dict>
852-
<key>name</key>
853-
<string>punctuation.definition.entity.html</string>
854-
</dict>
855-
<key>3</key>
856-
<dict>
857-
<key>name</key>
858-
<string>punctuation.definition.entity.html</string>
859-
</dict>
860-
</dict>
861-
<key>match</key>
862-
<string>(&amp;)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)</string>
863-
<key>name</key>
864-
<string>constant.character.entity.html</string>
854+
<string>#entities</string>
865855
</dict>
866856
</array>
867857
</dict>
@@ -893,7 +883,7 @@
893883
<array>
894884
<dict>
895885
<key>include</key>
896-
<string>#string-entities</string>
886+
<string>#entities</string>
897887
</dict>
898888
</array>
899889
</dict>
@@ -999,6 +989,10 @@
999989
<dict>
1000990
<key>patterns</key>
1001991
<array>
992+
<dict>
993+
<key>include</key>
994+
<string>#vue-directive</string>
995+
</dict>
1002996
<dict>
1003997
<key>include</key>
1004998
<string>#tag-id-attribute</string>
@@ -1017,6 +1011,113 @@
10171011
</dict>
10181012
</array>
10191013
</dict>
1014+
<key>vue-directive</key>
1015+
<dict>
1016+
<key>begin</key>
1017+
<string>(?:\b(v-)|(:|@))([a-zA-Z\-]+)(?:\:([a-zA-Z\-]+))?(?:\.([a-zA-Z\-]+))*\s*(=)</string>
1018+
<key>captures</key>
1019+
<dict>
1020+
<key>1</key>
1021+
<dict>
1022+
<key>name</key>
1023+
<string>entity.other.attribute-name.html</string>
1024+
</dict>
1025+
<key>2</key>
1026+
<dict>
1027+
<key>name</key>
1028+
<string>punctuation.separator.key-value.html</string>
1029+
</dict>
1030+
<key>3</key>
1031+
<dict>
1032+
<key>name</key>
1033+
<string>entity.other.attribute-name.html</string>
1034+
</dict>
1035+
<key>4</key>
1036+
<dict>
1037+
<key>name</key>
1038+
<string>entity.other.attribute-name.html</string>
1039+
</dict>
1040+
<key>5</key>
1041+
<dict>
1042+
<key>name</key>
1043+
<string>entity.other.attribute-name.html</string>
1044+
</dict>
1045+
<key>6</key>
1046+
<dict>
1047+
<key>name</key>
1048+
<string>punctuation.separator.key-value.html</string>
1049+
</dict>
1050+
</dict>
1051+
<key>end</key>
1052+
<string>(?&lt;='|")</string>
1053+
<key>name</key>
1054+
<string>meta.directive.vue</string>
1055+
<key>patterns</key>
1056+
<array>
1057+
<dict>
1058+
<key>begin</key>
1059+
<string>"</string>
1060+
<key>beginCaptures</key>
1061+
<dict>
1062+
<key>0</key>
1063+
<dict>
1064+
<key>name</key>
1065+
<string>punctuation.definition.string.begin.html</string>
1066+
</dict>
1067+
</dict>
1068+
<key>end</key>
1069+
<string>"</string>
1070+
<key>endCaptures</key>
1071+
<dict>
1072+
<key>0</key>
1073+
<dict>
1074+
<key>name</key>
1075+
<string>punctuation.definition.string.end.html</string>
1076+
</dict>
1077+
</dict>
1078+
<key>name</key>
1079+
<string>source.directive.vue</string>
1080+
<key>patterns</key>
1081+
<array>
1082+
<dict>
1083+
<key>include</key>
1084+
<string>source.js</string>
1085+
</dict>
1086+
</array>
1087+
</dict>
1088+
<dict>
1089+
<key>begin</key>
1090+
<string>'</string>
1091+
<key>beginCaptures</key>
1092+
<dict>
1093+
<key>0</key>
1094+
<dict>
1095+
<key>name</key>
1096+
<string>punctuation.definition.string.begin.html</string>
1097+
</dict>
1098+
</dict>
1099+
<key>end</key>
1100+
<string>'</string>
1101+
<key>endCaptures</key>
1102+
<dict>
1103+
<key>0</key>
1104+
<dict>
1105+
<key>name</key>
1106+
<string>punctuation.definition.string.end.html</string>
1107+
</dict>
1108+
</dict>
1109+
<key>name</key>
1110+
<string>source.directive.vue</string>
1111+
<key>patterns</key>
1112+
<array>
1113+
<dict>
1114+
<key>include</key>
1115+
<string>source.js</string>
1116+
</dict>
1117+
</array>
1118+
</dict>
1119+
</array>
1120+
</dict>
10201121
</dict>
10211122
<key>scopeName</key>
10221123
<string>text.html.vue</string>

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy