Skip to content

Commit 76b7697

Browse files
committed
Clarified some symbol/keyword edge cases in syntax
1 parent f640b21 commit 76b7697

File tree

3 files changed

+80
-16
lines changed

3 files changed

+80
-16
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
### WIP
2+
3+
- Clarified some symbol/keyword edge cases in syntax
4+
15
### 4.3.1 - Nov 4, 2024
26

37
- Fixed evaluation of `()` #131

Clojure (Sublimed).sublime-syntax

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ variables:
88
wsb: '(?<=^|[\s,()\[\]{}~''`"^@]|#_)'
99
wse: '(?=$|[\s,()\[\]{}";])'
1010
nwse: '[^\s,()\[\]{}";]'
11-
sym_head: '[\p{Alpha}*!_?$%&=<>]'
12-
sym_head_lax: '[\p{Alpha}*!_?$%&=<>''\-+.#:]'
13-
sym_body: '[\p{Alpha}*!_?$%&=<>''\-+.#:0-9]'
11+
12+
sym_head: '[\p{Alpha}*!_?$%&=<>.]'
13+
sym_head_lax: '[\p{Alpha}*!_?$%&=<>.''\-+#:]'
14+
sym_body: '[\p{Alpha}*!_?$%&=<>.''\-+#:0-9]'
1415
ns_symbol: '(?:[\-+.]|[\-+.]{{sym_head_lax}}{{sym_body}}*|{{sym_head}}{{sym_body}}*)'
1516
symbol: '(?:/|{{ns_symbol}})'
17+
1618
kw: '\p{Alpha}*!_?$%&=<>''\-+.#0-9'
1719
regexp_name: '[a-zA-Z][a-zA-Z0-9]*'
1820
contexts:
@@ -223,7 +225,7 @@ contexts:
223225
pop: 1
224226

225227
keyword:
226-
- match: '{{wsb}}(::?)([{{kw}}][{{kw}}:]*[{{kw}}]|[{{kw}}])(/)([{{kw}}:/]*[{{kw}}]|[{{kw}}]){{wse}}'
228+
- match: '{{wsb}}(::?)([{{kw}}][{{kw}}:]*[{{kw}}]|[{{kw}}])(/)([{{kw}}:/]*[{{kw}}]|[{{kw}}]|/+){{wse}}'
227229
scope: constant.other.keyword.clojure
228230
captures:
229231
1: punctuation.definition.keyword.begin.clojure
@@ -235,6 +237,17 @@ contexts:
235237
captures:
236238
1: punctuation.definition.keyword.begin.clojure
237239
pop: 1
240+
- match: '{{wsb}}(:)/{{wse}}'
241+
scope: constant.other.keyword.clojure
242+
captures:
243+
1: punctuation.definition.keyword.begin.clojure
244+
pop: 1
245+
- match: '{{wsb}}(:)/(//+){{wse}}'
246+
scope: constant.other.keyword.clojure
247+
captures:
248+
1: punctuation.definition.keyword.begin.clojure
249+
2: punctuation.definition.namespace.clojure
250+
pop: 1
238251

239252
integer:
240253
- match: '{{wsb}}[+-]?(?:0[xX][0-9A-Fa-f]+|0[1-7]+|[1-9][0-9]*|[1-9][0-9]?[rR][0-9A-Za-z]+|0)(N)?{{wse}}'
@@ -271,7 +284,7 @@ contexts:
271284
push: list_second
272285

273286
symbol_name:
274-
- match: '{{wsb}}(?:{{symbol}}|({{ns_symbol}})(/)(?:/|{{sym_body}}+)){{wse}}'
287+
- match: '{{wsb}}(?:{{symbol}}|({{ns_symbol}})(/)(?:/|{{sym_body}})+){{wse}}'
275288
scope: source.symbol.clojure entity.name.clojure
276289
captures:
277290
1: meta.namespace.symbol.clojure
@@ -280,15 +293,15 @@ contexts:
280293
push: list_rest
281294

282295
symbol_unused:
283-
- match: '{{wsb}}(?:(?=_){{symbol}}|({{ns_symbol}})(/)(?=_){{symbol}}){{wse}}'
296+
- match: '{{wsb}}(?:(?=_){{symbol}}|({{ns_symbol}})(/)(?=_)(?:/|{{sym_body}})*){{wse}}'
284297
scope: source.symbol.unused.clojure
285298
captures:
286299
1: meta.namespace.symbol.clojure
287300
2: punctuation.definition.namespace.clojure
288301
pop: 1
289302

290303
symbol:
291-
- match: '{{wsb}}(?:{{symbol}}|({{ns_symbol}})(/)(?:/|{{sym_body}}+)){{wse}}'
304+
- match: '{{wsb}}(?:{{symbol}}|({{ns_symbol}})(/)(?:/|{{sym_body}})+){{wse}}'
292305
scope: source.symbol.clojure
293306
captures:
294307
1: meta.namespace.symbol.clojure
@@ -543,7 +556,7 @@ contexts:
543556
pop: 2
544557

545558
deep_keyword:
546-
- match: '{{wsb}}(::?)([{{kw}}][{{kw}}:]*[{{kw}}]|[{{kw}}])(/)([{{kw}}:/]*[{{kw}}]|[{{kw}}]){{wse}}'
559+
- match: '{{wsb}}(::?)([{{kw}}][{{kw}}:]*[{{kw}}]|[{{kw}}])(/)([{{kw}}:/]*[{{kw}}]|[{{kw}}]|/+){{wse}}'
547560
scope: constant.other.keyword.clojure
548561
captures:
549562
1: punctuation.definition.keyword.begin.clojure
@@ -555,6 +568,17 @@ contexts:
555568
captures:
556569
1: punctuation.definition.keyword.begin.clojure
557570
pop: 2
571+
- match: '{{wsb}}(:)/{{wse}}'
572+
scope: constant.other.keyword.clojure
573+
captures:
574+
1: punctuation.definition.keyword.begin.clojure
575+
pop: 2
576+
- match: '{{wsb}}(:)/(//+){{wse}}'
577+
scope: constant.other.keyword.clojure
578+
captures:
579+
1: punctuation.definition.keyword.begin.clojure
580+
2: punctuation.definition.namespace.clojure
581+
pop: 2
558582

559583
deep_integer:
560584
- match: '{{wsb}}[+-]?(?:0[xX][0-9A-Fa-f]+|0[1-7]+|[1-9][0-9]*|[1-9][0-9]?[rR][0-9A-Za-z]+|0)(N)?{{wse}}'
@@ -582,7 +606,7 @@ contexts:
582606
pop: 2
583607

584608
deep_symbol_def:
585-
- match: '{{wsb}}(?:(?=def){{symbol}}|({{ns_symbol}})(/)(?=def){{symbol}}){{wse}}'
609+
- match: '{{wsb}}(?:ns|(?=def){{symbol}}|({{ns_symbol}})(/)(?=def){{symbol}}){{wse}}'
586610
scope: source.symbol.def.clojure
587611
captures:
588612
1: meta.namespace.symbol.clojure
@@ -591,7 +615,7 @@ contexts:
591615
push: deep_list_second
592616

593617
deep_symbol_name:
594-
- match: '{{wsb}}(?:{{symbol}}|({{ns_symbol}})(/){{symbol}}){{wse}}'
618+
- match: '{{wsb}}(?:{{symbol}}|({{ns_symbol}})(/)(?:/|{{sym_body}})+){{wse}}'
595619
scope: source.symbol.clojure entity.name.clojure
596620
captures:
597621
1: meta.namespace.symbol.clojure
@@ -600,15 +624,15 @@ contexts:
600624
push: deep_list_rest
601625

602626
deep_symbol_unused:
603-
- match: '{{wsb}}(?:(?=_){{symbol}}|({{ns_symbol}})(/)(?=_){{symbol}}){{wse}}'
627+
- match: '{{wsb}}(?:(?=_){{symbol}}|({{ns_symbol}})(/)(?=_)(?:/|{{sym_body}})*){{wse}}'
604628
scope: source.symbol.unused.clojure
605629
captures:
606630
1: meta.namespace.symbol.clojure
607631
2: punctuation.definition.namespace.clojure
608632
pop: 2
609633

610634
deep_symbol:
611-
- match: '{{wsb}}(?:{{symbol}}|({{ns_symbol}})(/){{symbol}}){{wse}}'
635+
- match: '{{wsb}}(?:{{symbol}}|({{ns_symbol}})(/)(?:/|{{sym_body}})+){{wse}}'
612636
scope: source.symbol.clojure
613637
captures:
614638
1: meta.namespace.symbol.clojure

test_syntax/syntax_test_clojure.cljc

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,9 +343,37 @@ string"
343343
; ^^^^ source.symbol.unused
344344
; ^^^^ source.symbol.unused
345345

346+
ns// ns//sym ns/sym/sym ns/.1a ns/+1a ns/-1a .1a
347+
; ^^^^ source.symbol
348+
; ^^ meta.namespace.symbol
349+
; ^ punctuation.definition.namespace
350+
; ^ -source.symbol
351+
; ^^^^^^^ source.symbol
352+
; ^^ meta.namespace.symbol
353+
; ^ punctuation.definition.namespace
354+
; ^ -source.symbol
355+
; ^^^^^^^^^^ source.symbol
356+
; ^^ meta.namespace.symbol
357+
; ^ punctuation.definition.namespace
358+
; ^ -source.symbol
359+
; ^^^^^^ source.symbol
360+
; ^^ meta.namespace.symbol
361+
; ^ punctuation.definition.namespace
362+
; ^ -source.symbol
363+
; ^^^^^^ source.symbol
364+
; ^^ meta.namespace.symbol
365+
; ^ punctuation.definition.namespace
366+
; ^ -source.symbol
367+
; ^^^^^^ source.symbol
368+
; ^^ meta.namespace.symbol
369+
; ^ punctuation.definition.namespace
370+
; ^ -source.symbol
371+
; ^^^ source.symbol
372+
; ^ -source.symbol
373+
346374
; NOT SYMBOLS
347-
a/ /b 1a -1a +1a .1a
348-
; ^^^^^^^^^^^^^^^^^^^^ -source.symbol
375+
a/ /b 1a -1a +1a
376+
; ^^^^^^^^^^^^^^^^^ -source.symbol
349377

350378

351379
;;;;;;;;;; KEYWORDS ;;;;;;;;;;
@@ -403,10 +431,18 @@ string"
403431
; ^^^^^^^^ constant.other.keyword
404432
; ^^^^^ constant.other.keyword
405433
; ^^^^^^ constant.other.keyword
434+
:/ :/// :ns// :ns///
435+
; ^^ constant.other.keyword
436+
; ^ -constant.other.keyword
437+
; ^^^^ constant.other.keyword
438+
; ^ -constant.other.keyword
439+
; ^^^^^ constant.other.keyword
440+
; ^ -constant.other.keyword
441+
; ^^^^^^ constant.other.keyword
406442

407443
;;;;; NOT KEYWORDS
408-
:kv: :kv/ :/kv :/ :kv/ab: :kv/ab/ :::kv
409-
; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -constant.other.keyword
444+
:kv: :kv/ :/kv :kv/ab: :kv/ab/ :::kv :// ::/ :://
445+
; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -constant.other.keyword
410446

411447

412448
;;;;;;;;;; INTEGERS ;;;;;;;;;;

0 commit comments

Comments
 (0)