@@ -19,13 +19,13 @@ syn keyword purescriptBoolean true false
19
19
syn match purescriptDelimiter " [,;|.()[\] {}]"
20
20
21
21
" Constructor
22
- syn match purescriptConstructor " \< [A-Z]\w *\> "
22
+ syn match purescriptConstructor " \% ( \< class \s\+\)\@ 15<! \ < [A-Z]\w *\> "
23
23
syn region purescriptConstructorDecl matchgroup =purescriptConstructor start =" \< [A-Z]\w *\> " end =" \( |\| $\) " me =e - 1 ,re =e - 1 contained
24
24
\ containedin= purescriptData,purescriptNewtype
25
25
\ contains= purescriptType,purescriptTypeVar,purescriptDelimiter,purescriptOperatorType,purescriptOperatorTypeSig,@p urescriptComment
26
26
27
27
" Type
28
- syn match purescriptType " \< [A-Z]\w *\> " contained
28
+ syn match purescriptType " \% ( \< class \s\+\)\@ 15<! \ < [A-Z]\w *\> " contained
29
29
\ containedin= purescriptTypeAlias
30
30
\ nextgroup= purescriptType,purescriptTypeVar skipwhite
31
31
syn match purescriptTypeVar " \< [_a-z]\(\w\|\'\) *\> " contained
@@ -34,18 +34,29 @@ syn region purescriptTypeExport matchgroup=purescriptType start="\<[A-Z]\(\S\&[^
34
34
\ contains= purescriptConstructor,purescriptDelimiter
35
35
36
36
" Function
37
- syn match purescriptFunction " \< [_a-z]\(\w\|\'\) *\> " contained
38
- syn match purescriptFunction " (\(\W\& [^(),\" ]\)\+ )" contained extend
39
- syn match purescriptBacktick " `[_A-Za-z][A-Za-z0-9_]*`"
37
+ syn match purescriptFunction " \% (\< instance\s\+\|\< class\s\+\)\@ 18<!\< [_a-z]\(\w\|\'\) *\> " contained
38
+ " syn match purescriptFunction "\<[_a-z]\(\w\|\'\)*\>" contained
39
+ syn match purescriptFunction " (\% (\< class\s\+\)\@ 18<!\(\W\& [^(),\" ]\)\+ )" contained extend
40
+ syn match purescriptBacktick " `[_A-Za-z][A-Za-z0-9_\. ]*`"
41
+
42
+ " Class
43
+ syn region purescriptClassDecl start =" ^\% (\s *\) class\> " ms =e - 5 end =" \< where\>\| $"
44
+ \ contains= purescriptClass,purescriptClassName,purescriptOperatorType,purescriptOperator,purescriptType,purescriptWhere
45
+ \ nextgroup= purescriptClass
46
+ \ skipnl
47
+ syn match purescriptClass " \< class\> " containedin =purescriptClassDecl contained
48
+ \ nextgroup= purescriptClassName
49
+ \ skipnl
50
+ syn match purescriptClassName " \< [A-Z]\w *\> " containedin =purescriptClassDecl contained
40
51
41
52
" Module
42
53
syn match purescriptModuleName " \(\w\+\.\?\) *" contained excludenl
43
54
syn match purescriptModuleKeyword " \< module\> "
44
55
syn match purescriptModule " ^module\>\s\+\<\(\w\+\.\?\) *\> "
45
56
\ contains= purescriptModuleKeyword,purescriptModuleName
46
57
\ nextgroup= purescriptModuleParams skipwhite skipnl skipempty
47
- syn region purescriptModuleParams start =" (" end =" )" fold contained keepend
48
- \ contains= purescriptDelimiter,purescriptType,purescriptTypeExport,purescriptFunction,purescriptStructure,purescriptModuleKeyword,@p urescriptComment
58
+ syn region purescriptModuleParams start =" (" skip = " ([^)] \{ -}) " end =" )" fold contained keepend
59
+ \ contains= purescriptClassDecl,purescriptClass,purescriptClassName, purescriptDelimiter,purescriptType,purescriptTypeExport,purescriptFunction,purescriptStructure,purescriptModuleKeyword,@p urescriptComment
49
60
\ nextgroup= purescriptImportParams skipwhite
50
61
51
62
" Import
@@ -84,8 +95,9 @@ syn match purescriptForall "∀"
84
95
syn keyword purescriptConditional if then else
85
96
syn keyword purescriptStatement do case of in
86
97
syn keyword purescriptLet let
98
+ " syn keyword purescriptClass class
87
99
syn keyword purescriptWhere where
88
- syn match purescriptStructure " \<\( data\| newtype\| type\| class \| kind\)\> "
100
+ syn match purescriptStructure " \<\( data\| newtype\| type\| kind\)\> "
89
101
\ nextgroup= purescriptType skipwhite
90
102
syn keyword purescriptStructure derive
91
103
syn keyword purescriptStructure instance
@@ -99,7 +111,7 @@ syn match purescriptInfix "^\(infix\|infixl\|infixr\)\>\s\+\([0-9]\+\)\s\+\(type
99
111
100
112
" Operators
101
113
syn match purescriptOperator " \( [-!#$%&\*\+ /<=>\? @\\ ^|~:]\|\< _\>\) "
102
- syn match purescriptOperatorType " \( ::\| ∷\) "
114
+ syn match purescriptOperatorType " \% ( \< instance \> .* \)\@ 40<! \ ( ::\| ∷\) "
103
115
\ nextgroup= purescriptForall,purescriptType skipwhite skipnl skipempty
104
116
syn match purescriptOperatorFunction " \( ->\| <-\| [\\ →←]\) "
105
117
syn match purescriptOperatorTypeSig " \( ->\| <-\| =>\| <=\| ::\| [∷∀→←⇒⇐]\) " contained
@@ -174,6 +186,8 @@ highlight def link purescriptLineComment purescriptComment
174
186
highlight def link purescriptBlockComment purescriptComment
175
187
176
188
" purescript general highlights
189
+ highlight def link purescriptClass purescriptKeyword
190
+ highlight def link purescriptClassName Type
177
191
highlight def link purescriptStructure purescriptKeyword
178
192
highlight def link purescriptKeyword Keyword
179
193
highlight def link purescriptStatement Statement
0 commit comments