@@ -19,13 +19,13 @@ syn keyword purescriptBoolean true false
1919syn match purescriptDelimiter " [,;|.()[\] {}]"
2020
2121" Constructor
22- syn match purescriptConstructor " \< [A-Z]\w *\> "
22+ syn match purescriptConstructor " \% ( \< class \s\+\)\@ 15<! \ < [A-Z]\w *\> "
2323syn region purescriptConstructorDecl matchgroup =purescriptConstructor start =" \< [A-Z]\w *\> " end =" \( |\| $\) " me =e - 1 ,re =e - 1 contained
2424 \ containedin= purescriptData,purescriptNewtype
2525 \ contains= purescriptType,purescriptTypeVar,purescriptDelimiter,purescriptOperatorType,purescriptOperatorTypeSig,@p urescriptComment
2626
2727" Type
28- syn match purescriptType " \< [A-Z]\w *\> " contained
28+ syn match purescriptType " \% ( \< class \s\+\)\@ 15<! \ < [A-Z]\w *\> " contained
2929 \ containedin= purescriptTypeAlias
3030 \ nextgroup= purescriptType,purescriptTypeVar skipwhite
3131syn match purescriptTypeVar " \< [_a-z]\(\w\|\'\) *\> " contained
@@ -34,18 +34,29 @@ syn region purescriptTypeExport matchgroup=purescriptType start="\<[A-Z]\(\S\&[^
3434 \ contains= purescriptConstructor,purescriptDelimiter
3535
3636" 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
4051
4152" Module
4253syn match purescriptModuleName " \(\w\+\.\?\) *" contained excludenl
4354syn match purescriptModuleKeyword " \< module\> "
4455syn match purescriptModule " ^module\>\s\+\<\(\w\+\.\?\) *\> "
4556 \ contains= purescriptModuleKeyword,purescriptModuleName
4657 \ 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
4960 \ nextgroup= purescriptImportParams skipwhite
5061
5162" Import
@@ -84,8 +95,9 @@ syn match purescriptForall "∀"
8495syn keyword purescriptConditional if then else
8596syn keyword purescriptStatement do case of in
8697syn keyword purescriptLet let
98+ " syn keyword purescriptClass class
8799syn keyword purescriptWhere where
88- syn match purescriptStructure " \<\( data\| newtype\| type\| class \| kind\)\> "
100+ syn match purescriptStructure " \<\( data\| newtype\| type\| kind\)\> "
89101 \ nextgroup= purescriptType skipwhite
90102syn keyword purescriptStructure derive
91103syn keyword purescriptStructure instance
@@ -99,7 +111,7 @@ syn match purescriptInfix "^\(infix\|infixl\|infixr\)\>\s\+\([0-9]\+\)\s\+\(type
99111
100112" Operators
101113syn match purescriptOperator " \( [-!#$%&\*\+ /<=>\? @\\ ^|~:]\|\< _\>\) "
102- syn match purescriptOperatorType " \( ::\| ∷\) "
114+ syn match purescriptOperatorType " \% ( \< instance \> .* \)\@ 40<! \ ( ::\| ∷\) "
103115 \ nextgroup= purescriptForall,purescriptType skipwhite skipnl skipempty
104116syn match purescriptOperatorFunction " \( ->\| <-\| [\\ →←]\) "
105117syn match purescriptOperatorTypeSig " \( ->\| <-\| =>\| <=\| ::\| [∷∀→←⇒⇐]\) " contained
@@ -174,6 +186,8 @@ highlight def link purescriptLineComment purescriptComment
174186highlight def link purescriptBlockComment purescriptComment
175187
176188" purescript general highlights
189+ highlight def link purescriptClass purescriptKeyword
190+ highlight def link purescriptClassName Type
177191highlight def link purescriptStructure purescriptKeyword
178192highlight def link purescriptKeyword Keyword
179193highlight def link purescriptStatement Statement
0 commit comments