@wooorm/starry-night
Version:
Syntax highlighting, like GitHub
604 lines (601 loc) • 24.9 kB
JavaScript
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/hustcer/nu-grammar>
// and licensed `mit`.
// See <https://github.com/wooorm/starry-night> for more info.
/**
* @import {Grammar} from '@wooorm/starry-night'
*/
/** @type {Grammar} */
const grammar = {
extensions: [],
names: ['nushell', 'nu-script', 'nushell-script'],
patterns: [
{include: '#define-variable'},
{include: '#define-alias'},
{include: '#function'},
{include: '#extern'},
{include: '#module'},
{include: '#use-module'},
{include: '#expression'},
{include: '#comment'}
],
repository: {
binary: {
begin: '\\b(0x)(\\[)',
beginCaptures: {
1: {name: 'constant.numeric.nushell'},
2: {name: 'meta.brace.square.begin.nushell'}
},
end: '\\]',
endCaptures: {0: {name: 'meta.brace.square.begin.nushell'}},
name: 'constant.binary.nushell',
patterns: [{match: '[0-9a-fA-F]{2}', name: 'constant.numeric.nushell'}]
},
'braced-expression': {
begin: '\\{',
beginCaptures: {
0: {name: 'punctuation.section.block.begin.bracket.curly.nushell'}
},
end: '\\}',
endCaptures: {
0: {name: 'punctuation.section.block.end.bracket.curly.nushell'}
},
name: 'meta.expression.braced.nushell',
patterns: [
{
begin: '(?<=\\{)\\s*\\|',
end: '\\|',
name: 'meta.closure.parameters.nushell',
patterns: [{include: '#function-parameter'}]
},
{
captures: {
1: {name: 'variable.other.nushell'},
2: {name: 'keyword.control.nushell'}
},
match: '(\\w+)\\s*(:)\\s*'
},
{
captures: {
1: {name: 'variable.other.nushell'},
2: {
name: 'variable.other.nushell',
patterns: [{include: '#paren-expression'}]
},
3: {name: 'keyword.control.nushell'}
},
match: '(\\$"((?:[^"\\\\]|\\\\.)*)")\\s*(:)\\s*',
name: 'meta.record-entry.nushell'
},
{
captures: {
1: {name: 'variable.other.nushell'},
2: {name: 'keyword.control.nushell'}
},
match: '("(?:[^"\\\\]|\\\\.)*")\\s*(:)\\s*',
name: 'meta.record-entry.nushell'
},
{
captures: {
1: {name: 'variable.other.nushell'},
2: {
name: 'variable.other.nushell',
patterns: [{include: '#paren-expression'}]
},
3: {name: 'keyword.control.nushell'}
},
match: "(\\$'([^']*)')\\s*(:)\\s*",
name: 'meta.record-entry.nushell'
},
{
captures: {
1: {name: 'variable.other.nushell'},
2: {name: 'keyword.control.nushell'}
},
match: "('[^']*')\\s*(:)\\s*",
name: 'meta.record-entry.nushell'
},
{include: '#spread'},
{include: 'source.nushell'}
]
},
command: {
begin:
'(?<!\\w)(?:(\\^)|(?![0-9]|\\$))([\\w.!]+(?:(?: (?!-)[\\w\\-.!]+(?:(?= |\\))|$)|[\\w\\-.!]+))*|(?<=\\^)\\$?(?:"[^"]+"|\'[^\']+\'))',
beginCaptures: {
1: {name: 'keyword.operator.nushell'},
2: {
patterns: [
{include: '#control-keywords'},
{
captures: {0: {name: 'keyword.other.builtin.nushell'}},
match: '(?:ansi|char) \\w+'
},
{
captures: {
1: {name: 'keyword.other.builtin.nushell'},
2: {patterns: [{include: '#value'}]}
},
match:
'(a(?:l(?:ias|l)|n(?:si(?: (?:gradient|link|strip))?|y)|ppend|st|ttr(?: (?:category|deprecated|example|search-terms))?)|b(?:its(?: (?:and|not|or|ro(?:l|r)|sh(?:l|r)|xor))?|reak|ytes(?: (?:a(?:dd|t)|build|collect|ends-with|index-of|length|re(?:move|place|verse)|s(?:plit|tarts-with)))?)|c(?:al|d|h(?:ar|unk(?:-by|s))|lear|o(?:l(?:lect|umns)|m(?:mandline(?: (?:edit|get-cursor|set-cursor))?|p(?:act|lete))|n(?:fig(?: (?:env|flatten|nu|reset|use-colors))?|st|tinue))|p)|d(?:ate(?: (?:f(?:ormat|rom-human)|humanize|list-timezone|now|to-timezone))?|e(?:bug(?: (?:e(?:nv|xperimental-options)|info|profile))?|code(?: (?:base(?:32(?:hex)?|64)|hex))?|f(?:ault)?|scribe|tect(?: columns)?)|o|rop(?: (?:column|nth))?|t(?: (?:add|diff|format|now|part|to|utcnow))?|u)|e(?:ach(?: while)?|cho|moji|n(?:code(?: (?:base(?:32(?:hex)?|64)|hex))?|umerate)|rror(?: make)?|very|x(?:ec|it|p(?:l(?:ain|ore)|ort(?: (?:alias|const|def|extern|module|use)|-env)?)|tern))|f(?:i(?:l(?:e|l|ter)|nd|rst)|latten|or(?:mat(?: (?:bits|d(?:ate|uration)|filesize|number|pattern))?)?|rom(?: (?:csv|eml|i(?:cs|ni)|json|msgpack(?:z)?|nuon|ods|p(?:arquet|list)|ssv|t(?:oml|sv)|url|vcf|x(?:lsx|ml)|y(?:aml|ml)))?)|g(?:e(?:nerate|t)|lob|r(?:id|oup-by)|stat)|h(?:ash(?: (?:md5|sha256))?|e(?:aders|lp(?: (?:aliases|commands|e(?:scapes|xterns)|modules|operators|pipe-and-redirect))?)|i(?:de(?:-env)?|sto(?:gram|ry(?: (?:import|session))?))|ttp(?: (?:delete|get|head|options|p(?:atch|ost|ut)))?)|i(?:f|gnore|n(?:c|put(?: list(?:en)?)?|s(?:ert|pect)|t(?:erleave|o(?: (?:b(?:inary|ool)|cell-path|d(?:atetime|uration)|f(?:ilesize|loat)|glob|int|record|s(?:qlite|tring)|value))?))|s-(?:admin|empty|not-empty|terminal)|tems)|j(?:o(?:b(?: (?:flush|id|kill|list|recv|s(?:end|pawn)|tag|unfreeze))?|in)|son path|walk)|k(?:eybindings(?: (?:default|list(?:en)?))?|ill)|l(?:ast|e(?:ngth|t(?:-env)?)|ines|o(?:ad-env|op)|s)|m(?:at(?:ch|h(?: (?:a(?:bs|rc(?:cos(?:h)?|sin(?:h)?|tan(?:h)?)|vg)|c(?:eil|os(?:h)?)|exp|floor|l(?:n|og)|m(?:ax|edian|in|ode)|product|round|s(?:in(?:h)?|qrt|tddev|um)|tan(?:h)?|variance))?)|e(?:rge(?: deep)?|tadata(?: (?:access|set))?)|k(?:dir|temp)|o(?:dule|ve)|ut|v)|nu-(?:check|highlight)|o(?:pen|verlay(?: (?:hide|list|new|use))?)|p(?:a(?:nic|r(?:-each|se)|th(?: (?:basename|dirname|ex(?:ists|pand)|join|parse|relative-to|s(?:elf|plit)|type))?)|lugin(?: (?:add|list|rm|stop|use))?|o(?:lars(?: (?:a(?:gg(?:-groups)?|ll-(?:false|true)|ppend|rg-(?:m(?:ax|in)|sort|true|unique|where)|s(?:-date(?:time)?)?)|c(?:a(?:che|st)|o(?:l(?:lect|umns)?|n(?:cat(?:-str)?|tains|vert-time-zone)|unt(?:-null)?)|u(?:mulative|t))|d(?:atepart|ecimal|rop(?:-(?:duplicates|nulls))?|ummies)|exp(?:lode|r-not)|f(?:etch|i(?:l(?:l-n(?:an|ull)|ter(?:-with)?)|rst)|latten)|g(?:et(?:-(?:day|hour|m(?:inute|onth)|nanosecond|ordinal|second|week(?:day)?|year))?|roup-by)|horizontal|i(?:mplode|nt(?:eger|o-(?:d(?:f|type)|lazy|nu|repr|schema))|s-(?:duplicated|in|n(?:ot-null|ull)|unique))|join(?:-where)?|l(?:ast|en|i(?:st-contains|t)|owercase)|m(?:a(?:th|x)|e(?:an|dian)|in)|n(?:-unique|ot)|o(?:pen|therwise|ver)|p(?:ivot|rofile)|q(?:cut|u(?:antile|ery))|r(?:e(?:name|place(?:-time-zone)?|verse)|olling)|s(?:a(?:mple|ve)|chema|e(?:lect|t(?:-with-idx)?)|h(?:ape|ift)|lice|ort-by|t(?:d|ore-(?:get|ls|rm)|r(?:-(?:join|lengths|replace(?:-all)?|s(?:lice|plit|trip-chars))|ftime|uct-json-encode))|um(?:mary)?)|t(?:ake|runcate)|u(?:n(?:ique|nest|pivot)|ppercase)|va(?:lue-counts|r)|w(?:hen|ith-column)))?|rt)|r(?:epend|int)|s)|query(?: (?:db|git|json|web(?:page-info)?|xml))?|r(?:andom(?: (?:b(?:inary|ool)|chars|dice|float|int|uuid))?|e(?:duce|g(?:ex|istry(?: query)?)|ject|name|turn|verse)|m|o(?:ll(?: (?:down|left|right|up))?|tate)|un-(?:external|internal))|s(?:ave|c(?:hema|ope(?: (?:aliases|commands|e(?:ngine-stats|xterns)|modules|variables))?)|e(?:lect|q(?: (?:char|date))?)|huffle|kip(?: (?:until|while))?|l(?:eep|ice)|o(?:rt(?:-by)?|urce(?:-env)?)|plit(?: (?:c(?:ell-path|hars|olumn)|list|row|words))?|t(?:art|or(?: (?:create|delete|export|i(?:mport|nsert)|open|reset|update))?|r(?: (?:c(?:a(?:mel-case|pitalize)|o(?:mpress|ntains))|d(?:e(?:compress|dent|unicode)|istance|owncase)|e(?:nds-with|xpand)|inde(?:nt|x-of)|join|kebab-case|length|pascal-case|re(?:place|verse)|s(?:creaming-snake-case|hl-(?:quote|split)|imilarity|lug|nake-case|ta(?:rts-with|ts)|ubstring)|t(?:itle-case|rim)|upcase|wrap)|ess_internals)?)|ys(?: (?:cpu|disks|host|mem|net|temp|users))?)|t(?:a(?:ble|ke(?: (?:until|while))?)|e(?:e|rm(?: (?:query|size))?)|imeit|o(?: (?:csv|html|json|m(?:d|sgpack(?:z)?)|nuon|p(?:arquet|list)|t(?:ext|oml|sv)|xml|y(?:aml|ml))|uch)?|r(?:anspose|y)|utor)|u(?:limit|n(?:ame|iq(?:-by)?)|p(?:date(?: cells)?|sert)|rl(?: (?:build-query|decode|encode|join|parse|split-query))?|se)|v(?:alues|ersion(?: check)?|iew(?: (?:blocks|files|ir|s(?:ource|pan)))?)|w(?:atch|h(?:ere|i(?:ch|le)|oami)|i(?:ndow|th-env)|rap)|zip)(?![\\w-])( (.*))?'
},
{
captures: {1: {patterns: [{include: '#paren-expression'}]}},
match: '(?<=\\^)(?:\\$("[^"]+"|\'[^\']+\')|"[^"]+"|\'[^\']+\')',
name: 'entity.name.type.external.nushell'
},
{
captures: {
1: {name: 'entity.name.type.external.nushell'},
2: {patterns: [{include: '#value'}]}
},
match: '([\\w.]+(?:-[\\w.!]+)*)(?: (.*))?'
},
{include: '#value'}
]
}
},
end: '(?=\\||\\)|\\}|;)|$',
name: 'meta.command.nushell',
patterns: [
{include: '#parameters'},
{include: '#spread'},
{include: '#value'}
]
},
comment: {match: '(#.*)$', name: 'comment.nushell'},
'constant-keywords': {
match: '\\b(?:true|false|null)\\b',
name: 'constant.language.nushell'
},
'constant-value': {
patterns: [
{include: '#constant-keywords'},
{include: '#datetime'},
{include: '#numbers'},
{include: '#numbers-hexa'},
{include: '#numbers-octal'},
{include: '#numbers-binary'},
{include: '#binary'}
]
},
'control-keywords': {
match:
'(?<![0-9a-zA-Z_\\-.\\/:\\\\])(?:break|continue|else(?: if)?|for|if|loop|mut|return|try|while)(?![0-9a-zA-Z_\\-.\\/:\\\\])',
name: 'keyword.control.nushell'
},
datetime: {
match:
'\\b\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:\\+\\d{2}:?\\d{2}|Z)?)?\\b',
name: 'constant.numeric.nushell'
},
'define-alias': {
captures: {
1: {name: 'entity.name.function.nushell'},
2: {name: 'entity.name.type.nushell'},
3: {patterns: [{include: '#operators'}]}
},
match: '((?:export )?alias)\\s+([\\w\\-!]+)\\s*(=)'
},
'define-variable': {
captures: {
1: {name: 'keyword.other.nushell'},
2: {name: 'variable.other.nushell'},
3: {patterns: [{include: '#operators'}]}
},
match: '(let|mut|(?:export\\s+)?const)\\s+(\\w+)\\s+(=)'
},
expression: {
patterns: [
{include: '#pre-command'},
{include: '#for-loop'},
{include: '#operators'},
{match: '\\|', name: 'keyword.control.nushell'},
{include: '#control-keywords'},
{include: '#constant-value'},
{include: '#string-raw'},
{include: '#command'},
{include: '#value'}
]
},
extern: {
begin: '((?:export\\s+)?extern)\\s+([\\w\\-]+|"[\\w\\- ]+")',
beginCaptures: {
1: {name: 'entity.name.function.nushell'},
2: {name: 'entity.name.type.nushell'}
},
end: '(?<=\\])',
endCaptures: {0: {name: 'punctuation.definition.function.end.nushell'}},
patterns: [{include: '#function-parameters'}]
},
'for-loop': {
begin: '(for)\\s+(\\$?\\w+)\\s+(in)\\s+(.+)\\s*(\\{)',
beginCaptures: {
1: {name: 'keyword.other.nushell'},
2: {name: 'variable.other.nushell'},
3: {name: 'keyword.other.nushell'},
4: {patterns: [{include: '#value'}]},
5: {name: 'punctuation.section.block.begin.bracket.curly.nushell'}
},
end: '\\}',
endCaptures: {
0: {name: 'punctuation.section.block.end.bracket.curly.nushell'}
},
name: 'meta.for-loop.nushell',
patterns: [{include: 'source.nushell'}]
},
function: {
begin:
'((?:export\\s+)?def)(?:\\s+((?:--\\w+(?:\\s+--\\w+)*)))?\\s+([\\w\\-]+|"[\\w\\- ]+"|\'[\\w\\- ]+\'|`[\\w\\- ]+`)(?:\\s+((?:--\\w+(?:\\s+--\\w+)*)))?',
beginCaptures: {
1: {name: 'entity.name.function.nushell'},
2: {name: 'entity.name.function.nushell'},
3: {name: 'entity.name.type.nushell'},
4: {name: 'entity.name.function.nushell'}
},
end: '(?<=\\})',
patterns: [
{include: '#function-parameters'},
{include: '#function-body'},
{include: '#function-inout'}
]
},
'function-body': {
begin: '\\{',
beginCaptures: {
0: {name: 'punctuation.definition.function.begin.nushell'}
},
end: '\\}',
endCaptures: {0: {name: 'punctuation.definition.function.end.nushell'}},
name: 'meta.function.body.nushell',
patterns: [{include: 'source.nushell'}]
},
'function-inout': {
patterns: [
{include: '#types'},
{match: '->', name: 'keyword.operator.nushell'},
{include: '#function-multiple-inout'}
]
},
'function-multiple-inout': {
beginCaptures: {
1: {name: 'punctuation.definition.in-out.nushell'},
2: {name: 'meta.brace.square.begin.nushell'}
},
end: '\\]',
endCaptures: {0: {name: 'meta.brace.square.end.nushell'}},
patterns: [
{include: '#types'},
{
captures: {1: {name: 'punctuation.separator.nushell'}},
match: '\\s*(,)\\s*'
},
{
captures: {1: {name: 'keyword.operator.nushell'}},
match: '\\s+(->)\\s+'
}
]
},
'function-parameter': {
patterns: [
{
captures: {1: {name: 'keyword.control.nushell'}},
match: '(-{0,2}|\\.{3})[\\w-]+(?:\\((-[\\w?])\\))?',
name: 'variable.parameter.nushell'
},
{
begin: '\\??:\\s*',
end: '(?=(?:\\s+(?:-{0,2}|\\.{3})[\\w-]+)|(?:\\s*(?:,|\\]|\\||@|=|#|$)))',
patterns: [{include: '#types'}]
},
{
begin: '@(?="|\')',
end: '(?<="|\')',
patterns: [{include: '#string'}]
},
{
begin: '=\\s*',
end: '(?=(?:\\s+-{0,2}[\\w-]+)|(?:\\s*(?:,|\\]|\\||#|$)))',
name: 'default.value.nushell',
patterns: [{include: '#value'}]
}
]
},
'function-parameters': {
begin: '\\[',
beginCaptures: {0: {name: 'meta.brace.square.begin.nushell'}},
end: '\\]',
endCaptures: {0: {name: 'meta.brace.square.end.nushell'}},
name: 'meta.function.parameters.nushell',
patterns: [{include: '#function-parameter'}, {include: '#comment'}]
},
'internal-variables': {
match: '\\$(?:nu|env)\\b',
name: 'variable.language.nushell'
},
keyword: {match: '(?:def(?:-env)?)', name: 'keyword.other.nushell'},
module: {
begin: '((?:export\\s+)?module)\\s+([\\w\\-]+)\\s*\\{',
beginCaptures: {
1: {name: 'entity.name.function.nushell'},
2: {name: 'entity.name.namespace.nushell'}
},
end: '\\}',
endCaptures: {0: {name: 'punctuation.definition.module.end.nushell'}},
name: 'meta.module.nushell',
patterns: [{include: 'source.nushell'}]
},
numbers: {
match:
'(?<![\\w-])_*+[-+]?_*+(?:(?i:NaN|infinity|inf)_*+|(?:\\d[\\d_]*+\\.?|\\._*+\\d)[\\d_]*+(?i:E_*+[-+]?_*+\\d[\\d_]*+)?)(?i:ns|us|µs|ms|sec|min|hr|day|wk|b|kb|mb|gb|tb|pt|eb|zb|kib|mib|gib|tib|pit|eib|zib)?(?:(?![\\w.])|(?=\\.\\.))',
name: 'constant.numeric.nushell'
},
'numbers-binary': {
match: '(?<![\\w-])_*+0_*+b_*+[01][01_]*+(?![\\w.])',
name: 'constant.numeric.nushell'
},
'numbers-hexa': {
match: '(?<![\\w-])_*+0_*+x_*+[0-9a-fA-F][0-9a-fA-F_]*+(?![\\w.])',
name: 'constant.numeric.nushell'
},
'numbers-octal': {
match: '(?<![\\w-])_*+0_*+o_*+[0-7][0-7_]*+(?![\\w.])',
name: 'constant.numeric.nushell'
},
operators: {
patterns: [
{include: '#operators-word'},
{include: '#operators-symbols'},
{include: '#ranges'}
]
},
'operators-symbols': {
match:
'(?<= )(?:(?:\\+|\\-|\\*|\\/)=?|\\/\\/|\\*\\*|!=|[<>=]=?|[!=]~|\\+\\+=?)(?= |$)',
name: 'keyword.control.nushell'
},
'operators-word': {
match:
'(?<= |\\()(?:mod|in|not-(?:in|like|has)|not|and|or|xor|bit-(?:or|and|xor|shl|shr)|starts-with|ends-with|like|has)(?= |\\)|$)',
name: 'keyword.control.nushell'
},
parameters: {
captures: {1: {name: 'keyword.control.nushell'}},
match: '(?<=\\s)(-{1,2})[\\w-]+',
name: 'variable.parameter.nushell'
},
'paren-expression': {
begin: '\\(',
beginCaptures: {0: {name: 'meta.brace.round.begin.nushell'}},
end: '\\)',
endCaptures: {0: {name: 'meta.brace.round.end.nushell'}},
name: 'meta.expression.parenthesis.nushell',
patterns: [{include: '#expression'}]
},
'pre-command': {
begin: '(\\w+)(=)',
beginCaptures: {
1: {name: 'variable.other.nushell'},
2: {patterns: [{include: '#operators'}]}
},
end: '(?=\\s+)',
patterns: [{include: '#value'}]
},
ranges: {match: '\\.\\.<?', name: 'keyword.control.nushell'},
spread: {match: '\\.\\.\\.(?=[^\\s\\]}])', name: 'keyword.control.nushell'},
string: {
patterns: [
{include: '#string-single-quote'},
{include: '#string-backtick'},
{include: '#string-double-quote'},
{include: '#string-interpolated-double'},
{include: '#string-interpolated-single'},
{include: '#string-raw'},
{include: '#string-bare'}
]
},
'string-backtick': {
begin: '`',
beginCaptures: {0: {name: 'punctuation.definition.string.begin.nushell'}},
end: '`',
endCaptures: {0: {name: 'punctuation.definition.string.end.nushell'}},
name: 'string.quoted.single.nushell'
},
'string-bare': {
match: '[^$\\[{("\',|#\\s|;][^\\[\\]{}()"\'\\s,|;]*',
name: 'string.bare.nushell'
},
'string-double-quote': {
begin: '"',
beginCaptures: {0: {name: 'punctuation.definition.string.begin.nushell'}},
end: '"',
endCaptures: {0: {name: 'punctuation.definition.string.end.nushell'}},
name: 'string.quoted.double.nushell',
patterns: [{match: '\\w+'}, {include: '#string-escape'}]
},
'string-escape': {
match: '\\\\(?:[bfrnt\\\\\'"/]|u[0-9a-fA-F]{4})',
name: 'constant.character.escape.nushell'
},
'string-interpolated-double': {
begin: '\\$"',
beginCaptures: {0: {name: 'punctuation.definition.string.begin.nushell'}},
end: '"',
endCaptures: {0: {name: 'punctuation.definition.string.end.nushell'}},
name: 'string.interpolated.double.nushell',
patterns: [
{match: '\\\\[()]', name: 'constant.character.escape.nushell'},
{include: '#string-escape'},
{include: '#paren-expression'}
]
},
'string-interpolated-single': {
begin: "\\$'",
beginCaptures: {0: {name: 'punctuation.definition.string.begin.nushell'}},
end: "'",
endCaptures: {0: {name: 'punctuation.definition.string.end.nushell'}},
name: 'string.interpolated.single.nushell',
patterns: [{include: '#paren-expression'}]
},
'string-raw': {
begin: "r(#+)'",
beginCaptures: {0: {name: 'punctuation.definition.string.begin.nushell'}},
end: "'\\1",
endCaptures: {0: {name: 'punctuation.definition.string.end.nushell'}},
name: 'string.raw.nushell'
},
'string-single-quote': {
begin: "'",
beginCaptures: {0: {name: 'punctuation.definition.string.begin.nushell'}},
end: "'",
endCaptures: {0: {name: 'punctuation.definition.string.end.nushell'}},
name: 'string.quoted.single.nushell'
},
table: {
begin: '\\[',
beginCaptures: {0: {name: 'meta.brace.square.begin.nushell'}},
end: '\\]',
endCaptures: {0: {name: 'meta.brace.square.end.nushell'}},
name: 'meta.table.nushell',
patterns: [
{include: '#spread'},
{include: '#value'},
{match: ',', name: 'punctuation.separator.nushell'}
]
},
types: {
patterns: [
{
begin: '\\b(list)\\s*<',
beginCaptures: {1: {name: 'entity.name.type.nushell'}},
end: '>',
name: 'meta.list.nushell',
patterns: [{include: '#types'}]
},
{
begin: '\\b(record)\\s*<',
beginCaptures: {1: {name: 'entity.name.type.nushell'}},
end: '>',
name: 'meta.record.nushell',
patterns: [
{
captures: {1: {name: 'variable.parameter.nushell'}},
match: "([\\w\\-]+|\"[\\w\\- ]+\"|'[^']+')\\s*:\\s*"
},
{include: '#types'}
]
},
{match: '\\b(\\w+)\\b', name: 'entity.name.type.nushell'}
]
},
'use-module': {
patterns: [
{
captures: {
1: {name: 'entity.name.function.nushell'},
2: {name: 'entity.name.namespace.nushell'},
3: {name: 'keyword.other.nushell'}
},
match:
'^\\s*((?:export )?use)\\s+([\\w\\-]+|"[\\w\\- ]+"|\'[\\w\\- ]+\')(?:\\s+([\\w\\-]+|"[\\w\\- ]+"|\'[\\w\\- ]+\'|\\*))?\\s*;?$'
},
{
begin:
'^\\s*((?:export )?use)\\s+([\\w\\-]+|"[\\w\\- ]+"|\'[\\w\\- ]+\')\\s*\\[',
beginCaptures: {
1: {name: 'entity.name.function.nushell'},
2: {name: 'entity.name.namespace.nushell'}
},
end: '(\\])\\s*;?\\s*$',
endCaptures: {1: {name: 'meta.brace.square.end.nushell'}},
patterns: [
{
captures: {1: {name: 'keyword.other.nushell'}},
match: '([\\w\\-]+|"[\\w\\- ]+"|\'[\\w\\- ]+\'|\\*),?'
},
{include: '#comment'}
]
},
{
captures: {
2: {name: 'entity.name.function.nushell'},
3: {
name: 'string.bare.nushell',
patterns: [
{
captures: {1: {name: 'entity.name.namespace.nushell'}},
match: '([\\w\\- ]+)(?:\\.nu)?(?=$|"|\')'
}
]
},
4: {name: 'keyword.other.nushell'}
},
match:
"(?<path>(?:/|\\\\|~[\\/\\\\]|\\.\\.?[\\/\\\\])?(?:[^\\/\\\\]+[\\/\\\\])*[\\w\\- ]+(?:\\.nu)?){0}^\\s*((?:export )?use)\\s+(\"\\g<path>\"|'\\g<path>\\'|(?![\"'])\\g<path>)(?:\\s+([\\w\\-]+|\"[\\w\\- ]+\"|'[^']+'|\\*))?\\s*;?$"
},
{
begin:
'(?<path>(?:/|\\\\|~[\\/\\\\]|\\.\\.?[\\/\\\\])?(?:[^\\/\\\\]+[\\/\\\\])*[\\w\\- ]+(?:\\.nu)?){0}^\\s*((?:export )?use)\\s+("\\g<path>"|\'\\g<path>\\\'|(?!["\'])\\g<path>)\\s+\\[',
beginCaptures: {
2: {name: 'entity.name.function.nushell'},
3: {
name: 'string.bare.nushell',
patterns: [
{
captures: {1: {name: 'entity.name.namespace.nushell'}},
match: '([\\w\\- ]+)(?:\\.nu)?(?=$|"|\')'
}
]
}
},
end: '(\\])\\s*;?\\s*$',
endCaptures: {1: {name: 'meta.brace.square.end.nushell'}},
patterns: [
{
captures: {0: {name: 'keyword.other.nushell'}},
match: '([\\w\\-]+|"[\\w\\- ]+"|\'[\\w\\- ]+\'|\\*),?'
},
{include: '#comment'}
]
},
{
captures: {0: {name: 'entity.name.function.nushell'}},
match: '^\\s*(?:export )?use\\b'
}
]
},
value: {
patterns: [
{include: '#variables'},
{include: '#variable-fields'},
{include: '#control-keywords'},
{include: '#constant-value'},
{include: '#table'},
{include: '#operators'},
{include: '#paren-expression'},
{include: '#braced-expression'},
{include: '#string'},
{include: '#comment'}
]
},
'variable-fields': {
match: '(?<=\\)|\\}|\\])(?:\\.(?:[\\w-]+|"[\\w\\- ]+"))+',
name: 'variable.other.nushell'
},
variables: {
captures: {
1: {
patterns: [
{include: '#internal-variables'},
{match: '\\$.+', name: 'variable.other.nushell'}
]
},
2: {name: 'variable.other.nushell'}
},
match: '(\\$[a-zA-Z0-9_]+)((?:\\.(?:[\\w-]+|"[\\w\\- ]+"))*)'
}
},
scopeName: 'source.nushell'
}
export default grammar