mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-10-31 23:22:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			610 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			YAML
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			610 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			YAML
		
	
	
	
		
			Vendored
		
	
	
	
| %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
 |