aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortilpner2019-05-02 22:52:01 +0200
committertilpner2019-05-02 22:52:01 +0200
commit35f5424d81e687096c7b7bd60f839deeb5e7f876 (patch)
treea6fab0e352884550b3aef22df3e17b7c321ad3ee
downloadrpb-s3-35f5424d81e687096c7b7bd60f839deeb5e7f876.tar.gz
rpb-s3-35f5424d81e687096c7b7bd60f839deeb5e7f876.tar.xz
rpb-s3-35f5424d81e687096c7b7bd60f839deeb5e7f876.zip
Add nix.sublime-syntax
Created with https://github.com/aziz/SublimeSyntaxConvertor from https://github.com/wmertens/sublime-nix/blob/master/nix.tmLanguage
-rw-r--r--syntax/nix.sublime-syntax609
1 files changed, 609 insertions, 0 deletions
diff --git a/syntax/nix.sublime-syntax b/syntax/nix.sublime-syntax
new file mode 100644
index 0000000..419a5c8
--- /dev/null
+++ b/syntax/nix.sublime-syntax
@@ -0,0 +1,609 @@
+%YAML 1.2
+---
+# http://www.sublimetext.com/docs/3/syntax.html
+name: Nix
+file_extensions:
+ - nix
+scope: source.nix
+contexts:
+ main:
+ - include: expression
+ comment:
+ - match: '/\*([^*]|\*[^\/])*'
+ push:
+ - meta_scope: comment.block.nix
+ - match: \*\/
+ pop: true
+ - include: comment-remark
+ - match: '\#'
+ push:
+ - meta_scope: comment.line.number-sign.nix
+ - match: $
+ pop: true
+ - include: comment-remark
+ attribute-bind:
+ - include: attribute-name
+ - include: attribute-bind-from-equals
+ attribute-bind-from-equals:
+ - match: \=
+ captures:
+ 0: keyword.operator.bind.nix
+ push:
+ - match: \;
+ captures:
+ 0: punctuation.terminator.bind.nix
+ pop: true
+ - include: expression
+ attribute-inherit:
+ - match: \binherit\b
+ captures:
+ 0: keyword.other.inherit.nix
+ push:
+ - match: \;
+ captures:
+ 0: punctuation.terminator.inherit.nix
+ pop: true
+ - match: \(
+ captures:
+ 0: punctuation.section.function.arguments.nix
+ push:
+ - match: (?=\;)
+ pop: true
+ - match: \)
+ captures:
+ 0: punctuation.section.function.arguments.nix
+ push:
+ - match: (?=\;)
+ pop: true
+ - include: bad-reserved
+ - include: attribute-name-single
+ - include: others
+ - include: expression
+ - match: '(?=[a-zA-Z\_])'
+ push:
+ - match: (?=\;)
+ pop: true
+ - include: bad-reserved
+ - include: attribute-name-single
+ - include: others
+ - include: others
+ attribute-name:
+ - match: '\b[a-zA-Z\_][a-zA-Z0-9\_\''\-]*'
+ scope: entity.other.attribute-name.multipart.nix
+ - match: \.
+ - include: string-quoted
+ - include: interpolation
+ attribute-name-single:
+ - match: '\b[a-zA-Z\_][a-zA-Z0-9\_\''\-]*'
+ scope: entity.other.attribute-name.single.nix
+ attrset-contents:
+ - include: attribute-inherit
+ - include: bad-reserved
+ - include: attribute-bind
+ - include: others
+ attrset-definition:
+ - match: '(?=\{)'
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - match: '(\{)'
+ captures:
+ 0: punctuation.definition.attrset.nix
+ push:
+ - match: '(\})'
+ captures:
+ 0: punctuation.definition.attrset.nix
+ pop: true
+ - include: attrset-contents
+ - match: '(?<=\})'
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression-cont
+ attrset-definition-brace-opened:
+ - match: '(?<=\})'
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression-cont
+ - match: (?=.?)
+ push:
+ - match: '\}'
+ captures:
+ 0: punctuation.definition.attrset.nix
+ pop: true
+ - include: attrset-contents
+ attrset-for-sure:
+ - match: (?=\brec\b)
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - match: \brec\b
+ captures:
+ 0: keyword.other.nix
+ push:
+ - match: '(?=\{)'
+ pop: true
+ - include: others
+ - include: attrset-definition
+ - include: others
+ - match: '(?=\{\s*(\}|[^,?]*(=|;)))'
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: attrset-definition
+ - include: others
+ attrset-or-function:
+ - match: '\{'
+ captures:
+ 0: punctuation.definition.attrset-or-function.nix
+ push:
+ - match: '(?=([\])};]|\b(else|then)\b))'
+ pop: true
+ - match: '(?=(\s*\}|\"|\binherit\b|\b[a-zA-Z\_][a-zA-Z0-9\_\''\-]*(\s*\.|\s*=[^=])|\$\{[a-zA-z0-9\_\''\-]+\}(\s*\.|\s*=[^=])))'
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: attrset-definition-brace-opened
+ - match: '(?=(\.\.\.|\b[a-zA-Z\_][a-zA-Z0-9\_\''\-]*\s*[,?]))'
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: function-definition-brace-opened
+ - include: bad-reserved
+ - match: '\b[a-zA-Z\_][a-zA-Z0-9\_\''\-]*'
+ captures:
+ 0: variable.parameter.function.maybe.nix
+ push:
+ - match: '(?=([\])};]|\b(else|then)\b))'
+ pop: true
+ - match: (?=\.)
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: attrset-definition-brace-opened
+ - match: \s*(\,)
+ captures:
+ 1: keyword.operator.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: function-definition-brace-opened
+ - match: (?=\=)
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: attribute-bind-from-equals
+ - include: attrset-definition-brace-opened
+ - match: (?=\?)
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: function-parameter-default
+ - match: \,
+ captures:
+ 0: keyword.operator.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: function-definition-brace-opened
+ - include: others
+ - include: others
+ bad-reserved:
+ - match: '(?<![\w''-])(if|then|else|assert|with|let|in|rec|inherit)(?![\w''-])'
+ scope: invalid.illegal.reserved.nix
+ comment-remark:
+ - match: (TODO|FIXME|BUG|\!\!\!):?
+ captures:
+ 1: markup.bold.comment.nix
+ constants:
+ - match: \b(builtins|true|false|null)\b
+ captures:
+ 0: constant.language.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression-cont
+ - match: \b(scopedImport|import|isNull|abort|throw|baseNameOf|dirOf|removeAttrs|map|toString|derivationStrict|derivation)\b
+ captures:
+ 0: support.function.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression-cont
+ - match: '\b[0-9]+\b'
+ captures:
+ 0: constant.numeric.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression-cont
+ expression:
+ - include: parens-and-cont
+ - include: list-and-cont
+ - include: string
+ - include: interpolation
+ - include: with-assert
+ - include: function-for-sure
+ - include: attrset-for-sure
+ - include: attrset-or-function
+ - include: let
+ - include: if
+ - include: operator-unary
+ - include: constants
+ - include: bad-reserved
+ - include: parameter-name-and-cont
+ - include: others
+ expression-cont:
+ - match: (?=.?)
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: parens
+ - include: list
+ - include: string
+ - include: interpolation
+ - include: function-for-sure
+ - include: attrset-for-sure
+ - include: attrset-or-function
+ - match: '(\bor\b|\.|==|!=|!|\<\=|\<|\>\=|\>|&&|\|\||-\>|//|\?|\+\+|-|\*|/(?=([^*]|$))|\+)'
+ scope: keyword.operator.nix
+ - include: constants
+ - include: bad-reserved
+ - include: parameter-name
+ - include: others
+ function-body:
+ - match: '(@\s*([a-zA-Z\_][a-zA-Z0-9\_\''\-]*)\s*)?(\:)'
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression
+ function-body-from-colon:
+ - match: (\:)
+ captures:
+ 0: punctuation.definition.function.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression
+ function-contents:
+ - include: bad-reserved
+ - include: function-parameter
+ - include: others
+ function-definition:
+ - match: (?=.?)
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: function-body-from-colon
+ - match: (?=.?)
+ push:
+ - match: (?=\:)
+ pop: true
+ - match: '(\b[a-zA-Z\_][a-zA-Z0-9\_\''\-]*)'
+ captures:
+ 0: variable.parameter.function.4.nix
+ push:
+ - match: (?=\:)
+ pop: true
+ - match: \@
+ push:
+ - match: (?=\:)
+ pop: true
+ - include: function-header-until-colon-no-arg
+ - include: others
+ - include: others
+ - match: '(?=\{)'
+ push:
+ - match: (?=\:)
+ pop: true
+ - include: function-header-until-colon-with-arg
+ - include: others
+ function-definition-brace-opened:
+ - match: (?=.?)
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: function-body-from-colon
+ - match: (?=.?)
+ push:
+ - match: (?=\:)
+ pop: true
+ - include: function-header-close-brace-with-arg
+ - match: (?=.?)
+ push:
+ - match: '(?=\})'
+ pop: true
+ - include: function-contents
+ - include: others
+ function-for-sure:
+ - match: '(?=(\b[a-zA-Z\_][a-zA-Z0-9\_\''\-]*\s*[:@]|\{[^}]*\}\s*:|\{[^#}"''/=]*[,\?]))'
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: function-definition
+ function-header-close-brace-no-arg:
+ - match: '\}'
+ captures:
+ 0: punctuation.definition.entity.function.nix
+ push:
+ - match: (?=\:)
+ pop: true
+ - include: others
+ function-header-close-brace-with-arg:
+ - match: '\}'
+ captures:
+ 0: punctuation.definition.entity.function.nix
+ push:
+ - match: (?=\:)
+ pop: true
+ - include: function-header-terminal-arg
+ - include: others
+ function-header-open-brace:
+ - match: '\{'
+ captures:
+ 0: punctuation.definition.entity.function.2.nix
+ push:
+ - match: '(?=\})'
+ pop: true
+ - include: function-contents
+ function-header-terminal-arg:
+ - match: (?=@)
+ push:
+ - match: (?=\:)
+ pop: true
+ - match: \@
+ push:
+ - match: (?=\:)
+ pop: true
+ - match: '(\b[a-zA-Z\_][a-zA-Z0-9\_\''\-]*)'
+ push:
+ - meta_scope: variable.parameter.function.3.nix
+ - match: (?=\:)
+ pop: true
+ - include: others
+ - include: others
+ function-header-until-colon-no-arg:
+ - match: '(?=\{)'
+ push:
+ - match: (?=\:)
+ pop: true
+ - include: function-header-open-brace
+ - include: function-header-close-brace-no-arg
+ function-header-until-colon-with-arg:
+ - match: '(?=\{)'
+ push:
+ - match: (?=\:)
+ pop: true
+ - include: function-header-open-brace
+ - include: function-header-close-brace-with-arg
+ function-parameter:
+ - match: (\.\.\.)
+ push:
+ - meta_scope: keyword.operator.nix
+ - match: '(,|(?=\}))'
+ pop: true
+ - include: others
+ - match: '\b[a-zA-Z\_][a-zA-Z0-9\_\''\-]*'
+ captures:
+ 0: variable.parameter.function.1.nix
+ push:
+ - match: '(,|(?=\}))'
+ captures:
+ 0: keyword.operator.nix
+ pop: true
+ - include: whitespace
+ - include: comment
+ - include: function-parameter-default
+ - include: expression
+ - include: others
+ function-parameter-default:
+ - match: \?
+ captures:
+ 0: keyword.operator.nix
+ push:
+ - match: "(?=[,}])"
+ pop: true
+ - include: expression
+ if:
+ - match: (?=\bif\b)
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - match: \bif\b
+ captures:
+ 0: keyword.other.nix
+ push:
+ - match: \bth(?=en\b)
+ captures:
+ 0: keyword.other.nix
+ pop: true
+ - include: expression
+ - match: (?<=th)en\b
+ captures:
+ 0: keyword.other.nix
+ push:
+ - match: \bel(?=se\b)
+ captures:
+ 0: keyword.other.nix
+ pop: true
+ - include: expression
+ - match: (?<=el)se\b
+ captures:
+ 0: keyword.other.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ captures:
+ 0: keyword.other.nix
+ pop: true
+ - include: expression
+ illegal:
+ - match: .
+ scope: invalid.illegal
+ interpolation:
+ - match: '\$\{'
+ captures:
+ 0: punctuation.section.embedded.begin.nix
+ push:
+ - meta_scope: markup.italic
+ - match: '\}'
+ captures:
+ 0: punctuation.section.embedded.end.nix
+ pop: true
+ - include: expression
+ let:
+ - match: (?=\blet\b)
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - match: \blet\b
+ captures:
+ 0: keyword.other.nix
+ push:
+ - match: '(?=([\])};,]|\b(in|else|then)\b))'
+ pop: true
+ - match: '(?=\{)'
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - match: '\{'
+ push:
+ - match: '\}'
+ pop: true
+ - include: attrset-contents
+ - match: '(^|(?<=\}))'
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression-cont
+ - include: others
+ - include: attrset-contents
+ - include: others
+ - match: \bin\b
+ captures:
+ 0: keyword.other.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression
+ list:
+ - match: '\['
+ captures:
+ 0: punctuation.definition.list.nix
+ push:
+ - match: '\]'
+ captures:
+ 0: punctuation.definition.list.nix
+ pop: true
+ - include: expression
+ list-and-cont:
+ - match: '(?=\[)'
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: list
+ - include: expression-cont
+ operator-unary:
+ - match: (!|-)
+ scope: keyword.operator.unary.nix
+ others:
+ - include: whitespace
+ - include: comment
+ - include: illegal
+ parameter-name:
+ - match: '\b[a-zA-Z\_][a-zA-Z0-9\_\''\-]*'
+ captures:
+ 0: variable.parameter.name.nix
+ parameter-name-and-cont:
+ - match: '\b[a-zA-Z\_][a-zA-Z0-9\_\''\-]*'
+ captures:
+ 0: variable.parameter.name.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression-cont
+ parens:
+ - match: \(
+ captures:
+ 0: punctuation.definition.expression.nix
+ push:
+ - match: \)
+ captures:
+ 0: punctuation.definition.expression.nix
+ pop: true
+ - include: expression
+ parens-and-cont:
+ - match: (?=\()
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: parens
+ - include: expression-cont
+ string:
+ - match: (?=\'\')
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - match: \'\'
+ captures:
+ 0: punctuation.definition.string.other.start.nix
+ push:
+ - meta_scope: string.quoted.other.nix
+ - match: \'\'(?!\$|\'|\\.)
+ captures:
+ 0: punctuation.definition.string.other.end.nix
+ pop: true
+ - match: \'\'(\$|\'|\\.)
+ scope: constant.character.escape.nix
+ - include: interpolation
+ - include: expression-cont
+ - match: (?=\")
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: string-quoted
+ - include: expression-cont
+ - match: '(~?[a-zA-Z0-9\.\_\-\+]*(\/[a-zA-Z0-9\.\_\-\+]+)+)'
+ captures:
+ 0: string.unquoted.path.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression-cont
+ - match: '(\<[a-zA-Z0-9\.\_\-\+]+(\/[a-zA-Z0-9\.\_\-\+]+)*\>)'
+ captures:
+ 0: string.unquoted.spath.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression-cont
+ - match: '([a-zA-Z][a-zA-Z0-9\+\-\.]*\:[a-zA-Z0-9\%\/\?\:\@\&\=\+\$\,\-\_\.\!\~\*\'']+)'
+ captures:
+ 0: string.unquoted.url.nix
+ push:
+ - match: '(?=([\])};,]|\b(else|then)\b))'
+ pop: true
+ - include: expression-cont
+ string-quoted:
+ - match: \"
+ captures:
+ 0: punctuation.definition.string.double.start.nix
+ push:
+ - meta_scope: string.quoted.double.nix
+ - match: \"
+ captures:
+ 0: punctuation.definition.string.double.end.nix
+ pop: true
+ - match: \\.
+ scope: constant.character.escape.nix
+ - include: interpolation
+ whitespace:
+ - match: \s+
+ with-assert:
+ - match: '(?<![\w''-])(with|assert)(?![\w''-])'
+ captures:
+ 0: keyword.other.nix
+ push:
+ - match: \;
+ pop: true
+ - include: expression