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