diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2016-09-11 13:24:17 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2016-09-11 13:24:17 +0200 | 
| commit | 0244e228faf6ee71750cbca3bdcd18411a927d22 (patch) | |
| tree | a72e5c9839ea593f6edc23f7f0e637e0a4a89413 /syntax/purescript.vim | |
| parent | ab61d2ac8eafc9c10097577736602da48ec568ca (diff) | |
| download | vim-polyglot-0244e228faf6ee71750cbca3bdcd18411a927d22.tar.gz vim-polyglot-0244e228faf6ee71750cbca3bdcd18411a927d22.zip | |
Update
Diffstat (limited to '')
| -rw-r--r-- | syntax/purescript.vim | 180 | 
1 files changed, 151 insertions, 29 deletions
| diff --git a/syntax/purescript.vim b/syntax/purescript.vim index 298a3008..eec5a0c0 100644 --- a/syntax/purescript.vim +++ b/syntax/purescript.vim @@ -11,45 +11,167 @@ if exists("b:current_syntax")    finish  endif -syn keyword purescriptModule module -syn keyword purescriptImport foreign import hiding -syn region purescriptQualifiedImport start="\<qualified\>" contains=purescriptType,purescriptDot end="\<as\>" -syn keyword purescriptStructure data newtype type class instance derive where -syn keyword purescriptStatement forall do case of let in +" Values +syn match purescriptIdentifier "\<[_a-z]\(\w\|\'\)*\>" +syn match purescriptNumber "0[xX][0-9a-fA-F]\+\|0[oO][0-7]\|[0-9]\+" +syn match purescriptFloat "[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=" +syn keyword purescriptBoolean true false + +" Delimiters +syn match purescriptDelimiter "[,;|.()[\]{}]" + +" Constructor +syn match purescriptConstructor "\<[A-Z]\w*\>" +syn region purescriptConstructorDecl matchgroup=purescriptConstructor start="\<[A-Z]\w*\>" end="\(|\|$\)"me=e-1,re=e-1 contained +  \ containedin=purescriptData,purescriptNewtype +  \ contains=purescriptType,purescriptTypeVar,purescriptDelimiter,purescriptOperatorType,purescriptOperatorTypeSig,@purescriptComment + +" Type +syn match purescriptType "\<[A-Z]\w*\>" contained +  \ containedin=purescriptTypeAlias +  \ nextgroup=purescriptType,purescriptTypeVar skipwhite +syn match purescriptTypeVar "\<[_a-z]\(\w\|\'\)*\>" contained +  \ containedin=purescriptData,purescriptNewtype,purescriptTypeAlias,purescriptFunctionDecl +syn region purescriptTypeExport matchgroup=purescriptType start="\<[A-Z]\(\S\&[^,.]\)*\>("rs=e-1 matchgroup=purescriptDelimiter end=")" contained extend +  \ contains=purescriptConstructor,purescriptDelimiter + +" Function +syn match purescriptFunction "\<[_a-z]\(\w\|\'\)*\>" contained +syn match purescriptFunction "(\(\W\&[^(),\"]\)\+)" contained extend +syn match purescriptBacktick "`[_A-Za-z][A-Za-z0-9_]*`" + +" Module +syn match purescriptModuleName "\(\w\+\.\?\)*" contained excludenl +syn match purescriptModuleKeyword "\<module\>" +syn match purescriptModule "^module\>\s\+\<\(\w\+\.\?\)*\>" +  \ contains=purescriptModuleKeyword,purescriptModuleName +  \ nextgroup=purescriptModuleParams skipwhite skipnl skipempty +syn region purescriptModuleParams start="(" end=")" fold contained keepend +  \ contains=purescriptDelimiter,purescriptType,purescriptTypeExport,purescriptFunction,purescriptStructure,purescriptModuleKeyword,@purescriptComment +  \ nextgroup=purescriptImportParams skipwhite + +" Import +syn match purescriptImportKeyword "\<\(foreign\|import\|qualified\)\>" +syn keyword purescriptAsKeyword as contained +syn keyword purescriptHidingKeyword hiding contained +syn match purescriptImport "\<import\>\s\+\(qualified\s\+\)\?\<\(\w\+\.\?\)*\>" +  \ contains=purescriptImportKeyword,purescriptModuleName +  \ nextgroup=purescriptModuleParams,purescriptImportParams skipwhite +syn match purescriptImportParams "as\s\+\(\w\+\)" contained +  \ contains=purescriptModuleName,purescriptAsKeyword +  \ nextgroup=purescriptModuleParams,purescriptImportParams skipwhite +syn match purescriptImportParams "hiding" contained +  \ contains=purescriptHidingKeyword +  \ nextgroup=purescriptModuleParams,purescriptImportParams skipwhite + +" Function declaration +syn region purescriptFunctionDecl excludenl start="^\z(\s*\)\(foreign\s\+import\_s\+\)\?[_a-z]\(\w\|\'\)*\_s\{-}\(::\|∷\)" end="^\z1\=\S"me=s-1,re=s-1 keepend +  \ contains=purescriptFunctionDeclStart,purescriptForall,purescriptOperatorType,purescriptOperatorTypeSig,purescriptType,purescriptTypeVar,purescriptDelimiter,@purescriptComment +syn match purescriptFunctionDeclStart "^\s*\(foreign\s\+import\_s\+\)\?\([_a-z]\(\w\|\'\)*\)\_s\{-}\(::\|∷\)" contained +  \ contains=purescriptImportKeyword,purescriptFunction,purescriptOperatorType +syn keyword purescriptForall forall +syn match purescriptForall "∀" + +" Keywords  syn keyword purescriptConditional if then else -syn match purescriptNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>" -syn match purescriptFloat "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>" -syn match purescriptDelimiter  "[(),;[\]{}]" -syn keyword purescriptInfix infix infixl infixr -syn match purescriptOperators "\([-!#$%&\*\+/<=>\?@\\^|~:]\|\<_\>\)" -syn match purescriptDot "\." -syn match purescriptType "\<\([A-Z][a-zA-Z0-9_]*\|_|_\)\>" -syn match purescriptLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$" +syn keyword purescriptStatement do case of let in +syn keyword purescriptWhere where +syn match purescriptStructure "\<\(data\|newtype\|type\|class\)\>" +  \ nextgroup=purescriptType skipwhite +syn keyword purescriptStructure derive +syn keyword purescriptStructure instance +  \ nextgroup=purescriptFunction skipwhite + +" Infix +syn match purescriptInfixKeyword "\<\(infix\|infixl\|infixr\)\>" +syn match purescriptInfix "^\(infix\|infixl\|infixr\)\>\s\+\([0-9]\+\)\s\+\(type\s\+\)\?\(\S\+\)\s\+as\>" +  \ contains=purescriptInfixKeyword,purescriptNumber,purescriptAsKeyword,purescriptConstructor,purescriptStructure,purescriptFunction,purescriptBlockComment +  \ nextgroup=purescriptFunction,purescriptOperator,@purescriptComment + +" Operators +syn match purescriptOperator "\([-!#$%&\*\+/<=>\?@\\^|~:]\|\<_\>\)" +syn match purescriptOperatorType "\(::\|∷\)" +  \ nextgroup=purescriptForall,purescriptType skipwhite skipnl skipempty +syn match purescriptOperatorFunction "\(->\|<-\|[\\→←]\)" +syn match purescriptOperatorTypeSig "\(->\|<-\|=>\|<=\|::\|[∷∀→←⇒⇐]\)" contained +  \ nextgroup=purescriptType skipwhite skipnl skipempty + +" Type definition +syn region purescriptData start="^data\s\+\([A-Z]\w*\)" end="^\S"me=s-1,re=s-1 transparent +syn match purescriptDataStart "^data\s\+\([A-Z]\w*\)" contained +  \ containedin=purescriptData +  \ contains=purescriptStructure,purescriptType,purescriptTypeVar +syn match purescriptForeignData "\<foreign\s\+import\s\+data\>" +  \ contains=purescriptImportKeyword,purescriptStructure +  \ nextgroup=purescriptType skipwhite + +syn region purescriptNewtype start="^newtype\s\+\([A-Z]\w*\)" end="^\S"me=s-1,re=s-1 transparent +syn match purescriptNewtypeStart "^newtype\s\+\([A-Z]\w*\)" contained +  \ containedin=purescriptNewtype +  \ contains=purescriptStructure,purescriptType,purescriptTypeVar + +syn region purescriptTypeAlias start="^type\s\+\([A-Z]\w*\)" end="^\S"me=s-1,re=s-1 transparent +syn match purescriptTypeAliasStart "^type\s\+\([A-Z]\w*\)" contained +  \ containedin=purescriptTypeAlias +  \ contains=purescriptStructure,purescriptType,purescriptTypeVar + +" String  syn match purescriptChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'" -syn match purescriptBacktick "`[A-Za-z][A-Za-z0-9_]*`"  syn region purescriptString start=+"+ skip=+\\\\\|\\"+ end=+"+ -syn region purescriptMultilineString start=+"""+ end=+"""+ -syn region purescriptBlockComment start="{-" end="-}" contains=purescriptBlockComment +syn region purescriptMultilineString start=+"""+ end=+"""+ fold + +" Comment +syn match purescriptLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$" +syn region purescriptBlockComment start="{-" end="-}" fold +  \ contains=purescriptBlockComment +syn cluster purescriptComment contains=purescriptLineComment,purescriptBlockComment + +syn sync minlines=50 + +" highlight links +highlight def link purescriptModuleKeyword purescriptKeyword +highlight def link purescriptModuleName Include +highlight def link purescriptModuleParams purescriptDelimiter +highlight def link purescriptImportKeyword purescriptKeyword +highlight def link purescriptAsKeyword purescriptKeyword +highlight def link purescriptHidingKeyword purescriptKeyword -highlight def link purescriptImport Structure -highlight def link purescriptQualifiedImport Structure -highlight def link purescriptModule Structure -highlight def link purescriptStructure Structure -highlight def link purescriptStatement Statement  highlight def link purescriptConditional Conditional +highlight def link purescriptWhere purescriptKeyword +highlight def link purescriptInfixKeyword purescriptKeyword + +highlight def link purescriptBoolean Boolean  highlight def link purescriptNumber Number  highlight def link purescriptFloat Float +  highlight def link purescriptDelimiter Delimiter -highlight def link purescriptInfix PreProc -highlight def link purescriptOperators Operator -highlight def link purescriptDot Operator -highlight def link purescriptType Include -highlight def link purescriptLineComment Comment -highlight def link purescriptBlockComment Comment + +highlight def link purescriptOperatorTypeSig purescriptOperatorType +highlight def link purescriptOperatorFunction purescriptOperatorType +highlight def link purescriptOperatorType purescriptOperator + +highlight def link purescriptConstructorDecl purescriptConstructor +highlight def link purescriptConstructor purescriptFunction + +highlight def link purescriptTypeVar Identifier +highlight def link purescriptForall purescriptStatement + +highlight def link purescriptChar String +highlight def link purescriptBacktick purescriptOperator  highlight def link purescriptString String  highlight def link purescriptMultilineString String -highlight def link purescriptChar String -highlight def link purescriptBacktick Operator + +highlight def link purescriptLineComment purescriptComment +highlight def link purescriptBlockComment purescriptComment + +" purescript general highlights +highlight def link purescriptStructure purescriptKeyword +highlight def link purescriptKeyword Keyword +highlight def link purescriptStatement Statement +highlight def link purescriptOperator Operator +highlight def link purescriptFunction Function +highlight def link purescriptType Type +highlight def link purescriptComment Comment  let b:current_syntax = "purescript" | 
