vim-polyglot/syntax/nix.vim
2015-12-17 10:49:17 +01:00

132 lines
3.9 KiB
VimL

if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nix') == -1
"
" Syntax file for Nix
"
" TODO:
" Emphasize :
" Deemphasize ;
" Consistent ()
" rec (red?)
if exists("b:current_syntax")
finish
endif
" Operators
syn match nixOperator "\V++"
syn match nixOperator "\V+"
syn match nixOperator "\V!"
syn match nixOperator "\V=="
syn match nixOperator "\V!="
syn match nixOperator "\V&&"
syn match nixOperator "\V||"
syn match nixOperator "\V->"
syn match nixOperator "\V-"
syn match nixOperator "\V*"
syn match nixOperator "\V/"
syn match nixOperator "\V>"
syn match nixOperator "\V<"
" Keywords
syn keyword nixKeyword let in or assert inherit null with rec
syn keyword nixConditional if else then
syn keyword nixBoolean true false
" Builtins
syn keyword nixBuiltin builtins abort add attrNames attrValues
\ baseNameOf compareVersions concatLists currentSystem deepSeq
\ derivation dirOf div elem elemAt filter filterSource fromJSON
\ getAttr getEnv hasAttr hashString head import intersectAttrs
\ isAttrs isList isFunction isString isInt isBool isNull length
\ lessThan listToAttrs map mul parseDrvNames pathExists readDir
\ readFile removeAttrs seq stringLength sub substring tail throw
\ toFile toJSON toPath toString toXML trace typeOf tryEval
syn match nixpkgs "<nixpkgs>"
syn match nixSpecialOper "\V@\|;\|,\|?\|..."
" Attribute Lists
"syn match nixBrace "\v[(){}\[\]]|rec\s*\{"
syn region nixSet matchgroup=nixBraces start="{" end="}" contains=ALL
syn region nixRecSet matchgroup=nixBraces start="rec\s*{" end="}" contains=ALL
syn region nixList matchgroup=nixBraces start="\[" end="\]" contains=ALLBUT,nixAttr
syn match nixAttr "\v[0-9A-Za-z\-\_]+\ze\s*\=" contained
syn match nixInteger "\v<\d+>"
" Functions
syn match nixFuncArg "\v\zs\w+\ze\s*:"
" TODO: Exclude ; and other illegal characters
syn match nixPath "\v\S*/\S+|\S+/\S*"
" This operator is placed after nixPath to override nixPath's highlighting
syn match nixOperator "\V//"
" Strings
syn match nixStringIndentedEscapes +'''\|''\${\|''\\n\|''\\r\|''\\t+
syn match nixStringEscapes +\\"\|\\\${\|\\n\|\\r\|\\t\|\\\\+
syn region nixStringIndented
\ start=+''+
\ skip=+'''+
\ end=+''+
\ contains=nixAntiquotation,nixStringIndentedEscapes
syn region nixString
\ start=+"+
\ skip=+\\"+
\ end=+"+
\ contains=nixAntiquotation,nixStringEscapes
" If this contains nixBrace, it ignores its own closing brace and syntax gets
" thrown way off contains=ALLBUT,nixBrace
syn region nixAntiquotation start=+\${+ end=+}+ contains=nixAntiQuotation
" Comments
syn region nixMultiLineComment start=+/\*+ skip=+\\"+ end=+\*/+ contains=nixTodos
syn match nixEndOfLineComment "#.*$" contains=nixTodos
syntax keyword nixTodos TODO XXX FIXME NOTE TODOS contained
" Special (Delimiter
hi def link nixBraces Delimiter
hi def link nixpkgs Special
hi def link nixSpecialOper Special
hi def link nixStringIndentedEscapes SpecialChar
hi def link nixStringEscapes SpecialChar
hi def link nixBuiltin Special
hi def link nixOperator Operator
" Constants
hi def link nixBoolean Boolean
hi def link nixInteger Number
hi def link nixString String
hi def link nixStringIndented String
" Comments
hi def link nixMultiLineComment Comment
hi def link nixEndOfLineComment Comment
" Identifiers
hi def link nixConditional Conditional
hi def link nixKeyword Keyword
hi def link nixOperator Operator
hi def link nixException Exception
hi def link nixAttr Identifier
hi def link nixFuncArg Identifier
" PreProc
hi def link nixAntiquotation Macro
" Underlined (html links)
hi def link nixPath Underlined
" Error
syn sync maxlines=20000
syn sync minlines=50000
let b:current_syntax = 'nix'
endif