@@ -50,28 +50,41 @@ syn match purescriptClass "\<class\>" containedin=purescriptClassDecl contained
5050syn match purescriptClassName " \< [A-Z]\w *\> " containedin =purescriptClassDecl contained
5151
5252" Module
53- syn match purescriptModuleName " \(\w\+ \.\?\) *" contained excludenl
53+ syn match purescriptModuleName " \(\u\w\* \.\?\) *" contained excludenl
5454syn match purescriptModuleKeyword " \< module\> "
5555syn match purescriptModule " ^module\>\s\+\<\(\w\+\.\?\) *\> "
5656 \ contains= purescriptModuleKeyword,purescriptModuleName
57- \ nextgroup= purescriptModuleParams skipwhite skipnl skipempty
57+ \ nextgroup= purescriptModuleParams
58+ \ skipwhite
59+ \ skipnl
60+ \ skipempty
5861syn region purescriptModuleParams start =" (" skip =" ([^)]\{ -})" end =" )" fold contained keepend
59- \ contains= purescriptClassDecl,purescriptClass,purescriptClassName,purescriptDelimiter,purescriptType,purescriptTypeExport,purescriptFunction, purescriptStructure,purescriptModuleKeyword,@p urescriptComment
62+ \ contains= purescriptClassDecl,purescriptClass,purescriptClassName,purescriptDelimiter,purescriptType,purescriptTypeExport,purescriptStructure,purescriptModuleKeyword,@p urescriptComment
6063 \ nextgroup= purescriptImportParams skipwhite
6164
6265" Import
6366syn match purescriptImportKeyword " \<\( foreign\| import\| qualified\)\> "
67+ syn match purescriptImport " \< import\>\s\+\( qualified\s\+\)\?\<\(\w\+\.\?\) *"
68+ \ contains= purescriptImportKeyword,purescriptModuleName
69+ \ nextgroup= purescriptImportParams,purescriptImportAs,purescriptImportHiding
70+ \ skipwhite
71+ syn region purescriptImportParams
72+ \ start = " ("
73+ \ skip = " ([^)]\{ -})"
74+ \ end = " )"
75+ \ contained
76+ \ contains= purescriptClass,purescriptClassName,purescriptStructure,purescriptType
77+ \ nextgroup= purescriptImportAs
78+ \ skipwhite
6479syn keyword purescriptAsKeyword as contained
80+ syn match purescriptImportAs " \< as\>\_ s\+\u\w *"
81+ \ contains= purescriptAsKeyword,purescriptModuleName
6582syn keyword purescriptHidingKeyword hiding contained
66- syn match purescriptImport " \< import\>\s\+\( qualified\s\+\)\?\<\(\w\+\.\?\) *\> "
67- \ contains= purescriptImportKeyword,purescriptModuleName
68- \ nextgroup= purescriptModuleParams,purescriptImportParams skipwhite
69- syn match purescriptImportParams " as\s\+\(\w\+\) " contained
70- \ contains= purescriptModuleName,purescriptAsKeyword
71- \ nextgroup= purescriptModuleParams,purescriptImportParams skipwhite
72- syn match purescriptImportParams " hiding" contained
83+ syn match purescriptImportHiding " hiding"
84+ \ contained
7385 \ contains= purescriptHidingKeyword
74- \ nextgroup= purescriptModuleParams,purescriptImportParams skipwhite
86+ \ nextgroup= purescriptImportParams
87+ \ skipwhite
7588
7689" Function declaration
7790syn region purescriptFunctionDecl
@@ -95,7 +108,6 @@ syn match purescriptForall "∀"
95108syn keyword purescriptConditional if then else
96109syn keyword purescriptStatement do case of in
97110syn keyword purescriptLet let
98- " syn keyword purescriptClass class
99111syn keyword purescriptWhere where
100112syn match purescriptStructure " \<\( data\| newtype\| type\| kind\)\> "
101113 \ nextgroup= purescriptType skipwhite
@@ -150,6 +162,8 @@ syn cluster purescriptComment contains=purescriptLineComment,purescriptBlockComm
150162syn sync minlines =50
151163
152164" highlight links
165+ highlight def link purescriptModule Include
166+ highlight def link purescriptImport Include
153167highlight def link purescriptModuleKeyword purescriptKeyword
154168highlight def link purescriptModuleName Include
155169highlight def link purescriptModuleParams purescriptDelimiter
0 commit comments