Skip to content

Commit 8bbcf0f

Browse files
author
Marcin Szamotulski
authored
Module and import syntax (#55)
* Fixed #53: import syntax * Module syntax - Match with import syntax
1 parent acda5b3 commit 8bbcf0f

File tree

1 file changed

+26
-12
lines changed

1 file changed

+26
-12
lines changed

syntax/purescript.vim

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,28 +50,41 @@ syn match purescriptClass "\<class\>" containedin=purescriptClassDecl contained
5050
syn 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
5454
syn match purescriptModuleKeyword "\<module\>"
5555
syn match purescriptModule "^module\>\s\+\<\(\w\+\.\?\)*\>"
5656
\ contains=purescriptModuleKeyword,purescriptModuleName
57-
\ nextgroup=purescriptModuleParams skipwhite skipnl skipempty
57+
\ nextgroup=purescriptModuleParams
58+
\ skipwhite
59+
\ skipnl
60+
\ skipempty
5861
syn region purescriptModuleParams start="(" skip="([^)]\{-})" end=")" fold contained keepend
59-
\ contains=purescriptClassDecl,purescriptClass,purescriptClassName,purescriptDelimiter,purescriptType,purescriptTypeExport,purescriptFunction,purescriptStructure,purescriptModuleKeyword,@purescriptComment
62+
\ contains=purescriptClassDecl,purescriptClass,purescriptClassName,purescriptDelimiter,purescriptType,purescriptTypeExport,purescriptStructure,purescriptModuleKeyword,@purescriptComment
6063
\ nextgroup=purescriptImportParams skipwhite
6164

6265
" Import
6366
syn 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
6479
syn keyword purescriptAsKeyword as contained
80+
syn match purescriptImportAs "\<as\>\_s\+\u\w*"
81+
\ contains=purescriptAsKeyword,purescriptModuleName
6582
syn 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
7790
syn region purescriptFunctionDecl
@@ -95,7 +108,6 @@ syn match purescriptForall "∀"
95108
syn keyword purescriptConditional if then else
96109
syn keyword purescriptStatement do case of in
97110
syn keyword purescriptLet let
98-
" syn keyword purescriptClass class
99111
syn keyword purescriptWhere where
100112
syn match purescriptStructure "\<\(data\|newtype\|type\|kind\)\>"
101113
\ nextgroup=purescriptType skipwhite
@@ -150,6 +162,8 @@ syn cluster purescriptComment contains=purescriptLineComment,purescriptBlockComm
150162
syn sync minlines=50
151163

152164
" highlight links
165+
highlight def link purescriptModule Include
166+
highlight def link purescriptImport Include
153167
highlight def link purescriptModuleKeyword purescriptKeyword
154168
highlight def link purescriptModuleName Include
155169
highlight def link purescriptModuleParams purescriptDelimiter

0 commit comments

Comments
 (0)