Skip to content

Commit cdc67c9

Browse files
committed
Fix 'longer' operators
'Longer' operators like -> aren't an arithmetic operator and than a comparison, but one operator.
1 parent 0493778 commit cdc67c9

File tree

5 files changed

+52
-63
lines changed

5 files changed

+52
-63
lines changed

Diff for: src/typescript/Scala.tmLanguage.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,11 @@ export const scalaTmLanguage: TmLanguage = {
676676
}
677677
}
678678
},
679+
{ // Higher precedence than other kinds of operators to prevent
680+
// decomposition of operators like ->
681+
match: `(<-|←|->|→|=>|⇒|\\?|\\:|@)+${opchar}*`,
682+
name: 'keyword.operator.scala'
683+
},
679684
{
680685
match: '(==?|!=|<=|>=|<>|<|>)',
681686
name: 'keyword.operator.comparison.scala'
@@ -688,8 +693,8 @@ export const scalaTmLanguage: TmLanguage = {
688693
match: `(?<!${opchar}|_)(!|&&|\\|\\|)(?!${opchar})`,
689694
name: 'keyword.operator.logical.scala'
690695
},
691-
{
692-
match: `(<-|←|->|→|=>|⇒|\\?|\\:|@|\\|)+${opchar}*`,
696+
{ // Lower precedence than logical || operator
697+
match: `(\\|)${opchar}*`,
693698
name: 'keyword.operator.scala'
694699
}
695700
]

Diff for: syntaxes/Scala.tmLanguage.json

+1-1
Large diffs are not rendered by default.

Diff for: tests/snap/end.test.scala.snap

+2-4
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,7 @@
114114
# ^ source.scala
115115
# ^ source.scala constant.numeric.scala
116116
# ^ source.scala
117-
# ^ source.scala keyword.operator.comparison.scala
118-
# ^ source.scala keyword.operator.comparison.scala
117+
# ^^ source.scala keyword.operator.scala
119118
# ^^^^^^^^ source.scala
120119
# ^ source.scala meta.bracket.scala
121120
# ^ source.scala string.quoted.double.scala punctuation.definition.string.begin.scala
@@ -126,8 +125,7 @@
126125
#^^^^^^^^^^^^^^^^^^ source.scala
127126
# ^^^^ source.scala keyword.control.flow.scala
128127
# ^^^ source.scala
129-
# ^ source.scala keyword.operator.comparison.scala
130-
# ^ source.scala keyword.operator.comparison.scala
128+
# ^^ source.scala keyword.operator.scala
131129
> end match
132130
#^^^^^^^^^^^^^^^^^^^^^^^^ source.scala keyword.control.flow.end.scala
133131
> finally

Diff for: tests/snap/scala_spec.test.scala.snap

+28-56
Original file line numberDiff line numberDiff line change
@@ -317,8 +317,7 @@
317317
# ^ source.scala
318318
# ^ source.scala entity.name.class
319319
# ^ source.scala
320-
# ^ source.scala keyword.operator.comparison.scala
321-
# ^ source.scala keyword.operator.comparison.scala
320+
# ^^ source.scala keyword.operator.scala
322321
# ^^^^^^^^ source.scala
323322
# ^ source.scala meta.bracket.scala
324323
# ^ source.scala entity.name.class
@@ -673,8 +672,7 @@
673672
# ^^^^ source.scala variable.parameter.scala
674673
# ^ source.scala meta.colon.scala
675674
# ^ source.scala
676-
# ^ source.scala keyword.operator.comparison.scala
677-
# ^ source.scala keyword.operator.comparison.scala
675+
# ^^ source.scala keyword.operator.scala
678676
# ^ source.scala
679677
# ^^^^^^^ source.scala entity.name.class
680678
# ^ source.scala meta.bracket.scala
@@ -683,8 +681,7 @@
683681
# ^^^^ source.scala variable.parameter.scala
684682
# ^ source.scala meta.colon.scala
685683
# ^ source.scala
686-
# ^ source.scala keyword.operator.comparison.scala
687-
# ^ source.scala keyword.operator.comparison.scala
684+
# ^^ source.scala keyword.operator.scala
688685
# ^ source.scala
689686
# ^^^^ source.scala entity.name.class
690687
# ^ source.scala meta.bracket.scala
@@ -723,8 +720,7 @@
723720
# ^ source.scala
724721
# ^ source.scala meta.bracket.scala
725722
# ^^^^ source.scala
726-
# ^ source.scala keyword.operator.comparison.scala
727-
# ^ source.scala keyword.operator.arithmetic.scala
723+
# ^^ source.scala keyword.operator.scala
728724
# ^^^^^ source.scala
729725
# ^ source.scala meta.bracket.scala
730726
# ^^^^^^^^ source.scala
@@ -1164,8 +1160,7 @@
11641160
# ^ source.scala
11651161
# ^^^ source.scala entity.name.class
11661162
# ^ source.scala
1167-
# ^ source.scala keyword.operator.comparison.scala
1168-
# ^ source.scala keyword.operator.comparison.scala
1163+
# ^^ source.scala keyword.operator.scala
11691164
> var head = ???
11701165
#^^^^ source.scala
11711166
# ^^^ source.scala keyword.declaration.volatile.scala
@@ -1301,8 +1296,7 @@
13011296
# ^ source.scala
13021297
# ^ source.scala entity.name.class
13031298
# ^ source.scala
1304-
# ^ source.scala keyword.operator.comparison.scala
1305-
# ^ source.scala keyword.operator.comparison.scala
1299+
# ^^ source.scala keyword.operator.scala
13061300
> def < (that: T): Boolean
13071301
#^^^^ source.scala
13081302
# ^^^ source.scala keyword.declaration.scala
@@ -1456,8 +1450,7 @@
14561450
# ^^^^ source.scala
14571451
# ^ source.scala meta.bracket.scala
14581452
# ^ source.scala
1459-
# ^ source.scala keyword.operator.comparison.scala
1460-
# ^ source.scala keyword.operator.comparison.scala
1453+
# ^^ source.scala keyword.operator.scala
14611454
# ^^^ source.scala
14621455
# ^ source.scala keyword.operator.arithmetic.scala
14631456
# ^^ source.scala
@@ -1731,17 +1724,15 @@
17311724
# ^^^^ source.scala variable.parameter.scala
17321725
# ^ source.scala meta.colon.scala
17331726
# ^ source.scala
1734-
# ^ source.scala keyword.operator.comparison.scala
1735-
# ^ source.scala keyword.operator.comparison.scala
1727+
# ^^ source.scala keyword.operator.scala
17361728
# ^ source.scala
17371729
# ^^^^^^^ source.scala entity.name.class
17381730
# ^ source.scala meta.bracket.scala
17391731
# ^ source.scala meta.bracket.scala
17401732
# ^^^^ source.scala variable.parameter.scala
17411733
# ^ source.scala meta.colon.scala
17421734
# ^ source.scala
1743-
# ^ source.scala keyword.operator.comparison.scala
1744-
# ^ source.scala keyword.operator.comparison.scala
1735+
# ^^ source.scala keyword.operator.scala
17451736
# ^ source.scala
17461737
# ^^^^ source.scala entity.name.class
17471738
# ^ source.scala meta.bracket.scala
@@ -1801,15 +1792,13 @@
18011792
# ^^ source.scala
18021793
# ^ source.scala punctuation.section.block.begin.scala
18031794
# ^^^ source.scala
1804-
# ^ source.scala keyword.operator.comparison.scala
1805-
# ^ source.scala keyword.operator.arithmetic.scala
1795+
# ^^ source.scala keyword.operator.scala
18061796
# ^ source.scala
18071797
# ^ source.scala constant.numeric.scala
18081798
# ^^^^^^^^^ source.scala
18091799
> j <- 1 until i
18101800
#^^^^^^^^^^ source.scala
1811-
# ^ source.scala keyword.operator.comparison.scala
1812-
# ^ source.scala keyword.operator.arithmetic.scala
1801+
# ^^ source.scala keyword.operator.scala
18131802
# ^ source.scala
18141803
# ^ source.scala constant.numeric.scala
18151804
# ^^^^^^^^^ source.scala
@@ -1845,8 +1834,7 @@
18451834
#^^^^^ source.scala
18461835
# ^^^^ source.scala keyword.control.flow.scala
18471836
# ^^^ source.scala
1848-
# ^ source.scala keyword.operator.comparison.scala
1849-
# ^ source.scala keyword.operator.comparison.scala
1837+
# ^^ source.scala keyword.operator.scala
18501838
# ^ source.scala
18511839
# ^ source.scala meta.bracket.scala
18521840
# ^ source.scala constant.numeric.scala
@@ -1856,8 +1844,7 @@
18561844
#^^^^^^^^^^^^^^^^^^^ source.scala
18571845
# ^ source.scala punctuation.section.block.begin.scala
18581846
# ^^^ source.scala
1859-
# ^ source.scala keyword.operator.comparison.scala
1860-
# ^ source.scala keyword.operator.comparison.scala
1847+
# ^^ source.scala keyword.operator.scala
18611848
# ^^^^^^^^ source.scala
18621849
# ^ source.scala meta.bracket.scala
18631850
# ^ source.scala
@@ -1872,8 +1859,7 @@
18721859
# ^ source.scala
18731860
# ^^^^ source.scala keyword.control.flow.scala
18741861
# ^^^ source.scala
1875-
# ^ source.scala keyword.operator.comparison.scala
1876-
# ^ source.scala keyword.operator.comparison.scala
1862+
# ^^ source.scala keyword.operator.scala
18771863
# ^ source.scala
18781864
# ^ source.scala meta.bracket.scala
18791865
# ^^^^ source.scala
@@ -1908,17 +1894,15 @@
19081894
# ^ source.scala
19091895
# ^ source.scala meta.bracket.scala
19101896
# ^ source.scala
1911-
# ^ source.scala keyword.operator.comparison.scala
1912-
# ^ source.scala keyword.operator.comparison.scala
1897+
# ^^ source.scala keyword.operator.scala
19131898
# ^ source.scala
19141899
# ^^^^^ source.scala keyword.control.flow.jump.scala
19151900
# ^^^^ source.scala
19161901
> case other => throw other
19171902
#^^^^^^^^ source.scala
19181903
# ^^^^ source.scala keyword.control.flow.scala
19191904
# ^^^^^^^ source.scala
1920-
# ^ source.scala keyword.operator.comparison.scala
1921-
# ^ source.scala keyword.operator.comparison.scala
1905+
# ^^ source.scala keyword.operator.scala
19221906
# ^ source.scala
19231907
# ^^^^^ source.scala keyword.control.flow.jump.scala
19241908
# ^^^^^^^ source.scala
@@ -1954,8 +1938,7 @@
19541938
# ^^^ source.scala entity.name.class
19551939
# ^ source.scala meta.bracket.scala
19561940
# ^ source.scala
1957-
# ^ source.scala keyword.operator.comparison.scala
1958-
# ^ source.scala keyword.operator.comparison.scala
1941+
# ^^ source.scala keyword.operator.scala
19591942
# ^^^ source.scala
19601943
# ^ source.scala keyword.operator.arithmetic.scala
19611944
# ^^^^ source.scala
@@ -2115,8 +2098,7 @@
21152098
# ^ source.scala
21162099
# ^ source.scala entity.name.class
21172100
# ^ source.scala
2118-
# ^ source.scala keyword.operator.comparison.scala
2119-
# ^ source.scala keyword.operator.comparison.scala
2101+
# ^^ source.scala keyword.operator.scala
21202102
# ^ source.scala
21212103
# ^^^^^^^ source.scala entity.name.class
21222104
# ^ source.scala meta.bracket.scala
@@ -2169,8 +2151,7 @@
21692151
# ^ source.scala
21702152
# ^^^ source.scala
21712153
# ^ source.scala
2172-
# ^ source.scala keyword.operator.comparison.scala
2173-
# ^ source.scala keyword.operator.comparison.scala
2154+
# ^^ source.scala keyword.operator.scala
21742155
# ^^ source.scala
21752156
> case s @ Seq(_, _, _) =>
21762157
#^^^^^^^^ source.scala
@@ -2183,8 +2164,7 @@
21832164
# ^^^^^^^ source.scala
21842165
# ^ source.scala meta.bracket.scala
21852166
# ^ source.scala
2186-
# ^ source.scala keyword.operator.comparison.scala
2187-
# ^ source.scala keyword.operator.comparison.scala
2167+
# ^^ source.scala keyword.operator.scala
21882168
# ^^ source.scala
21892169
> case Seq(first, tail @ _*) =>
21902170
#^^^^^^^^ source.scala
@@ -2198,17 +2178,15 @@
21982178
# ^ source.scala keyword.operator.arithmetic.scala
21992179
# ^ source.scala meta.bracket.scala
22002180
# ^ source.scala
2201-
# ^ source.scala keyword.operator.comparison.scala
2202-
# ^ source.scala keyword.operator.comparison.scala
2181+
# ^^ source.scala keyword.operator.scala
22032182
> case first +: tail =>
22042183
#^^^^^^^^ source.scala
22052184
# ^^^^ source.scala keyword.control.flow.scala
22062185
# ^^^^^^^ source.scala
22072186
# ^ source.scala keyword.operator.arithmetic.scala
22082187
# ^ source.scala keyword.operator.scala
22092188
# ^^^^^^ source.scala
2210-
# ^ source.scala keyword.operator.comparison.scala
2211-
# ^ source.scala keyword.operator.comparison.scala
2189+
# ^^ source.scala keyword.operator.scala
22122190
> case 3 | 5 | 6 =>
22132191
#^^^^^^^^ source.scala
22142192
# ^^^^ source.scala keyword.control.flow.scala
@@ -2223,8 +2201,7 @@
22232201
# ^ source.scala
22242202
# ^ source.scala constant.numeric.scala
22252203
# ^ source.scala
2226-
# ^ source.scala keyword.operator.comparison.scala
2227-
# ^ source.scala keyword.operator.comparison.scala
2204+
# ^^ source.scala keyword.operator.scala
22282205
> case y: Number => y.n
22292206
#^^^^^^^^ source.scala
22302207
# ^^^^ source.scala keyword.control.flow.scala
@@ -2234,8 +2211,7 @@
22342211
# ^ source.scala
22352212
# ^^^^^^ source.scala entity.name.class
22362213
# ^ source.scala
2237-
# ^ source.scala keyword.operator.comparison.scala
2238-
# ^ source.scala keyword.operator.comparison.scala
2214+
# ^^ source.scala keyword.operator.scala
22392215
# ^^^^^ source.scala
22402216
> case Lit(n) => n
22412217
#^^^^^^^^ source.scala
@@ -2246,8 +2222,7 @@
22462222
# ^ source.scala
22472223
# ^ source.scala meta.bracket.scala
22482224
# ^^^^^^^^ source.scala
2249-
# ^ source.scala keyword.operator.comparison.scala
2250-
# ^ source.scala keyword.operator.comparison.scala
2225+
# ^^ source.scala keyword.operator.scala
22512226
# ^^^ source.scala
22522227
> case IsZero(u) => eval(u) == 0
22532228
#^^^^^^^^ source.scala
@@ -2258,8 +2233,7 @@
22582233
# ^ source.scala
22592234
# ^ source.scala meta.bracket.scala
22602235
# ^^^^^ source.scala
2261-
# ^ source.scala keyword.operator.comparison.scala
2262-
# ^ source.scala keyword.operator.comparison.scala
2236+
# ^^ source.scala keyword.operator.scala
22632237
# ^^^^^ source.scala
22642238
# ^ source.scala meta.bracket.scala
22652239
# ^ source.scala
@@ -2272,8 +2246,7 @@
22722246
#^^^^^^^^ source.scala
22732247
# ^^^^ source.scala keyword.control.flow.scala
22742248
# ^^^ source.scala
2275-
# ^ source.scala keyword.operator.comparison.scala
2276-
# ^ source.scala keyword.operator.comparison.scala
2249+
# ^^ source.scala keyword.operator.scala
22772250
# ^ source.scala
22782251
# ^^ source.scala constant.numeric.scala
22792252
> }
@@ -2473,8 +2446,7 @@
24732446
# ^ source.scala
24742447
# ^ source.scala meta.bracket.scala
24752448
# ^ source.scala
2476-
# ^ source.scala keyword.operator.comparison.scala
2477-
# ^ source.scala keyword.operator.comparison.scala
2449+
# ^^ source.scala keyword.operator.scala
24782450
# ^^^ source.scala
24792451
> }
24802452
#^^^^ source.scala

Diff for: tests/unit/#191.test.scala

+14
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,17 @@
44
// ^^ keyword.operator.scala
55
setting := value
66
// ^^ keyword.operator.scala
7+
8+
a->b
9+
// ^^ keyword.operator.scala
10+
a->>b
11+
// ^^^ keyword.operator.scala
12+
a->->b
13+
// ^^^ keyword.operator.scala
14+
15+
a | b
16+
// ^ keyword.operator.scala
17+
a ||| b
18+
// ^^^ keyword.operator.scala
19+
a |+ b
20+
// ^^ keyword.operator.scala

0 commit comments

Comments
 (0)