Skip to content

Commit 301f93b

Browse files
authored
fix: correct TextMate scopes for keywords vs identifiers (#228)
The grammar incorrectly assigned scopes, causing syntax highlighting issues: **Before (incorrect):** - `def`/`extern`/`module`/`use`/`alias` keywords → `entity.name.function.nushell` - Function/alias names → `entity.name.type.nushell` **After (correct):** - `def`/`extern` → `storage.type.function.nushell` - `module` → `storage.type.module.nushell` - `alias` → `storage.type.alias.nushell` - `use` → `keyword.control.import.nushell` - `--flag` modifiers → `storage.modifier.nushell` - Function/alias names → `entity.name.function.nushell` This follows TextMate scope naming conventions where: - `storage.type.*` = declaration keywords (def, class, function, etc.) - `entity.name.function` = the actual name being declared - `keyword.control.import` = import/use statements Fixes syntax highlighting in editors that rely on standard scope mappings.
1 parent ec27848 commit 301f93b

2 files changed

Lines changed: 52 additions & 38 deletions

File tree

syntaxes/nushell.tmLanguage.json

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -377,10 +377,10 @@
377377
"function": {
378378
"begin": "((?:export\\s+)?def)(?:\\s+((?:--\\w+(?:\\s+--\\w+)*)))?\\s+([\\w\\-]+|\"[\\w\\- ]+\"|'[\\w\\- ]+'|`[\\w\\- ]+`)(?:\\s+((?:--\\w+(?:\\s+--\\w+)*)))?",
379379
"beginCaptures": {
380-
"1": { "name": "entity.name.function.nushell" },
381-
"2": { "name": "entity.name.function.nushell" },
382-
"3": { "name": "entity.name.type.nushell" },
383-
"4": { "name": "entity.name.function.nushell" }
380+
"1": { "name": "storage.type.function.nushell" },
381+
"2": { "name": "storage.modifier.nushell" },
382+
"3": { "name": "entity.name.function.nushell" },
383+
"4": { "name": "storage.modifier.nushell" }
384384
},
385385
"end": "(?<=\\})",
386386
"patterns": [
@@ -392,8 +392,8 @@
392392
"extern": {
393393
"begin": "((?:export\\s+)?extern)\\s+([\\w\\-]+|\"[\\w\\- ]+\")",
394394
"beginCaptures": {
395-
"1": { "name": "entity.name.function.nushell" },
396-
"2": { "name": "entity.name.type.nushell" }
395+
"1": { "name": "storage.type.function.nushell" },
396+
"2": { "name": "entity.name.function.nushell" }
397397
},
398398
"end": "(?<=\\])",
399399
"endCaptures": {
@@ -404,7 +404,7 @@
404404
"module": {
405405
"begin": "((?:export\\s+)?module)\\s+([\\w\\-]+)\\s*\\{",
406406
"beginCaptures": {
407-
"1": { "name": "entity.name.function.nushell" },
407+
"1": { "name": "storage.type.module.nushell" },
408408
"2": { "name": "entity.name.namespace.nushell" }
409409
},
410410
"end": "\\}",
@@ -419,15 +419,15 @@
419419
{
420420
"match": "^\\s*((?:export )?use)\\s+([\\w\\-]+|\"[\\w\\- ]+\"|'[\\w\\- ]+')(?:\\s+([\\w\\-]+|\"[\\w\\- ]+\"|'[\\w\\- ]+'|\\*))?\\s*;?$",
421421
"captures": {
422-
"1": { "name": "entity.name.function.nushell" },
422+
"1": { "name": "keyword.control.import.nushell" },
423423
"2": { "name": "entity.name.namespace.nushell" },
424424
"3": { "name": "keyword.other.nushell" }
425425
}
426426
},
427427
{
428428
"begin": "^\\s*((?:export )?use)\\s+([\\w\\-]+|\"[\\w\\- ]+\"|'[\\w\\- ]+')\\s*\\[",
429429
"beginCaptures": {
430-
"1": { "name": "entity.name.function.nushell" },
430+
"1": { "name": "keyword.control.import.nushell" },
431431
"2": { "name": "entity.name.namespace.nushell" }
432432
},
433433
"end": "(\\])\\s*;?\\s*$",
@@ -449,7 +449,7 @@
449449
{
450450
"match": "(?<path>(?:/|\\\\|~[\\/\\\\]|\\.\\.?[\\/\\\\])?(?:[^\\/\\\\]+[\\/\\\\])*[\\w\\- ]+(?:\\.nu)?){0}^\\s*((?:export )?use)\\s+(\"\\g<path>\"|'\\g<path>\\'|(?![\"'])\\g<path>)(?:\\s+([\\w\\-]+|\"[\\w\\- ]+\"|'[^']+'|\\*))?\\s*;?$",
451451
"captures": {
452-
"2": { "name": "entity.name.function.nushell" },
452+
"2": { "name": "keyword.control.import.nushell" },
453453
"3": {
454454
"name": "string.bare.nushell",
455455
"patterns": [
@@ -467,7 +467,7 @@
467467
{
468468
"begin": "(?<path>(?:/|\\\\|~[\\/\\\\]|\\.\\.?[\\/\\\\])?(?:[^\\/\\\\]+[\\/\\\\])*[\\w\\- ]+(?:\\.nu)?){0}^\\s*((?:export )?use)\\s+(\"\\g<path>\"|'\\g<path>\\'|(?![\"'])\\g<path>)\\s+\\[",
469469
"beginCaptures": {
470-
"2": { "name": "entity.name.function.nushell" },
470+
"2": { "name": "keyword.control.import.nushell" },
471471
"3": {
472472
"name": "string.bare.nushell",
473473
"patterns": [
@@ -499,7 +499,7 @@
499499
{
500500
"match": "^\\s*(?:export )?use\\b",
501501
"captures": {
502-
"0": { "name": "entity.name.function.nushell" }
502+
"0": { "name": "keyword.control.import.nushell" }
503503
}
504504
}
505505
]
@@ -613,8 +613,8 @@
613613
"define-alias": {
614614
"match": "((?:export )?alias)\\s+([\\w\\-!]+)\\s*(=)",
615615
"captures": {
616-
"1": { "name": "entity.name.function.nushell" },
617-
"2": { "name": "entity.name.type.nushell" },
616+
"1": { "name": "storage.type.alias.nushell" },
617+
"2": { "name": "entity.name.function.nushell" },
618618
"3": {
619619
"patterns": [{ "include": "#operators" }]
620620
}

tests/cases/function.nu.snap

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
>export def --env my-function --env [] {}
2-
#^^^^^^^^^^^^^^^^ source.nushell entity.name.function.nushell
2+
#^^^^^^^^^^ source.nushell storage.type.function.nushell
3+
# ^ source.nushell
4+
# ^^^^^ source.nushell storage.modifier.nushell
35
# ^ source.nushell
4-
# ^^^^^^^^^^^^^^^^^^ source.nushell entity.name.type.nushell entity.name.type.nushell
6+
# ^^^^^^^^^^^ source.nushell entity.name.function.nushell
7+
# ^ source.nushell
8+
# ^^^^^ source.nushell storage.modifier.nushell
9+
# ^ source.nushell
510
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.begin.nushell
611
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.end.nushell
712
# ^ source.nushell
813
# ^ source.nushell meta.function.body.nushell punctuation.definition.function.begin.nushell
914
# ^ source.nushell meta.function.body.nushell punctuation.definition.function.end.nushell
1015
>
1116
>export def --env "my function1" --env [] {}
12-
#^^^^^^^^^^^^^^^^ source.nushell entity.name.function.nushell
17+
#^^^^^^^^^^ source.nushell storage.type.function.nushell
18+
# ^ source.nushell
19+
# ^^^^^ source.nushell storage.modifier.nushell
1320
# ^ source.nushell
14-
# ^ source.nushell entity.name.type.nushell
15-
# ^^^^^^^^^^^^ source.nushell entity.name.type.nushell entity.name.type.nushell
16-
# ^ source.nushell entity.name.type.nushell
17-
# ^^^^^^ source.nushell entity.name.type.nushell
21+
# ^^^^^^^^^^^^^^ source.nushell entity.name.function.nushell
22+
# ^ source.nushell
23+
# ^^^^^ source.nushell storage.modifier.nushell
1824
# ^ source.nushell
1925
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.begin.nushell
2026
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.end.nushell
@@ -23,12 +29,13 @@
2329
# ^ source.nushell meta.function.body.nushell punctuation.definition.function.end.nushell
2430
>
2531
>export def --env 'my function2' --env [] {}
26-
#^^^^^^^^^^^^^^^^ source.nushell entity.name.function.nushell
32+
#^^^^^^^^^^ source.nushell storage.type.function.nushell
33+
# ^ source.nushell
34+
# ^^^^^ source.nushell storage.modifier.nushell
2735
# ^ source.nushell
28-
# ^ source.nushell entity.name.type.nushell
29-
# ^^^^^^^^^^^^ source.nushell entity.name.type.nushell entity.name.type.nushell
30-
# ^ source.nushell entity.name.type.nushell
31-
# ^^^^^^ source.nushell entity.name.type.nushell
36+
# ^^^^^^^^^^^^^^ source.nushell entity.name.function.nushell
37+
# ^ source.nushell
38+
# ^^^^^ source.nushell storage.modifier.nushell
3239
# ^ source.nushell
3340
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.begin.nushell
3441
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.end.nushell
@@ -37,22 +44,28 @@
3744
# ^ source.nushell meta.function.body.nushell punctuation.definition.function.end.nushell
3845
>
3946
>export def --env my_function --env [] {}
40-
#^^^^^^^^^^^^^^^^ source.nushell entity.name.function.nushell
47+
#^^^^^^^^^^ source.nushell storage.type.function.nushell
48+
# ^ source.nushell
49+
# ^^^^^ source.nushell storage.modifier.nushell
4150
# ^^ source.nushell
42-
# ^^^^^^^^^^^^^^^^^^ source.nushell entity.name.type.nushell entity.name.type.nushell
51+
# ^^^^^^^^^^^ source.nushell entity.name.function.nushell
52+
# ^ source.nushell
53+
# ^^^^^ source.nushell storage.modifier.nushell
54+
# ^ source.nushell
4355
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.begin.nushell
4456
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.end.nushell
4557
# ^ source.nushell
4658
# ^ source.nushell meta.function.body.nushell punctuation.definition.function.begin.nushell
4759
# ^ source.nushell meta.function.body.nushell punctuation.definition.function.end.nushell
4860
>
4961
>export def --env "my_function1" --env [] {}
50-
#^^^^^^^^^^^^^^^^^ source.nushell entity.name.function.nushell
62+
#^^^^^^^^^^ source.nushell storage.type.function.nushell
63+
# ^^ source.nushell
64+
# ^^^^^ source.nushell storage.modifier.nushell
5165
# ^ source.nushell
52-
# ^ source.nushell entity.name.type.nushell
53-
# ^^^^^^^^^^^^ source.nushell entity.name.type.nushell entity.name.type.nushell
54-
# ^ source.nushell entity.name.type.nushell
55-
# ^^^^^^ source.nushell entity.name.type.nushell
66+
# ^^^^^^^^^^^^^^ source.nushell entity.name.function.nushell
67+
# ^ source.nushell
68+
# ^^^^^ source.nushell storage.modifier.nushell
5669
# ^ source.nushell
5770
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.begin.nushell
5871
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.end.nushell
@@ -61,12 +74,13 @@
6174
# ^ source.nushell meta.function.body.nushell punctuation.definition.function.end.nushell
6275
>
6376
>export def --env 'my_function2' --env [] {}
64-
#^^^^^^^^^^^^^^^^ source.nushell entity.name.function.nushell
77+
#^^^^^^^^^^ source.nushell storage.type.function.nushell
78+
# ^ source.nushell
79+
# ^^^^^ source.nushell storage.modifier.nushell
6580
# ^ source.nushell
66-
# ^ source.nushell entity.name.type.nushell
67-
# ^^^^^^^^^^^^ source.nushell entity.name.type.nushell entity.name.type.nushell
68-
# ^ source.nushell entity.name.type.nushell
69-
# ^^^^^^ source.nushell entity.name.type.nushell
81+
# ^^^^^^^^^^^^^^ source.nushell entity.name.function.nushell
82+
# ^ source.nushell
83+
# ^^^^^ source.nushell storage.modifier.nushell
7084
# ^ source.nushell
7185
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.begin.nushell
7286
# ^ source.nushell meta.function.parameters.nushell meta.brace.square.end.nushell

0 commit comments

Comments
 (0)