Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit f87ee45

Browse files
committedOct 9, 2024·
Simplify operators
Instead of dancing around around special operators we can just enumerate them now. This fixes a lot of edge cases.
1 parent ec31fa5 commit f87ee45

File tree

4 files changed

+70
-52
lines changed

4 files changed

+70
-52
lines changed
 

‎src/typescript/Scala.tmLanguage.ts

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -676,31 +676,55 @@ 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}*`,
679+
{ // Operators with three or more characters
680+
match: `(${opchar}${opchar}${opchar}+)`,
682681
name: 'keyword.operator.scala'
683682
},
684-
{ // The 'special' below operators directly follower by another symbol
685-
// are just operators for example +:, /:, ++ and ==>
686-
match: `(\\-|\\+|\\*|/(?![/*])|%|~|==|!=|<=|>=|<>)${opchar}+`,
687-
name: 'keyword.operator.scala'
688-
},
689-
{
690-
match: '(==?|!=|<=|>=|<>|<|>)',
691-
name: 'keyword.operator.comparison.scala'
692-
},
693-
{
694-
match: '(\\-|\\+|\\*|/(?![/*])|%|~)',
695-
name: 'keyword.operator.arithmetic.scala'
696-
},
697-
{
698-
match: `(?<!${opchar}|_)(!|&&|\\|\\|)(?!${opchar})`,
699-
name: 'keyword.operator.logical.scala'
683+
{ // Operators with two characters
684+
match: `(${opchar}${opchar}|\\\\${opchar})`,
685+
captures: {
686+
'1': {
687+
patterns: [
688+
{
689+
match: '(\\|\\||&&)',
690+
name: 'keyword.operator.logical.scala'
691+
},
692+
{
693+
match: '(\\!=|==|\\<=|>=)',
694+
name: 'keyword.operator.comparison.scala'
695+
},
696+
{
697+
match: '..',
698+
name: 'keyword.operator.scala'
699+
}
700+
]
701+
}
702+
}
700703
},
701-
{ // Lower precedence than logical || operator
702-
match: `(\\|)${opchar}*`,
703-
name: 'keyword.operator.scala'
704+
{ // Operators with one character
705+
match: `(?<!${letter}_)(${opchar})`,
706+
captures: {
707+
'1': {
708+
patterns: [
709+
{
710+
match: '(\\!)',
711+
name: 'keyword.operator.logical.scala'
712+
},
713+
{
714+
match: '(\\*|-|\\+|/|%|~)',
715+
name: 'keyword.operator.arithmetic.scala'
716+
},
717+
{
718+
match: '(=|\\<|>)',
719+
name: 'keyword.operator.comparison.scala'
720+
},
721+
{
722+
match: '.',
723+
name: 'keyword.operator.scala'
724+
}
725+
]
726+
}
727+
}
704728
}
705729
]
706730
},

‎syntaxes/Scala.tmLanguage.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

‎tests/snap/scala_spec.test.scala.snap

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@
1919
# ^ source.scala meta.bracket.scala
2020
# ^ source.scala entity.name.class
2121
# ^ source.scala
22-
# ^ source.scala keyword.operator.comparison.scala
23-
# ^ source.scala keyword.operator.scala
22+
# ^^ source.scala keyword.operator.scala
2423
# ^ source.scala
2524
# ^^^^^^^^^^ source.scala entity.name.class
2625
# ^ source.scala meta.bracket.scala
@@ -82,8 +81,7 @@
8281
# ^ source.scala meta.bracket.scala
8382
# ^ source.scala entity.name.class
8483
# ^ source.scala
85-
# ^ source.scala keyword.operator.comparison.scala
86-
# ^ source.scala keyword.operator.scala
84+
# ^^ source.scala keyword.operator.scala
8785
# ^ source.scala
8886
# ^^^^^^ source.scala entity.name.class
8987
# ^ source.scala meta.bracket.scala
@@ -100,8 +98,7 @@
10098
# ^ source.scala
10199
# ^ source.scala entity.name.class
102100
# ^ source.scala
103-
# ^ source.scala keyword.operator.comparison.scala
104-
# ^ source.scala keyword.operator.scala
101+
# ^^ source.scala keyword.operator.scala
105102
# ^ source.scala
106103
# ^ source.scala entity.name.class
107104
# ^ source.scala
@@ -244,8 +241,7 @@
244241
# ^ source.scala meta.bracket.scala
245242
# ^ source.scala entity.name.class
246243
# ^ source.scala
247-
# ^ source.scala keyword.operator.comparison.scala
248-
# ^ source.scala keyword.operator.scala
244+
# ^^ source.scala keyword.operator.scala
249245
# ^ source.scala
250246
# ^^^^^^^^^^ source.scala entity.name.class
251247
# ^ source.scala meta.bracket.scala
@@ -301,8 +297,7 @@
301297
# ^ source.scala entity.name.class
302298
# ^ source.scala meta.bracket.scala
303299
# ^ source.scala
304-
# ^ source.scala keyword.operator.comparison.scala
305-
# ^ source.scala keyword.operator.scala
300+
# ^^ source.scala keyword.operator.scala
306301
# ^ source.scala
307302
# ^^^^^^^^ source.scala entity.name.class
308303
# ^ source.scala meta.bracket.scala
@@ -441,8 +436,8 @@
441436
# ^ source.scala keyword.operator.scala
442437
# ^ source.scala
443438
# ^^ source.scala entity.name.class
444-
# ^^ source.scala
445-
# ^ source.scala keyword.operator.arithmetic.scala
439+
# ^ source.scala
440+
# ^^ source.scala keyword.operator.scala
446441
# ^ source.scala
447442
# ^^ source.scala entity.name.class
448443
# ^ source.scala
@@ -469,8 +464,7 @@
469464
# ^ source.scala
470465
# ^ source.scala entity.name.type.declaration
471466
# ^ source.scala
472-
# ^ source.scala keyword.operator.comparison.scala
473-
# ^ source.scala keyword.operator.scala
467+
# ^^ source.scala keyword.operator.scala
474468
# ^^^^^^^^^^^ source.scala
475469
# ^^^^^^ source.scala entity.name.class
476470
# ^ source.scala
@@ -509,7 +503,9 @@
509503
# ^ source.scala
510504
# ^^^ source.scala entity.name.class
511505
# ^ source.scala meta.bracket.scala
512-
# ^^^^^^^^^ source.scala
506+
# ^^^^^^^ source.scala
507+
# ^ source.scala keyword.operator.scala
508+
# ^ source.scala
513509
# ^ source.scala entity.name.class
514510
# ^ source.scala meta.bracket.scala
515511
# ^^^^^^^^^ source.scala
@@ -519,8 +515,7 @@
519515
# ^ source.scala
520516
# ^^^^^^ source.scala entity.name.type.declaration
521517
# ^ source.scala
522-
# ^ source.scala keyword.operator.comparison.scala
523-
# ^ source.scala keyword.operator.scala
518+
# ^^ source.scala keyword.operator.scala
524519
# ^ source.scala
525520
# ^^^^^ source.scala entity.name.class
526521
# ^ source.scala
@@ -540,20 +535,17 @@
540535
# ^^ source.scala
541536
# ^ source.scala entity.name.class
542537
# ^ source.scala
543-
# ^ source.scala keyword.operator.comparison.scala
544-
# ^ source.scala keyword.operator.scala
538+
# ^^ source.scala keyword.operator.scala
545539
# ^ source.scala
546540
# ^ source.scala entity.name.class
547541
# ^^ source.scala
548542
# ^ source.scala entity.name.class
549543
# ^ source.scala
550-
# ^ source.scala keyword.operator.comparison.scala
551-
# ^ source.scala keyword.operator.scala
544+
# ^^ source.scala keyword.operator.scala
552545
# ^ source.scala
553546
# ^ source.scala entity.name.class
554547
# ^ source.scala
555-
# ^ source.scala keyword.operator.comparison.scala
556-
# ^ source.scala keyword.operator.scala
548+
# ^^ source.scala keyword.operator.scala
557549
# ^ source.scala
558550
# ^ source.scala entity.name.class
559551
# ^ source.scala meta.bracket.scala
@@ -568,8 +560,7 @@
568560
# ^ source.scala meta.bracket.scala
569561
# ^ source.scala entity.name.class
570562
# ^ source.scala
571-
# ^ source.scala keyword.operator.comparison.scala
572-
# ^ source.scala keyword.operator.scala
563+
# ^^ source.scala keyword.operator.scala
573564
# ^ source.scala
574565
# ^^^^^ source.scala entity.name.class
575566
# ^ source.scala meta.bracket.scala
@@ -1001,8 +992,7 @@
1001992
# ^ source.scala
1002993
# ^ source.scala entity.name.type.declaration
1003994
# ^ source.scala
1004-
# ^ source.scala keyword.operator.comparison.scala
1005-
# ^ source.scala keyword.operator.scala
995+
# ^^ source.scala keyword.operator.scala
1006996
# ^ source.scala
1007997
# ^ source.scala entity.name.class
1008998
# ^ source.scala
@@ -1279,8 +1269,7 @@
12791269
# ^ source.scala meta.bracket.scala
12801270
# ^ source.scala entity.name.class
12811271
# ^ source.scala
1282-
# ^ source.scala keyword.operator.comparison.scala
1283-
# ^ source.scala keyword.operator.scala
1272+
# ^^ source.scala keyword.operator.scala
12841273
# ^ source.scala
12851274
# ^^^^^^^^^^ source.scala entity.name.class
12861275
# ^ source.scala meta.bracket.scala

‎tests/unit/#191.test.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,8 @@
2929

3030
a ==> b
3131
// ^^^ keyword.operator.scala
32+
33+
a >=> b
34+
// ^^^ keyword.operator.scala
35+
a &= b
36+
// ^^ keyword.operator.scala

0 commit comments

Comments
 (0)
Please sign in to comment.