Scala: Updated keywords to support Scala 3 (#3506)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
diff --git a/components/prism-scala.js b/components/prism-scala.js
index 40b96fa..9ba4649 100644
--- a/components/prism-scala.js
+++ b/components/prism-scala.js
@@ -8,7 +8,7 @@ Prism.languages.scala = Prism.languages.extend('java', {
pattern: /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
greedy: true
},
- 'keyword': /<-|=>|\b(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|null|object|override|package|private|protected|return|sealed|self|super|this|throw|trait|try|type|val|var|while|with|yield)\b/,
+ 'keyword': /<-|=>|\b(?:abstract|case|catch|class|def|derives|do|else|enum|extends|extension|final|finally|for|forSome|given|if|implicit|import|infix|inline|lazy|match|new|null|object|opaque|open|override|package|private|protected|return|sealed|self|super|this|throw|trait|transparent|try|type|using|val|var|while|with|yield)\b/,
'number': /\b0x(?:[\da-f]*\.)?[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e\d+)?[dfl]?/i,
'builtin': /\b(?:Any|AnyRef|AnyVal|Boolean|Byte|Char|Double|Float|Int|Long|Nothing|Short|String|Unit)\b/,
'symbol': /'[^\d\s\\]\w*/
diff --git a/components/prism-scala.min.js b/components/prism-scala.min.js
index 1f3db0b..6d7220d 100644
--- a/components/prism-scala.min.js
+++ b/components/prism-scala.min.js
@@ -1 +1 @@
-Prism.languages.scala=Prism.languages.extend("java",{"triple-quoted-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:/<-|=>|\b(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|null|object|override|package|private|protected|return|sealed|self|super|this|throw|trait|try|type|val|var|while|with|yield)\b/,number:/\b0x(?:[\da-f]*\.)?[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e\d+)?[dfl]?/i,builtin:/\b(?:Any|AnyRef|AnyVal|Boolean|Byte|Char|Double|Float|Int|Long|Nothing|Short|String|Unit)\b/,symbol:/'[^\d\s\\]\w*/}),Prism.languages.insertBefore("scala","triple-quoted-string",{"string-interpolation":{pattern:/\b[a-z]\w*(?:"""(?:[^$]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*?"""|"(?:[^$"\r\n]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*")/i,greedy:!0,inside:{id:{pattern:/^\w+/,greedy:!0,alias:"function"},escape:{pattern:/\\\$"|\$[$"]/,greedy:!0,alias:"symbol"},interpolation:{pattern:/\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,greedy:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:Prism.languages.scala}}},string:/[\s\S]+/}}}),delete Prism.languages.scala["class-name"],delete Prism.languages.scala.function;
\ No newline at end of file
+Prism.languages.scala=Prism.languages.extend("java",{"triple-quoted-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:/<-|=>|\b(?:abstract|case|catch|class|def|derives|do|else|enum|extends|extension|final|finally|for|forSome|given|if|implicit|import|infix|inline|lazy|match|new|null|object|opaque|open|override|package|private|protected|return|sealed|self|super|this|throw|trait|transparent|try|type|using|val|var|while|with|yield)\b/,number:/\b0x(?:[\da-f]*\.)?[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e\d+)?[dfl]?/i,builtin:/\b(?:Any|AnyRef|AnyVal|Boolean|Byte|Char|Double|Float|Int|Long|Nothing|Short|String|Unit)\b/,symbol:/'[^\d\s\\]\w*/}),Prism.languages.insertBefore("scala","triple-quoted-string",{"string-interpolation":{pattern:/\b[a-z]\w*(?:"""(?:[^$]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*?"""|"(?:[^$"\r\n]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*")/i,greedy:!0,inside:{id:{pattern:/^\w+/,greedy:!0,alias:"function"},escape:{pattern:/\\\$"|\$[$"]/,greedy:!0,alias:"symbol"},interpolation:{pattern:/\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,greedy:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:Prism.languages.scala}}},string:/[\s\S]+/}}}),delete Prism.languages.scala["class-name"],delete Prism.languages.scala.function;
\ No newline at end of file
diff --git a/tests/languages/scala/keyword_feature.test b/tests/languages/scala/keyword_feature.test
index 9e3cfb4..859dac0 100644
--- a/tests/languages/scala/keyword_feature.test
+++ b/tests/languages/scala/keyword_feature.test
@@ -1,15 +1,19 @@
<- =>
abstract case catch
-class def do else
-extends final finally
-for forSome if
-implicit import; lazy
+class def derives do
+else enum extends extension
+final finally
+for forSome given if
+implicit import;
+infix inline lazy
match new null object
+opaque open
override package private
protected return sealed
self super this throw
-trait try type val
+trait transparent try
+type using val
var while with yield
----------------------------------------------------
@@ -17,19 +21,71 @@ var while with yield
[
["keyword", "<-"], ["keyword", "=>"],
- ["keyword", "abstract"], ["keyword", "case"], ["keyword", "catch"],
- ["keyword", "class"], ["keyword", "def"], ["keyword", "do"], ["keyword", "else"],
- ["keyword", "extends"], ["keyword", "final"], ["keyword", "finally"],
- ["keyword", "for"], ["keyword", "forSome"], ["keyword", "if"],
- ["keyword", "implicit"], ["keyword", "import"], ["punctuation", ";"], ["keyword", "lazy"],
- ["keyword", "match"], ["keyword", "new"], ["keyword", "null"], ["keyword", "object"],
- ["keyword", "override"], ["keyword", "package"], ["keyword", "private"],
- ["keyword", "protected"], ["keyword", "return"], ["keyword", "sealed"],
- ["keyword", "self"], ["keyword", "super"], ["keyword", "this"], ["keyword", "throw"],
- ["keyword", "trait"], ["keyword", "try"], ["keyword", "type"], ["keyword", "val"],
- ["keyword", "var"], ["keyword", "while"], ["keyword", "with"], ["keyword", "yield"]
+ ["keyword", "abstract"],
+ ["keyword", "case"],
+ ["keyword", "catch"],
+
+ ["keyword", "class"],
+ ["keyword", "def"],
+ ["keyword", "derives"],
+ ["keyword", "do"],
+
+ ["keyword", "else"],
+ ["keyword", "enum"],
+ ["keyword", "extends"],
+ ["keyword", "extension"],
+
+ ["keyword", "final"],
+ ["keyword", "finally"],
+
+ ["keyword", "for"],
+ ["keyword", "forSome"],
+ ["keyword", "given"],
+ ["keyword", "if"],
+
+ ["keyword", "implicit"],
+ ["keyword", "import"],
+ ["punctuation", ";"],
+
+ ["keyword", "infix"],
+ ["keyword", "inline"],
+ ["keyword", "lazy"],
+
+ ["keyword", "match"],
+ ["keyword", "new"],
+ ["keyword", "null"],
+ ["keyword", "object"],
+
+ ["keyword", "opaque"],
+ ["keyword", "open"],
+
+ ["namespace", ["override"]],
+ ["keyword", "package"],
+ ["keyword", "private"],
+
+ ["keyword", "protected"],
+ ["keyword", "return"],
+ ["keyword", "sealed"],
+
+ ["keyword", "self"],
+ ["keyword", "super"],
+ ["keyword", "this"],
+ ["keyword", "throw"],
+
+ ["keyword", "trait"],
+ ["keyword", "transparent"],
+ ["keyword", "try"],
+
+ ["keyword", "type"],
+ ["keyword", "using"],
+ ["keyword", "val"],
+
+ ["keyword", "var"],
+ ["keyword", "while"],
+ ["keyword", "with"],
+ ["keyword", "yield"]
]
----------------------------------------------------
-Checks for keywords.
\ No newline at end of file
+Checks for keywords.