Skip to content

Commit 23cca94

Browse files
authored
Merge pull request #6 from SWAT-engineering/restore-updated-categories
Restore updated categories (specifically for Rascal syntax highlighting)
2 parents 6842b97 + 0546433 commit 23cca94

File tree

2 files changed

+74
-15
lines changed

2 files changed

+74
-15
lines changed

rascal-textmate-core/src/main/rascal/VSCode.rsc

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,48 @@ int main() {
1818
return 0;
1919
}
2020

21-
RscGrammar getRscGrammar() =
22-
visit (Grammar::grammar(#Module)) {
21+
RscGrammar getRscGrammar() {
22+
Production setCategory(p: prod(_, _, attributes), str category)
23+
= {\tag("category"(_)), *rest} := attributes
24+
? p[attributes = rest + \tag("category"(category))]
25+
: p[attributes = attributes + \tag("category"(category))];
26+
27+
return visit (Grammar::grammar(#Module)) {
28+
2329
// The following mapping is based on:
2430
// - https://github.com/usethesource/rascal/blob/83023f60a6eb9df7a19ccc7a4194b513ac7b7157/src/org/rascalmpl/values/parsetrees/TreeAdapter.java#L44-L59
2531
// - https://github.com/usethesource/rascal-language-servers/blob/752fea3ea09101e5b22ee426b11c5e36db880225/rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/util/SemanticTokenizer.java#L121-L142
32+
// With updates based on:
33+
// - https://github.com/eclipse-lsp4j/lsp4j/blob/f235e91fbe2e45f62e185bbb9f6d21bed48eb2b9/org.eclipse.lsp4j/src/main/java/org/eclipse/lsp4j/Protocol.xtend#L5639-L5695
34+
// - https://github.com/usethesource/rascal-language-servers/blob/88be4a326128da8c81d581c2b918b4927f2185be/rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/util/SemanticTokenizer.java#L134-L152
2635
case \tag("category"("Normal")) => \tag("category"("source"))
27-
case \tag("category"("Type")) => \tag("category"("storage.type"))
36+
case \tag("category"("Type")) => \tag("category"("type")) // Updated (before: storage.type)
2837
case \tag("category"("Identifier")) => \tag("category"("variable"))
2938
case \tag("category"("Variable")) => \tag("category"("variable"))
30-
case \tag("category"("Constant")) => \tag("category"("constant"))
39+
case \tag("category"("Constant")) => \tag("category"("string")) // Updated (before: constant)
3140
case \tag("category"("Comment")) => \tag("category"("comment"))
3241
case \tag("category"("Todo")) => \tag("category"("comment"))
33-
case \tag("category"("Quote")) => \tag("category"("meta.string"))
42+
case \tag("category"("Quote")) => \tag("category"("string")) // Updated (before: meta.string)
3443
case \tag("category"("MetaAmbiguity")) => \tag("category"("invalid"))
3544
case \tag("category"("MetaVariable")) => \tag("category"("variable"))
36-
case \tag("category"("MetaKeyword")) => \tag("category"("keyword.other"))
45+
case \tag("category"("MetaKeyword")) => \tag("category"("keyword")) // Updated (before: keyword.other)
3746
case \tag("category"("MetaSkipped")) => \tag("category"("string"))
38-
case \tag("category"("NonterminalLabel")) => \tag("category"("variable.parameter"))
39-
case \tag("category"("Result")) => \tag("category"("text"))
40-
case \tag("category"("StdOut")) => \tag("category"("text"))
41-
case \tag("category"("StdErr")) => \tag("category"("text"))
42-
};
47+
case \tag("category"("NonterminalLabel")) => \tag("category"("variable")) // Updated (before: variable.parameter)
48+
case \tag("category"("Result")) => \tag("category"("string")) // Updated (before: text)
49+
case \tag("category"("StdOut")) => \tag("category"("string")) // Updated (before: text)
50+
case \tag("category"("StdErr")) => \tag("category"("string")) // Updated (before: text)
51+
52+
// With additional hot-patching as discussed:
53+
// - https://github.com/SWAT-engineering/rascal-textmate/pull/6
54+
case p: prod(label("integer", sort("Literal")), _, _) => setCategory(p, "constant.numeric")
55+
case p: prod(label("real", sort("Literal")), _, _) => setCategory(p, "constant.numeric")
56+
case p: prod(label("rational", sort("Literal")), _, _) => setCategory(p, "constant.numeric")
57+
case p: prod(label("location", sort("Literal")), _, _) => setCategory(p, "markup.underline.link")
58+
case p: prod(label("regExp", sort("Literal")), _, _) => setCategory(p, "string.regexp")
59+
case p: prod(lex("StringConstant"), _, _) => setCategory(p, "string.quoted.double")
60+
case p: prod(lex("CaseInsensitiveStringConstant"), _, _) => setCategory(p, "string.quoted.single")
61+
case p: prod(lex("PreStringChars"), _, _) => setCategory(p, "string.interpolated")
62+
case p: prod(lex("MidStringChars"), _, _) => setCategory(p, "string.interpolated")
63+
case p: prod(lex("PostStringChars"), _, _) => setCategory(p, "string.interpolated")
64+
};
65+
}

vscode-extension/syntaxes/rascal.tmLanguage.json

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,24 @@
99
}
1010
}
1111
},
12+
"prod(label(\"rational\",sort(\"Literal\")),[label(\"rationalLiteral\",lex(\"RationalLiteral\"))],{tag(\"category\"(\"constant.numeric\"))})": {
13+
"match": "((?:[1-9][0-9]*?r[0-9](?:[0-9]*?(?!(?:[0-9]|[A-Z]|\\_|[a-z]))))|(?:[0-9][0-9]*?r))",
14+
"name": "prod(label(\"rational\",sort(\"Literal\")),[label(\"rationalLiteral\",lex(\"RationalLiteral\"))],{tag(\"category\"(\"constant.numeric\"))})",
15+
"captures": {
16+
"1": {
17+
"name": "constant.numeric"
18+
}
19+
}
20+
},
21+
"prod(label(\"integer\",sort(\"Literal\")),[label(\"integerLiteral\",sort(\"IntegerLiteral\"))],{tag(\"category\"(\"constant.numeric\"))})": {
22+
"match": "((?:0(?:[0-7]+?(?!(?:[0-9]|[A-Z]|\\_|[a-z]))))|(?:(?:[1-9](?:[0-9]*?(?!(?:[0-9]|[A-Z]|\\_|[a-z]))))|(?:(?:\\b0\\b)(?!(?:[0-9]|[A-Z]|\\_|[a-z]))))|(?:0(?:X|x)(?:(?:[0-9]|[A-F]|[a-f])+?(?!(?:[0-9]|[A-Z]|\\_|[a-z])))))",
23+
"name": "prod(label(\"integer\",sort(\"Literal\")),[label(\"integerLiteral\",sort(\"IntegerLiteral\"))],{tag(\"category\"(\"constant.numeric\"))})",
24+
"captures": {
25+
"1": {
26+
"name": "constant.numeric"
27+
}
28+
}
29+
},
1230
"prod(lex(\"keywords\"),[alt({lit(\"lexical\"),lit(\"loc\"),lit(\"if\"),lit(\"assoc\"),lit(\"test\"),lit(\"lrel\"),lit(\"throws\"),lit(\"clear\"),lit(\"module\"),lit(\"any\"),lit(\"int\"),lit(\"quit\"),lit(\"o\"),lit(\"anno\"),lit(\"true\"),lit(\"public\"),lit(\"keyword\"),lit(\"for\"),lit(\"tuple\"),lit(\"bracket\"),lit(\"bag\"),lit(\"it\"),lit(\"visit\"),lit(\"do\"),lit(\"data\"),lit(\"layout\"),lit(\"bool\"),lit(\"edit\"),lit(\"join\"),lit(\"is\"),lit(\"import\"),lit(\"view\"),lit(\"in\"),lit(\"rat\"),lit(\"modules\"),lit(\"continue\"),lit(\"left\"),lit(\"num\"),lit(\"assert\"),lit(\"throw\"),lit(\"one\"),lit(\"help\"),lit(\"default\"),lit(\"all\"),lit(\"global\"),lit(\"syntax\"),lit(\"false\"),lit(\"finally\"),lit(\"private\"),lit(\"mod\"),lit(\"java\"),lit(\"node\"),lit(\"start\"),lit(\"set\"),lit(\"right\"),lit(\"variable\"),lit(\"map\"),lit(\"10\"),lit(\"on\"),lit(\"break\"),lit(\"dynamic\"),lit(\"solve\"),lit(\"fail\"),lit(\"unimport\"),lit(\"outermost\"),lit(\"real\"),lit(\"list\"),lit(\"insert\"),lit(\"innermost\"),lit(\"declarations\"),lit(\"else\"),lit(\"rel\"),lit(\"function\"),lit(\"notin\"),lit(\"filter\"),lit(\"datetime\"),lit(\"catch\"),lit(\"try\"),lit(\"renaming\"),lit(\"tag\"),lit(\"has\"),lit(\"Z\"),lit(\"when\"),lit(\"type\"),lit(\"append\"),lit(\"extend\"),lit(\"switch\"),lit(\"void\"),lit(\"history\"),lit(\"T\"),lit(\"while\"),lit(\"str\"),lit(\"value\"),lit(\"undeclare\"),lit(\"case\"),lit(\"alias\"),lit(\"return\"),lit(\"0\")})],{tag(\"category\"(\"keyword.control\"))})": {
1331
"match": "((?:\\blexical\\b)|(?:\\bloc\\b)|(?:\\bif\\b)|(?:\\bassoc\\b)|(?:\\btest\\b)|(?:\\blrel\\b)|(?:\\bthrows\\b)|(?:\\bclear\\b)|(?:\\bmodule\\b)|(?:\\bany\\b)|(?:\\bint\\b)|(?:\\bquit\\b)|(?:\\bo\\b)|(?:\\banno\\b)|(?:\\btrue\\b)|(?:\\bpublic\\b)|(?:\\bkeyword\\b)|(?:\\bfor\\b)|(?:\\btuple\\b)|(?:\\bbracket\\b)|(?:\\bbag\\b)|(?:\\bit\\b)|(?:\\bvisit\\b)|(?:\\bdo\\b)|(?:\\bdata\\b)|(?:\\blayout\\b)|(?:\\bbool\\b)|(?:\\bedit\\b)|(?:\\bjoin\\b)|(?:\\bis\\b)|(?:\\bimport\\b)|(?:\\bview\\b)|(?:\\bin\\b)|(?:\\brat\\b)|(?:\\bmodules\\b)|(?:\\bcontinue\\b)|(?:\\bleft\\b)|(?:\\bnum\\b)|(?:\\bassert\\b)|(?:\\bthrow\\b)|(?:\\bone\\b)|(?:\\bhelp\\b)|(?:\\bdefault\\b)|(?:\\ball\\b)|(?:\\bglobal\\b)|(?:\\bsyntax\\b)|(?:\\bfalse\\b)|(?:\\bfinally\\b)|(?:\\bprivate\\b)|(?:\\bmod\\b)|(?:\\bjava\\b)|(?:\\bnode\\b)|(?:\\bstart\\b)|(?:\\bset\\b)|(?:\\bright\\b)|(?:\\bvariable\\b)|(?:\\bmap\\b)|(?:\\b10\\b)|(?:\\bon\\b)|(?:\\bbreak\\b)|(?:\\bdynamic\\b)|(?:\\bsolve\\b)|(?:\\bfail\\b)|(?:\\bunimport\\b)|(?:\\boutermost\\b)|(?:\\breal\\b)|(?:\\blist\\b)|(?:\\binsert\\b)|(?:\\binnermost\\b)|(?:\\bdeclarations\\b)|(?:\\belse\\b)|(?:\\brel\\b)|(?:\\bfunction\\b)|(?:\\bnotin\\b)|(?:\\bfilter\\b)|(?:\\bdatetime\\b)|(?:\\bcatch\\b)|(?:\\btry\\b)|(?:\\brenaming\\b)|(?:\\btag\\b)|(?:\\bhas\\b)|(?:\\bZ\\b)|(?:\\bwhen\\b)|(?:\\btype\\b)|(?:\\bappend\\b)|(?:\\bextend\\b)|(?:\\bswitch\\b)|(?:\\bvoid\\b)|(?:\\bhistory\\b)|(?:\\bT\\b)|(?:\\bwhile\\b)|(?:\\bstr\\b)|(?:\\bvalue\\b)|(?:\\bundeclare\\b)|(?:\\bcase\\b)|(?:\\balias\\b)|(?:\\breturn\\b)|(?:\\b0\\b))",
1432
"name": "prod(lex(\"keywords\"),[alt({lit(\"lexical\"),lit(\"loc\"),lit(\"if\"),lit(\"assoc\"),lit(\"test\"),lit(\"lrel\"),lit(\"throws\"),lit(\"clear\"),lit(\"module\"),lit(\"any\"),lit(\"int\"),lit(\"quit\"),lit(\"o\"),lit(\"anno\"),lit(\"true\"),lit(\"public\"),lit(\"keyword\"),lit(\"for\"),lit(\"tuple\"),lit(\"bracket\"),lit(\"bag\"),lit(\"it\"),lit(\"visit\"),lit(\"do\"),lit(\"data\"),lit(\"layout\"),lit(\"bool\"),lit(\"edit\"),lit(\"join\"),lit(\"is\"),lit(\"import\"),lit(\"view\"),lit(\"in\"),lit(\"rat\"),lit(\"modules\"),lit(\"continue\"),lit(\"left\"),lit(\"num\"),lit(\"assert\"),lit(\"throw\"),lit(\"one\"),lit(\"help\"),lit(\"default\"),lit(\"all\"),lit(\"global\"),lit(\"syntax\"),lit(\"false\"),lit(\"finally\"),lit(\"private\"),lit(\"mod\"),lit(\"java\"),lit(\"node\"),lit(\"start\"),lit(\"set\"),lit(\"right\"),lit(\"variable\"),lit(\"map\"),lit(\"10\"),lit(\"on\"),lit(\"break\"),lit(\"dynamic\"),lit(\"solve\"),lit(\"fail\"),lit(\"unimport\"),lit(\"outermost\"),lit(\"real\"),lit(\"list\"),lit(\"insert\"),lit(\"innermost\"),lit(\"declarations\"),lit(\"else\"),lit(\"rel\"),lit(\"function\"),lit(\"notin\"),lit(\"filter\"),lit(\"datetime\"),lit(\"catch\"),lit(\"try\"),lit(\"renaming\"),lit(\"tag\"),lit(\"has\"),lit(\"Z\"),lit(\"when\"),lit(\"type\"),lit(\"append\"),lit(\"extend\"),lit(\"switch\"),lit(\"void\"),lit(\"history\"),lit(\"T\"),lit(\"while\"),lit(\"str\"),lit(\"value\"),lit(\"undeclare\"),lit(\"case\"),lit(\"alias\"),lit(\"return\"),lit(\"0\")})],{tag(\"category\"(\"keyword.control\"))})",
@@ -18,6 +36,15 @@
1836
}
1937
}
2038
},
39+
"prod(label(\"real\",sort(\"Literal\")),[label(\"realLiteral\",lex(\"RealLiteral\"))],{tag(\"category\"(\"constant.numeric\"))})": {
40+
"match": "((?:(?:(?<!\\.)(?:\\.))[0-9]+?(?:E|e)(?:\\+|\\-)??[0-9]+?(?:D|F|d|f)??)|(?:[0-9]+?(?:(?:\\.)(?!(?:\\.)))[0-9]*?(?:D|F|d|f)??)|(?:(?:(?<!\\.)(?:\\.))[0-9]+?(?:D|F|d|f)??)|(?:[0-9]+?(?:E|e)(?:\\+|\\-)??[0-9]+?(?:D|F|d|f)??)|(?:[0-9]+?(?:D|F|d|f))|(?:[0-9]+?(?:\\.)[0-9]*?(?:E|e)(?:\\+|\\-)??[0-9]+?(?:D|F|d|f)??))",
41+
"name": "prod(label(\"real\",sort(\"Literal\")),[label(\"realLiteral\",lex(\"RealLiteral\"))],{tag(\"category\"(\"constant.numeric\"))})",
42+
"captures": {
43+
"1": {
44+
"name": "constant.numeric"
45+
}
46+
}
47+
},
2148
"prod(lex(\"delimiters\"),[alt({lit(\"bottom-up-break\"),lit(\")\"),lit(\"\"),lit(\"\\n\"),lit(\"!:=\"),lit(\"\\'\"),lit(\"!=\"),lit(\"\\>=\"),lit(\"://\"),lit(\"non-assoc\"),lit(\"&=\"),lit(\"\\<-\"),lit(\"*=\"),lit(\"+=\"),lit(\"top-down-break\"),lit(\",\"),lit(\"...\"),lit(\"/=\"),lit(\"\"),lit(\"(\"),lit(\"*/\"),lit(\"%\"),lit(\"!\\<\\<\"),lit(\"=\\>\"),lit(\"!\\>\\>\"),lit(\"||\"),lit(\"\\>\\>\"),lit(\"::\"),lit(\"\"),lit(\"&&\"),lit(\"@\"),lit(\":=\"),lit(\"#\"),lit(\"\\<==\\>\"),lit(\"\\\"\"),lit(\"\\<\\<=\"),lit(\"}\"),lit(\"?=\"),lit(\"\\<:\"),lit(\"==\\>\"),lit(\"^\"),lit(\"/*\"),lit(\";\"),lit(\"{\"),lit(\"-=\"),lit(\"$T\")})],{})": {
2249
"match": "(?:(?:bottom\\-up\\-break)|(?:\\))|(?:\\x{226B})|(?:\\n)|(?:\\!\\:\\=)|(?:\\')|(?:\\!\\=)|(?:\\>\\=)|(?:\\:\\/\\/)|(?:non\\-assoc)|(?:\\&\\=)|(?:\\<\\-)|(?:\\*\\=)|(?:\\+\\=)|(?:top\\-down\\-break)|(?:\\,)|(?:\\.\\.\\.)|(?:\\/\\=)|(?:\\x{21E8})|(?:\\()|(?:\\*\\/)|(?:\\%)|(?:\\!\\<\\<)|(?:\\=\\>)|(?:\\!\\>\\>)|(?:\\|\\|)|(?:\\>\\>)|(?:\\:\\:)|(?:\\x{26A0})|(?:\\&\\&)|(?:\\@)|(?:\\:\\=)|(?:\\#)|(?:\\<\\=\\=\\>)|(?:\\\")|(?:\\<\\<\\=)|(?:\\})|(?:\\?\\=)|(?:\\<\\:)|(?:\\=\\=\\>)|(?:\\^)|(?:\\/\\*)|(?:\\;)|(?:\\{)|(?:\\-\\=)|(?:\\$T))",
2350
"name": "prod(lex(\"delimiters\"),[alt({lit(\"bottom-up-break\"),lit(\")\"),lit(\"\"),lit(\"\\n\"),lit(\"!:=\"),lit(\"\\'\"),lit(\"!=\"),lit(\"\\>=\"),lit(\"://\"),lit(\"non-assoc\"),lit(\"&=\"),lit(\"\\<-\"),lit(\"*=\"),lit(\"+=\"),lit(\"top-down-break\"),lit(\",\"),lit(\"...\"),lit(\"/=\"),lit(\"\"),lit(\"(\"),lit(\"*/\"),lit(\"%\"),lit(\"!\\<\\<\"),lit(\"=\\>\"),lit(\"!\\>\\>\"),lit(\"||\"),lit(\"\\>\\>\"),lit(\"::\"),lit(\"\"),lit(\"&&\"),lit(\"@\"),lit(\":=\"),lit(\"#\"),lit(\"\\<==\\>\"),lit(\"\\\"\"),lit(\"\\<\\<=\"),lit(\"}\"),lit(\"?=\"),lit(\"\\<:\"),lit(\"==\\>\"),lit(\"^\"),lit(\"/*\"),lit(\";\"),lit(\"{\"),lit(\"-=\"),lit(\"$T\")})],{})",
@@ -81,19 +108,19 @@
81108
"patterns": [
82109
{
83110
"match": "((?:\\\\)(?:\\x{20}|\\\"|\\'|\\-|\\<|\\>|[\\[-\\]]|b|f|n|r|t))",
84-
"name": "prod(lex(\"Char\"),[lit(\"\\\\\"),\\char-class([range(32,32),range(34,34),range(39,39),range(45,45),range(60,60),range(62,62),range(91,93),range(98,98),range(102,102),range(110,110),range(114,114),range(116,116)])],{tag(\"category\"(\"constant\"))})",
111+
"name": "prod(lex(\"Char\"),[lit(\"\\\\\"),\\char-class([range(32,32),range(34,34),range(39,39),range(45,45),range(60,60),range(62,62),range(91,93),range(98,98),range(102,102),range(110,110),range(114,114),range(116,116)])],{tag(\"category\"(\"string\"))})",
85112
"captures": {
86113
"1": {
87-
"name": "constant"
114+
"name": "string"
88115
}
89116
}
90117
},
91118
{
92119
"match": "((?:(?:\\\\)U(?:(?:\\b10\\b)|(?:(?:\\b0\\b)(?:[0-9]|[A-F]|[a-f])))(?:[0-9]|[A-F]|[a-f])(?:[0-9]|[A-F]|[a-f])(?:[0-9]|[A-F]|[a-f])(?:[0-9]|[A-F]|[a-f]))|(?:(?:\\\\)u(?:[0-9]|[A-F]|[a-f])(?:[0-9]|[A-F]|[a-f])(?:[0-9]|[A-F]|[a-f])(?:[0-9]|[A-F]|[a-f]))|(?:(?:\\\\)a[0-7](?:[0-9]|[A-F]|[a-f])))",
93-
"name": "prod(lex(\"Char\"),[lex(\"UnicodeEscape\")],{tag(\"category\"(\"constant\"))})",
120+
"name": "prod(lex(\"Char\"),[lex(\"UnicodeEscape\")],{tag(\"category\"(\"string\"))})",
94121
"captures": {
95122
"1": {
96-
"name": "constant"
123+
"name": "string"
97124
}
98125
}
99126
}
@@ -106,6 +133,15 @@
106133
{
107134
"include": "#prod(lex(\"delimiters\"),[alt({lit(\"bottom-up-break\"),lit(\")\"),lit(\"\"),lit(\"\\n\"),lit(\"!:=\"),lit(\"\\'\"),lit(\"!=\"),lit(\"\\>=\"),lit(\"://\"),lit(\"non-assoc\"),lit(\"&=\"),lit(\"\\<-\"),lit(\"*=\"),lit(\"+=\"),lit(\"top-down-break\"),lit(\",\"),lit(\"...\"),lit(\"/=\"),lit(\"\"),lit(\"(\"),lit(\"*/\"),lit(\"%\"),lit(\"!\\<\\<\"),lit(\"=\\>\"),lit(\"!\\>\\>\"),lit(\"||\"),lit(\"\\>\\>\"),lit(\"::\"),lit(\"\"),lit(\"&&\"),lit(\"@\"),lit(\":=\"),lit(\"#\"),lit(\"\\<==\\>\"),lit(\"\\\"\"),lit(\"\\<\\<=\"),lit(\"}\"),lit(\"?=\"),lit(\"\\<:\"),lit(\"==\\>\"),lit(\"^\"),lit(\"/*\"),lit(\";\"),lit(\"{\"),lit(\"-=\"),lit(\"$T\")})],{})"
108135
},
136+
{
137+
"include": "#prod(label(\"integer\",sort(\"Literal\")),[label(\"integerLiteral\",sort(\"IntegerLiteral\"))],{tag(\"category\"(\"constant.numeric\"))})"
138+
},
139+
{
140+
"include": "#prod(label(\"real\",sort(\"Literal\")),[label(\"realLiteral\",lex(\"RealLiteral\"))],{tag(\"category\"(\"constant.numeric\"))})"
141+
},
142+
{
143+
"include": "#prod(label(\"rational\",sort(\"Literal\")),[label(\"rationalLiteral\",lex(\"RationalLiteral\"))],{tag(\"category\"(\"constant.numeric\"))})"
144+
},
109145
{
110146
"include": "#lit(\"`\"):lit(\"`\")"
111147
},

0 commit comments

Comments
 (0)