elm.vim (3651B)
1 " Vim syntax file 2 " Language: Elm 3 " Maintainer: Andreas Scharf <as@99n.de> 4 " Original Author: Joseph Hager <ajhager@gmail.com> 5 " Copyright: Joseph Hager <ajhager@gmail.com> 6 " License: BSD3 7 " Latest Revision: 2020-05-29 8 9 if exists('b:current_syntax') 10 finish 11 endif 12 13 " Keywords 14 syn keyword elmConditional else if of then case 15 syn keyword elmAlias alias 16 syn keyword elmTypedef contained type port 17 syn keyword elmImport exposing as import module where 18 19 " Operators 20 " elm/core 21 syn match elmOperator contained "\(<|\||>\|||\|&&\|==\|/=\|<=\|>=\|++\|::\|+\|-\|*\|/\|//\|^\|<>\|>>\|<<\|<\|>\|%\)" 22 " elm/parser 23 syn match elmOperator contained "\(|.\||=\)" 24 " elm/url 25 syn match elmOperator contained "\(</>\|<?>\)" 26 27 " Types 28 syn match elmType "\<[A-Z][0-9A-Za-z_-]*" 29 syn keyword elmNumberType number 30 31 " Modules 32 syn match elmModule "\<\([A-Z][0-9A-Za-z_'-\.]*\)\+\.[A-Za-z]"me=e-2 33 syn match elmModule "^\(module\|import\)\s\+[A-Z][0-9A-Za-z_'-\.]*\(\s\+as\s\+[A-Z][0-9A-Za-z_'-\.]*\)\?\(\s\+exposing\)\?" contains=elmImport 34 35 " Delimiters 36 syn match elmDelimiter "[,;]" 37 syn match elmBraces "[()[\]{}]" 38 39 " Functions 40 syn match elmTupleFunction "\((,\+)\)" 41 42 " Comments 43 syn keyword elmTodo TODO FIXME XXX contained 44 syn match elmLineComment "--.*" contains=elmTodo,@spell 45 syn region elmComment matchgroup=elmComment start="{-|\=" end="-}" contains=elmTodo,elmComment,@spell fold 46 47 " Strings 48 syn match elmStringEscape "\\u[0-9a-fA-F]\{4}" contained 49 syn match elmStringEscape "\\[nrfvbt\\\"]" contained 50 syn region elmString start="\"" skip="\\\"" end="\"" contains=elmStringEscape,@spell 51 syn region elmTripleString start="\"\"\"" skip="\\\"" end="\"\"\"" contains=elmStringEscape,@spell 52 syn match elmChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'" 53 54 " Lambda 55 syn region elmLambdaFunc start="\\"hs=s+1 end="->"he=e-2 56 57 " Debug 58 syn match elmDebug "Debug.\(log\|todo\|toString\)" 59 60 " Numbers 61 syn match elmInt "-\?\<\d\+\>" 62 syn match elmFloat "-\?\(\<\d\+\.\d\+\>\)" 63 64 " Identifiers 65 syn match elmTopLevelDecl "^\s*[a-zA-Z][a-zA-z0-9_]*\('\)*\s\+:\(\r\n\|\r\|\n\|\s\)\+" contains=elmOperator 66 syn match elmFuncName /^\l\w*/ 67 68 " Folding 69 syn region elmTopLevelTypedef start="type" end="\n\(\n\n\)\@=" contains=ALL fold 70 syn region elmTopLevelFunction start="^[a-zA-Z].\+\n[a-zA-Z].\+=" end="^\(\n\+\)\@=" contains=ALL fold 71 syn region elmCaseBlock matchgroup=elmCaseBlockDefinition start="^\z\(\s\+\)\<case\>" end="^\z1\@!\W\@=" end="\(\n\n\z1\@!\)\@=" end="\n\z1\@!\(\n\n\)\@=" contains=ALL fold 72 syn region elmCaseItemBlock start="^\z\(\s\+\).\+->$" end="^\z1\@!\W\@=" end="\(\n\n\z1\@!\)\@=" end="\(\n\z1\S\)\@=" contains=ALL fold 73 syn region elmLetBlock matchgroup=elmLetBlockDefinition start="\<let\>" end="\<in\>" contains=ALL fold 74 75 hi def link elmFuncName Function 76 hi def link elmCaseBlockDefinition Conditional 77 hi def link elmCaseBlockItemDefinition Conditional 78 hi def link elmLetBlockDefinition TypeDef 79 hi def link elmTopLevelDecl Function 80 hi def link elmTupleFunction Normal 81 hi def link elmTodo Todo 82 hi def link elmComment Comment 83 hi def link elmLineComment Comment 84 hi def link elmString String 85 hi def link elmTripleString String 86 hi def link elmChar String 87 hi def link elmStringEscape Special 88 hi def link elmInt Number 89 hi def link elmFloat Float 90 hi def link elmDelimiter Delimiter 91 hi def link elmBraces Delimiter 92 hi def link elmTypedef TypeDef 93 hi def link elmImport Include 94 hi def link elmConditional Conditional 95 hi def link elmAlias Delimiter 96 hi def link elmOperator Operator 97 hi def link elmType Type 98 hi def link elmNumberType Identifier 99 hi def link elmLambdaFunc Function 100 hi def link elmDebug Debug 101 hi def link elmModule Type 102 103 syn sync minlines=500 104 105 let b:current_syntax = 'elm'