Skip to content

Commit e076acc

Browse files
1 parent 32bde79 commit e076acc

File tree

5 files changed

+39
-3
lines changed

5 files changed

+39
-3
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Grammars:
2121
- enh(scala) add Scala 3 `extension` soft keyword (#3326) [Nicolas Stucki][]
2222
- enh(scala) add Scala 3 `end` soft keyword (#3327) [Nicolas Stucki][]
2323
- enh(scala) add `inline` soft keyword (#3329) [Nicolas Stucki][]
24+
- enh(scala) add `using` soft keyword (#3330) [Nicolas Stucki][]
2425

2526
[Austin Schick]: https://github.com/austin-schick
2627
[Josh Goebel]: https://github.com/joshgoebel

src/languages/scala.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Contributors: Erik Osheim <[email protected]>
66
Website: https://www.scala-lang.org
77
*/
88

9+
import * as regex from '../lib/regex.js';
10+
911
export default function(hljs) {
1012
const ANNOTATION = {
1113
className: 'meta',
@@ -107,8 +109,7 @@ export default function(hljs) {
107109
const METHOD = {
108110
className: 'function',
109111
beginKeywords: 'def',
110-
end: /[:={\[(\n;]/,
111-
excludeEnd: true,
112+
end: regex.lookahead(/[:={\[(\n;]/),
112113
contains: [ NAME ]
113114
};
114115

@@ -146,6 +147,17 @@ export default function(hljs) {
146147
keywords: 'inline'
147148
}];
148149

150+
const USING_PARAM_CLAUSE = {
151+
begin: [
152+
/\(\s*/, // Opening `(` of a parameter or argument list
153+
/using/,
154+
/\s+(?!\))/, // Spaces not followed by `)`
155+
],
156+
beginScope: {
157+
2: "keyword",
158+
}
159+
};
160+
149161
return {
150162
name: 'Scala',
151163
keywords: {
@@ -163,6 +175,7 @@ export default function(hljs) {
163175
EXTENSION,
164176
END,
165177
...INLINE_MODES,
178+
USING_PARAM_CLAUSE,
166179
ANNOTATION
167180
]
168181
};
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span></span>(using <span class="hljs-type">Quotes</span>) = &#x27;{ <span class="hljs-keyword">val</span> x = <span class="hljs-number">1</span>; ${g(&#x27;x)} }
1+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span></span>(<span class="hljs-keyword">using</span> <span class="hljs-type">Quotes</span>) = &#x27;{ <span class="hljs-keyword">val</span> x = <span class="hljs-number">1</span>; ${g(&#x27;x)} }

test/markup/scala/using.expect.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span></span>(<span class="hljs-keyword">using</span> x: <span class="hljs-type">Int</span>) = <span class="hljs-number">1</span>
2+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">g</span></span>(<span class="hljs-keyword">using</span> <span class="hljs-type">Int</span>) = <span class="hljs-number">1</span>
3+
<span class="hljs-keyword">given</span> (<span class="hljs-keyword">using</span> ev: <span class="hljs-type">Ev</span>): <span class="hljs-type">Foo</span> = ???
4+
5+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">expressions</span> </span>=
6+
f(<span class="hljs-keyword">using</span> <span class="hljs-number">2</span>)
7+
8+
<span class="hljs-comment">// not `using` keyword</span>
9+
(using)
10+
(using )
11+
( using )

test/markup/scala/using.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
def f(using x: Int) = 1
2+
def g(using Int) = 1
3+
given (using ev: Ev): Foo = ???
4+
5+
def expressions =
6+
f(using 2)
7+
8+
// not `using` keyword
9+
(using)
10+
(using )
11+
( using )

0 commit comments

Comments
 (0)