diff --git a/syntax/purescript.vim b/syntax/purescript.vim index 9fde48d..6c2d4d8 100644 --- a/syntax/purescript.vim +++ b/syntax/purescript.vim @@ -50,28 +50,41 @@ syn match purescriptClass "\" containedin=purescriptClassDecl contained syn match purescriptClassName "\<[A-Z]\w*\>" containedin=purescriptClassDecl contained " Module -syn match purescriptModuleName "\(\w\+\.\?\)*" contained excludenl +syn match purescriptModuleName "\(\u\w\*\.\?\)*" contained excludenl syn match purescriptModuleKeyword "\" syn match purescriptModule "^module\>\s\+\<\(\w\+\.\?\)*\>" \ contains=purescriptModuleKeyword,purescriptModuleName - \ nextgroup=purescriptModuleParams skipwhite skipnl skipempty + \ nextgroup=purescriptModuleParams + \ skipwhite + \ skipnl + \ skipempty syn region purescriptModuleParams start="(" skip="([^)]\{-})" end=")" fold contained keepend - \ contains=purescriptClassDecl,purescriptClass,purescriptClassName,purescriptDelimiter,purescriptType,purescriptTypeExport,purescriptFunction,purescriptStructure,purescriptModuleKeyword,@purescriptComment + \ contains=purescriptClassDecl,purescriptClass,purescriptClassName,purescriptDelimiter,purescriptType,purescriptTypeExport,purescriptStructure,purescriptModuleKeyword,@purescriptComment \ nextgroup=purescriptImportParams skipwhite " Import syn match purescriptImportKeyword "\<\(foreign\|import\|qualified\)\>" +syn match purescriptImport "\\s\+\(qualified\s\+\)\?\<\(\w\+\.\?\)*" + \ contains=purescriptImportKeyword,purescriptModuleName + \ nextgroup=purescriptImportParams,purescriptImportAs,purescriptImportHiding + \ skipwhite +syn region purescriptImportParams + \ start="(" + \ skip="([^)]\{-})" + \ end=")" + \ contained + \ contains=purescriptClass,purescriptClassName,purescriptStructure,purescriptType + \ nextgroup=purescriptImportAs + \ skipwhite syn keyword purescriptAsKeyword as contained +syn match purescriptImportAs "\\_s\+\u\w*" + \ contains=purescriptAsKeyword,purescriptModuleName syn keyword purescriptHidingKeyword hiding contained -syn match purescriptImport "\\s\+\(qualified\s\+\)\?\<\(\w\+\.\?\)*\>" - \ contains=purescriptImportKeyword,purescriptModuleName - \ nextgroup=purescriptModuleParams,purescriptImportParams skipwhite -syn match purescriptImportParams "as\s\+\(\w\+\)" contained - \ contains=purescriptModuleName,purescriptAsKeyword - \ nextgroup=purescriptModuleParams,purescriptImportParams skipwhite -syn match purescriptImportParams "hiding" contained +syn match purescriptImportHiding "hiding" + \ contained \ contains=purescriptHidingKeyword - \ nextgroup=purescriptModuleParams,purescriptImportParams skipwhite + \ nextgroup=purescriptImportParams + \ skipwhite " Function declaration syn region purescriptFunctionDecl @@ -95,7 +108,6 @@ syn match purescriptForall "∀" syn keyword purescriptConditional if then else syn keyword purescriptStatement do case of in syn keyword purescriptLet let -" syn keyword purescriptClass class syn keyword purescriptWhere where syn match purescriptStructure "\<\(data\|newtype\|type\|kind\)\>" \ nextgroup=purescriptType skipwhite @@ -150,6 +162,8 @@ syn cluster purescriptComment contains=purescriptLineComment,purescriptBlockComm syn sync minlines=50 " highlight links +highlight def link purescriptModule Include +highlight def link purescriptImport Include highlight def link purescriptModuleKeyword purescriptKeyword highlight def link purescriptModuleName Include highlight def link purescriptModuleParams purescriptDelimiter