{ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "name": "nushell", "scopeName": "source.nushell", "patterns": [ { "include": "#define-variable" }, { "include": "#define-alias" }, { "include": "#function" }, { "include": "#extern" }, { "include": "#module" }, { "include": "#use-module" }, { "include": "#expression" }, { "include": "#comment" } ], "repository": { "string": { "patterns": [ { "include": "#string-single-quote" }, { "include": "#string-backtick" }, { "include": "#string-double-quote" }, { "include": "#string-interpolated-double" }, { "include": "#string-interpolated-single" }, { "include": "#string-bare" } ] }, "string-escape": { "match": "\\\\(?:[bfrnt\\\\'\"/]|u[0-9a-fA-F]{4})", "name": "constant.character.escape.nushell" }, "string-bare": { "match": "[^$\\[{(\"',|#\\s|][^\\[\\]{}()\"'\\s#,|]*", "name": "string.bare.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" }, "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-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-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" } ] }, "control-keywords": { "comment": "Regex generated with list-to-tree (https://github.com/glcraft/list-to-tree)", "match": "(?=]=?|[!=]~|&&|\\|\\||\\||\\+\\+=?)(?= |$)", "name": "keyword.control.nushell" }, "operators": { "patterns": [ { "include": "#operators-word" }, { "include": "#operators-symbols" }, { "include": "#ranges" } ] }, "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": "#value" }, { "match": ",", "name": "punctuation.separator.nushell" }, { "include": "#comment" } ] }, "function-parameter-default-value": { "begin": "=\\s*", "captures": { "1": { "name": "variable.parameter.nushell" }, "2": { "name": "variable.parameter.nushell" }, "3": { "name": "keyword.operator.nushell" }, "4": { "name": "entity.name.type.nushell" } }, "end": "(?=\\])|,|$", "patterns": [ { "include": "#value" } ] }, "function-parameter-declare": { "match": "(-{0,2}[\\w-]+|\\.{3})(?:\\((-[\\w?])\\))?(?:\\s*(\\??:)\\s*(\\w+)(?:@((?:\"[^\"]+\")|(?:'[^']+')))?)?", "captures": { "1": { "name": "variable.parameter.nushell" }, "2": { "name": "variable.parameter.nushell" }, "3": { "name": "keyword.operator.nushell" }, "4": { "name": "entity.name.type.nushell" }, "5": { "name": "string.quoted.nushell" } } }, "function-parameter": { "patterns": [ { "include": "#function-parameter-declare" }, { "include": "#function-parameter-default-value" } ] }, "function-parameters": { "begin": "\\[", "beginCaptures": { "0": { "name": "meta.brace.square.begin.nushell" } }, "end": "\\]", "endCaptures": { "0": { "name": "meta.brace.square.end.nushell" } }, "patterns": [ { "include": "#function-parameter" }, { "include": "#comment" } ], "name": "meta.function.parameters.nushell" }, "define-function": { "match": "((?:export\\s+)?def(?:-env)?)\\s+([\\w\\-!]+|\"[\\w\\-! ]+\")", "captures": { "1": { "name": "entity.name.function.nushell" }, "2": { "name": "entity.name.type.nushell" } } }, "define-extern": { "match": "((?:export\\s+)?extern)\\s+([\\w\\-!]+|\"[\\w\\-! ]+\")", "captures": { "1": { "name": "entity.name.function.nushell" }, "2": { "name": "entity.name.type.nushell" } } }, "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": { "begin": "((?:export\\s+)?def(?:-env)?)\\s+([\\w\\-]+|\"[\\w\\- ]+\")", "beginCaptures": { "0": { "patterns": [ { "include": "#define-function" }, { "include": "#define-extern" } ] } }, "end": "(?<=\\})", "endCaptures": { "0": { "name": "punctuation.definition.function.end.nushell" } }, "patterns": [ { "include": "#function-parameters" }, { "include": "#function-body" } ] }, "extern": { "begin": "((?:export\\s+)?extern)\\s+([\\w\\-]+|\"[\\w\\- ]+\")", "beginCaptures": { "0": { "patterns": [ { "include": "#define-extern" } ] } }, "end": "(?<=\\])", "endCaptures": { "0": { "name": "punctuation.definition.function.end.nushell" } }, "patterns": [ { "include": "#function-parameters" } ] }, "module": { "begin": "(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" } ] }, "use-module": { "patterns": [ { "match": "^\\s*((?:export )?use)\\s+([\\w\\-]+|\"[\\w\\- ]+\"|'[\\w\\- ]+')(?:\\s+([\\w\\-]+|\"[\\w\\- ]+\"|'[\\w\\- ]+'|\\*))?\\s*;?$", "captures": { "1": { "name": "entity.name.function.nushell" }, "2": { "name": "entity.name.namespace.nushell" }, "3": { "name": "keyword.other.nushell" } } }, { "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": [ { "match": "([\\w\\-]+|\"[\\w\\- ]+\"|'[\\w\\- ]+'|\\*),?", "captures": { "1": { "name": "keyword.other.nushell" } } }, { "include": "#comment" } ] }, { "match": "(?(?:/|\\\\|~[\\/\\\\]|\\.\\.?[\\/\\\\])?(?:[^\\/\\\\]+[\\/\\\\])*[\\w\\- ]+(?:\\.nu)?){0}^\\s*((?:export )?use)\\s+(\"\\g\"|'\\g\\'|(?![\"'])\\g)(?:\\s+([\\w\\-]+|\"[\\w\\- ]+\"|'[^']+'|\\*))?\\s*;?$", "captures": { "2": { "name": "entity.name.function.nushell" }, "3": { "name": "string.bare.nushell", "patterns": [ { "match": "([\\w\\- ]+)(?:\\.nu)?(?=$|\"|')", "captures": { "1": { "name": "entity.name.namespace.nushell" } } } ] }, "4": { "name": "keyword.other.nushell" } } }, { "begin": "(?(?:/|\\\\|~[\\/\\\\]|\\.\\.?[\\/\\\\])?(?:[^\\/\\\\]+[\\/\\\\])*[\\w\\- ]+(?:\\.nu)?){0}^\\s*((?:export )?use)\\s+(\"\\g\"|'\\g\\'|(?![\"'])\\g)\\s+\\[", "beginCaptures": { "2": { "name": "entity.name.function.nushell" }, "3": { "name": "string.bare.nushell", "patterns": [ { "match": "([\\w\\- ]+)(?:\\.nu)?(?=$|\"|')", "captures": { "1": { "name": "entity.name.namespace.nushell" } } } ] } }, "end": "(\\])\\s*;?\\s*$", "endCaptures": { "1": { "name": "meta.brace.square.end.nushell" } }, "patterns": [ { "match": "([\\w\\-]+|\"[\\w\\- ]+\"|'[\\w\\- ]+'|\\*),?", "captures": { "0": { "name": "keyword.other.nushell" } } }, { "include": "#comment" } ] }, { "match": "^\\s*(?:export )?use\\b", "captures": { "0": { "name": "entity.name.function.nushell" } } } ] }, "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" } ] }, "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" } ] }, "braced-expression": { "begin": "(\\{)(?:\\s*\\|([\\w, ]*)\\|)?", "beginCaptures": { "1": { "name": "punctuation.section.block.begin.bracket.curly.nushell" }, "2": { "patterns": [ { "include": "#function-parameter" }, { "match": ",", "name": "punctuation.separator.nushell" } ] } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.section.block.end.bracket.curly.nushell" } }, "name": "meta.expression.braced.nushell", "patterns": [ { "begin": "((?:(?:[^$\\(\\{\\[\"'#\\s][^\\(\\{\\[\"'#\\s]*)|\\$?(?:\"[^\"]+\"|'[^']+')))\\s*(:)\\s*", "beginCaptures": { "1": { "name": "variable.other.nushell", "patterns": [ { "include": "#paren-expression" } ] }, "2": { "patterns": [ { "include": "#operators" } ] } }, "end": "(?=,|\\s|\\})", "name": "meta.record-entry.nushell", "patterns": [ { "include": "#value" } ] }, { "include": "source.nushell" } ] }, "define-variable": { "match": "(let(?:-env)?|mut|const)\\s+(\\w+)\\s*(=)", "captures": { "1": { "name": "keyword.other.nushell" }, "2": { "name": "variable.other.nushell" }, "3": { "patterns": [ { "include": "#operators" } ] } } }, "define-alias": { "match": "((?:export )?alias)\\s+([\\w\\-!]+)\\s*(=)", "captures": { "1": { "name": "entity.name.function.nushell" }, "2": { "name": "entity.name.type.nushell" }, "3": { "patterns": [ { "include": "#operators" } ] } } }, "pre-command": { "begin": "(\\w+)(=)", "beginCaptures": { "1": { "name": "variable.other.nushell" }, "2": { "patterns": [ { "include": "#operators" } ] } }, "end": "(?=\\s+)", "patterns": [ { "include": "#value" } ] }, "command": { "begin": "(?