Skip to content

Use newer version from vim-reasonml #30

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 55 additions & 82 deletions syntax/reason.vim
Original file line number Diff line number Diff line change
Expand Up @@ -14,86 +14,56 @@ endif

" Syntax definitions {{{1
" Basic keywords {{{2
syn keyword reasonConditional switch match if else for in when fun
syn keyword reasonOperator as
syn keyword reasonConditional try switch if else for while
syn keyword reasonOperator as to downto

syn match reasonAssert "\<assert\(\w\)*!" contained
syn match reasonPanic "\<panic\(\w\)*!" contained
syn keyword reasonKeyword box nextgroup=reasonBoxPlacement skipwhite skipempty
syn keyword reasonKeyword extern nextgroup=reasonExternCrate,reasonObsoleteExternMod skipwhite skipempty
" syn keyword reasonKeyword fun nextgroup=reasonFuncName skipwhite skipempty
syn keyword reasonKeyword unsafe where while lazy
syn keyword reasonStorage and class constraint exception external include inherit let method module nonrec open private rec type val with
" FIXME: Scoped impl's name is also fallen in this category
" syn keyword reasonStorageIdent let and module type nextgroup=reasonIdentifier skipwhite skipempty
syn match reasonAssert "\<assert\(\w\)*"
syn match reasonFailwith "\<failwith\(\w\)*"

syn keyword reasonExternCrate crate contained nextgroup=reasonIdentifier,reasonExternCrateString skipwhite skipempty
" This is to get the `bar` part of `extern crate "foo" as bar;` highlighting.
syn match reasonExternCrateString /".*"\_s*as/ contained nextgroup=reasonIdentifier skipwhite transparent skipempty contains=reasonString,reasonOperator
syn keyword reasonObsoleteExternMod mod contained nextgroup=reasonIdentifier skipwhite skipempty
syn keyword reasonStorage when where fun mutable class pub pri val inherit let external rec nonrec and module type exception open include constraint
" FIXME: Scoped impl's name is also fallen in this category

syn match reasonIdentifier contains=reasonIdentifierPrime "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained
syn match reasonFuncName "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained
"
syn match labelArgument "\(\l\|_\)\(\w\|'\)*::\(?\)\?"lc=0 "Allows any space between label name and ::
syn match labelArgumentPunned "::\(?\)\?\(\l\|_\)\(\w\|'\)*"lc=0 "Allows any space between label name and ::
" syn match labelArgument "\(\l\|_\)\(\w\|'\)*::\(?\)\?"lc=0 "Allows any space between label name and ::
" syn match labelArgumentPunned "::\(?\)\?\(\l\|_\)\(\w\|'\)*"lc=0 "Allows any space between label name and ::
syn match labelArgument "\~\(\l\|_\)\(\w\|'\)*"lc=0 "Allows any space between label name and ::
syn match labelArgumentPunned "\~\(\l\|_\)\(\w\|'\)*\(?\)\?"lc=0 "Allows any space between label name and ::

syn match reasonEnumVariant "\<\u\(\w\|'\)*\>[^\.]"me=e-1
syn match reasonConstructor "\<\u\(\w\|'\)*\>"
" Polymorphic variants
syn match reasonEnumVariant "`\w\(\w\|'\)*\>"
syn match reasonConstructor "`\w\(\w\|'\)*\>"

syn match reasonModPath "\<\u\w*\."
syn match reasonModPath "\<\u\(\w\|'\)* *\."he=e-1
syn match reasonModPath "\(\<open\s\+\)\@<=\u\(\w\|\.\)*"
syn match reasonModPath "\(\<include\s\+\)\@<=\u\(\w\|\.\)*"
syn match reasonModPath "\(\<module\s\+\)\@<=\u\(\w\|\.\)*"
syn match reasonModPath "\(\<module\s\+\u\w*\s*=\s*\)\@<=\u\(\w\|\.\)*"


syn region reasonBoxPlacement matchgroup=reasonBoxPlacementParens start="(" end=")" contains=TOP contained
" Ideally we'd have syntax rules set up to match arbitrary expressions. Since
" we don't, we'll just define temporary contained rules to handle balancing
" delimiters.
syn region reasonBoxPlacementBalance start="(" end=")" containedin=reasonBoxPlacement transparent
syn region reasonBoxPlacementBalance start="\[" end="\]" containedin=reasonBoxPlacement transparent
" {} are handled by reasonFoldBraces


syn region reasonMacroRepeat matchgroup=reasonMacroRepeatDelimiters start="$(" end=")" contains=TOP nextgroup=reasonMacroRepeatCount
syn match reasonMacroRepeatCount ".\?[*+]" contained
syn match reasonMacroVariable "$\w\+"

" Reserved (but not yet used) keywords {{{2
syn keyword reasonReservedKeyword alignof become do offsetof priv pure sizeof typeof unsized yield abstract virtual final override macro

" Built-in types {{{2
syn keyword reasonType int float option list array unit ref bool string
syn keyword reasonType result int float option list array unit ref bool string

" Things from the libstd v1 prelude (src/libstd/prelude/v1.rs) {{{2
" This section is just straight transformation of the contents of the prelude,
" to make it easy to update.

" Reexported core operators {{{3
syn keyword reasonTrait Copy Send Sized Sync
syn keyword reasonTrait Drop Fn FnMut FnOnce

" Reexported functions {{{3
" There’s no point in highlighting these; when one writes drop( or drop::< it
" gets the same highlighting anyway, and if someone writes `let drop = …;` we
" don’t really want *that* drop to be highlighted.
"syn keyword reasonFunction drop

" Reexported types and traits {{{3
syn keyword reasonTrait Box
syn keyword reasonTrait ToOwned
syn keyword reasonTrait Clone
syn keyword reasonTrait PartialEq PartialOrd Eq Ord
syn keyword reasonTrait AsRef AsMut Into From
syn keyword reasonTrait Default
syn keyword reasonTrait Iterator Extend IntoIterator
syn keyword reasonTrait DoubleEndedIterator ExactSizeIterator
syn keyword reasonEnum Option
syn keyword reasonEnumVariant Some None
syn keyword reasonConstructor Some None
syn keyword reasonEnum Result
syn keyword reasonEnumVariant Ok Err
syn keyword reasonTrait SliceConcatExt
syn keyword reasonTrait String ToString
syn keyword reasonTrait Vec
syn keyword reasonConstructor Ok Error

" Other syntax {{{2
syn keyword reasonSelf self
Expand All @@ -119,16 +89,24 @@ syn match reasonEscape display contained /\\\([nrt0\\'"]\|x\x\{2}\)/
syn match reasonEscapeUnicode display contained /\\\(u\x\{4}\|U\x\{8}\)/
syn match reasonEscapeUnicode display contained /\\u{\x\{1,6}}/
syn match reasonStringContinuation display contained /\\\n\s*/
syn region reasonString start='{j|' end='|j}' contains=reasonMacroVariable,@Spell
syn region reasonString start=+b"+ skip=+\\\\\|\\"+ end=+"+ contains=reasonEscape,reasonEscapeError,reasonStringContinuation
syn region reasonString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=reasonEscape,reasonEscapeUnicode,reasonEscapeError,reasonStringContinuation,@Spell
syn region reasonString start='b\?r\z(#*\)"' end='"\z1' contains=@Spell

syn region reasonMultilineString start=+b{|+ skip=+\\\\\|\\"+ end=+|}+ contains=reasonEscape,reasonEscapeError,reasonStringContinuation
syn region reasonMultilineString start=+{|+ end=+|}+ contains=reasonEscape,reasonEscapeUnicode,reasonEscapeError,reasonStringContinuation,@Spell


" https://github.com/pangloss/vim-javascript/blob/master/syntax/javascript.vim
" lc=1 means leading context, for "not backslashed"
syntax region reasonTemplateExpression contained matchgroup=reasonTemplateBraces start=+\(^\|[^\\]\)${+lc=1 end=+}+ contains=@interpolation keepend
syntax region reasonTemplateString start=+`\($\| \)+ skip=+\\`+ end=+`+ contains=reasonTemplateExpression,jsSpecial,@Spell extend
syntax match reasonTaggedTemplate /\<\K\k*\ze`/ nextgroup=reasonTemplateString


syn region reasonAttribute start="#!\?\[" end="\]" contains=reasonString,reasonDerive
syn region reasonDerive start="derive(" end=")" contained contains=reasonDeriveTrait
" This list comes from src/libsyntax/ext/deriving/mod.rs
" Some are deprecated (Encodable, Decodable) or to be removed after a new snapshot (Show).
syn keyword reasonDeriveTrait contained Clone Hash RustcEncodable RustcDecodable Encodable Decodable PartialEq Eq PartialOrd Ord Rand Show Debug Default FromPrimitive Send Sync Copy

" Number literals
syn match reasonDecNumber display "\<[0-9][0-9_]*\%([iu]\%(size\|8\|16\|32\|64\)\)\="
Expand Down Expand Up @@ -157,7 +135,7 @@ syn match reasonCharacter /'\([^\\]\|\\\(.\|x\x\{2}\|u\x\{4}\|U\x\{8}\|u{\x\

syn match reasonShebang /\%^#![^[].*/
syn region reasonCommentLine start="//" end="$" contains=reasonTodo,@Spell
syn region reasonCommentLineDoc start="//\%(//\@!\|!\)" end="$" contains=reasonTodo,@Spell
" syn region reasonCommentLineDoc start="//\%(//\@!\|!\)" end="$" contains=reasonTodo,@Spell
syn region reasonCommentBlock matchgroup=reasonCommentBlock start="/\*\%(!\|\*[*/]\@!\)\@!" end="\*/" contains=reasonTodo,reasonCommentBlockNest,@Spell
syn region reasonCommentBlockDoc matchgroup=reasonCommentBlockDoc start="/\*\%(!\|\*[*/]\@!\)" end="\*/" contains=reasonTodo,reasonCommentBlockDocNest,@Spell
syn region reasonCommentBlockNest matchgroup=reasonCommentBlock start="/\*" end="\*/" contains=reasonTodo,reasonCommentBlockNest,@Spell contained transparent
Expand All @@ -167,7 +145,7 @@ syn region reasonCommentBlockDocNest matchgroup=reasonCommentBlockDoc start="/\*
" a comment, but in practice at present it leaves comments open two levels
" deep. But as long as you stay away from that particular case, I *believe*
" the highlighting is correct. Due to the way Vim's syntax engine works
" (greedy for start matches, unlike Rust's tokeniser which is searching for
" (greedy for start matches, unlike Zust's tokeniser which is searching for
" the earliest-starting match, start or end), I believe this cannot be solved.
" Oh you who would fix it, don't bother with things like duplicating the Block
" rules and putting ``\*\@<!`` at the start of them; it makes it worse, as
Expand All @@ -180,6 +158,10 @@ syn keyword reasonTodo contained TODO FIXME XXX NB NOTE
" Trivial folding rules to begin with.
" FIXME: use the AST to make really good folding
syn region reasonFoldBraces start="{" end="}" transparent fold
" These mess up the highlighting
" reasonIdentifier,reasonIdentifierPrime,
syntax cluster interpolation contains=reasonTemplateString,reasonCommentLine,reasonCommentBlock,reasonMultilineString,reasonString,reasonSelf,reasonBoolean,reasonType,reasonStorage,reasonAssert,reasonFailwith,reasonOperator,reasonConditional,reasonNumber,reasonCharacter,reasonConstructor,labelArgument,labelArgumentPunned,reasonCapsIdent,reasonFloat,reasonModPath,reasonDecNumber,reasonHexNumber,reasonOctNumber,reasonBinNumber,reasonArrowCharacter


" Default highlighting {{{1
hi def link labelArgument Special
Expand All @@ -189,60 +171,51 @@ hi def link reasonHexNumber reasonNumber
hi def link reasonOctNumber reasonNumber
hi def link reasonBinNumber reasonNumber
hi def link reasonIdentifierPrime reasonIdentifier
hi def link reasonTrait reasonType
hi def link reasonDeriveTrait reasonTrait

hi def link reasonMacroRepeatCount reasonMacroRepeatDelimiters
hi def link reasonMacroRepeatDelimiters Macro
hi def link reasonMacroVariable Define
hi def link reasonEscape Special
hi def link reasonEscapeUnicode reasonEscape
hi def link reasonEscapeError Error
hi def link reasonStringContinuation Special
hi def link reasonString String
hi def link reasonString String
hi def link reasonMultilineString String
hi def link reasonTemplateString String


hi def link reasonCharacterInvalid Error
hi def link reasonCharacterInvalidUnicode reasonCharacterInvalid
hi def link reasonCharacter Character
hi def link reasonNumber Number
hi def link reasonBoolean Boolean
hi def link reasonEnum reasonType
hi def link reasonEnumVariant Function
hi def link reasonModPath Macro
hi def link reasonConstructor Constant
hi def link reasonModPath Include
hi def link reasonConstant Constant
hi def link reasonSelf Constant
hi def link reasonFloat Float
hi def link reasonArrowCharacter reasonOperator
hi def link reasonOperator Keyword
hi def link reasonKeyword Keyword
hi def link reasonReservedKeyword Error
hi def link reasonConditional StorageClass
hi def link reasonConditional Conditional
hi def link reasonIdentifier Identifier
hi def link reasonCapsIdent reasonIdentifier
hi def link reasonFunction Function
hi def link reasonFuncName Function
hi def link reasonShebang Comment
hi def link reasonCommentLine Comment
hi def link reasonCommentLineDoc Comment
hi def link reasonCommentBlock reasonCommentLine
hi def link reasonCommentBlockDoc reasonCommentLineDoc
hi def link reasonAssert PreCondit
hi def link reasonPanic PreCondit
" hi def link reasonCommentLineDoc Comment
hi def link reasonCommentBlock Comment
hi def link reasonCommentBlockDoc Comment
hi def link reasonAssert Precondit
hi def link reasonFailwith PreCondit
hi def link reasonType Type
hi def link reasonTodo Todo
hi def link reasonAttribute PreProc
hi def link reasonDerive PreProc
hi def link reasonStorage Conditional
hi def link reasonStorageIdent StorageClass
hi def link reasonStorage Keyword
hi def link reasonObsoleteStorage Error
hi def link reasonExternCrate reasonKeyword
hi def link reasonObsoleteExternMod Error
hi def link reasonBoxPlacementParens Delimiter

" Other Suggestions:
" hi reasonAttribute ctermfg=cyan
" hi reasonDerive ctermfg=cyan
" hi reasonAssert ctermfg=yellow
" hi reasonPanic ctermfg=red

hi def link reasonTemplateBraces Noise
hi def link reasonTaggedTemplate StorageClass


syn sync minlines=200
syn sync maxlines=500
Expand Down