diff options
Diffstat (limited to 'syntax/pony.vim')
-rw-r--r-- | syntax/pony.vim | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/syntax/pony.vim b/syntax/pony.vim new file mode 100644 index 00000000..56899f8f --- /dev/null +++ b/syntax/pony.vim @@ -0,0 +1,231 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'pony') == -1 + +" Vim syntax file +" Language: Pony +" Maintainer: Jak Wings + +if exists('b:current_syntax') + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + + +syn case match + +syn sync match ponySync grouphere NONE /\v^\s*%(actor|class|struct|primitive|trait|interface|new|be|fun|let|var|embed|use)>/ + +syn match ponyErrSymbol /['^!$&\`]/ +hi def link ponyErrSymbol Error + +syn match ponyErrNumGroup /__\+/ contained +hi def link ponyErrNumGroup Error + +syn match ponyPeriodComma /,/ nextgroup=ponyEllipsis,ponyErrOperator skipwhite +syn match ponyPeriodComma /\./ nextgroup=ponyTupleIndex,ponyErrOperator skipwhite +syn match ponyPeriodComma /;/ nextgroup=ponyErrOperator skipwhite +hi def link ponyPeriodComma Operator + +syn match ponyBracket /[{[()\]}]/ + +syn match ponyErrNormal /\v_>|<%([^_a-z]|_[^a-z])|__+/ contained +hi def link ponyErrNormal Error +syn match ponyNormal /\v_?[_a-z]\w*'*/ contains=ponyErrNormal nextgroup=ponyGeneric skipwhite + +syn match ponyInteger /\v%(\d+_*)+/ contains=ponyErrNumGroup +syn match ponyErrIntDec /\v(0[xX])@<=[_.g-zG-Z]/ +syn match ponyErrIntHex /[.g-zG-Z]/ contained +syn match ponyInteger /\v0[xX]%(\x+_*)+/ contains=ponyErrNumGroup nextgroup=ponyErrIntHex +syn match ponyErrIntDec /\v(0[bB])@<=[_2-9a-zA-Z]/ +syn match ponyErrIntBin /[2-9.a-zA-Z]/ contained +syn match ponyInteger /\v0[bB]%([01]+_*)+/ contains=ponyErrNumGroup nextgroup=ponyErrIntBin +hi def link ponyErrIntDec Error +hi def link ponyErrIntHex Error +hi def link ponyErrIntBin Error +hi def link ponyInteger Number + +syn match ponyFloat /\v%(\d+_*)+[eE][-+]?%(\d+_*)+/ contains=ponyErrNumGroup +syn match ponyFloat /\v%(\d+_*)+\.%(\d+_*)+%([eE][-+]?%(\d+_*)+)?/ contains=ponyErrNumGroup +hi def link ponyFloat Float + +syn match ponyErrUserVariable /\v_>|<%([^_a-z]|_[^a-z])|__+/ contained +hi def link ponyErrUserVariable Error +syn match ponyUserVariable /\v[_a-zA-Z]\w*'*/ contained contains=ponyErrUserVariable +hi def link ponyUserVariable Identifier +syn match ponyErrUserPackage /\<[^a-z]/ contained +hi def link ponyErrUserPackage Error +syn match ponyUserPackage /\v[_a-zA-Z]\w*/ contained contains=ponyErrUserPackage +hi def link ponyUserPackage Identifier +syn match ponyErrUserType /\v_>|\a@<=_|<%([^_A-Z]|_[^A-Z])/ contained +hi def link ponyErrUserType Error +syn match ponyUserType2 /\v[_a-zA-Z]\w*/ contained contains=ponyErrUserType nextgroup=ponyTypeSuffix,ponyTypeOperator2,ponyKwOperatorT,ponyGeneric,ponyArgument skipwhite +syn match ponyUserType /\v_?[A-Z]\w*/ contains=ponyErrUserType nextgroup=ponyTypeSuffix,ponyTypeOperator2,ponyKwOperatorT,ponyGeneric,ponyArgument skipwhite +syn match ponyErrUserMethod /\v_>|<%([^_a-z]|_[^a-z])|__+/ contained +hi def link ponyErrUserMethod Error +syn match ponyUserMethod /\v[_a-zA-Z]\w*/ contained contains=ponyErrUserMethod nextgroup=ponyGeneric,ponyArgument,ponyBracketT2 skipwhite +hi def link ponyUserMethod Function +syn match ponyForeignFunction /\v[_a-zA-Z]\w*/ contained nextgroup=ponyGeneric skipwhite +hi def link ponyForeignFunction Macro +syn match ponyErrTupleIndex /\v_0+>/ contained +hi def link ponyErrTupleIndex Error +syn match ponyTupleIndex /\v_\d+\w@!/ contained contains=ponyErrTupleIndex +hi def link ponyTupleIndex Normal + +syn keyword ponyBoolean true false +hi def link ponyBoolean Boolean + +syn region ponyBracketT1 matchgroup=ponyBracket start=/(/ end=/)/ contained contains=@ponyComments,@ponyKeyword,@ponyType,@ponyBracketT,@ponyTypeOperator,ponySymbol,ponyPeriodComma nextgroup=ponyTypeSuffix,ponyTypeOperator2,ponyKwOperatorT,ponyArgument skipwhite +syn region ponyBracketT2 matchgroup=ponyBracket start=/\[/ end=/\]/ contained contains=@ponyComments,@ponyKeyword,@ponyType,@ponyBracketT,@ponyTypeOperator,ponySymbol,ponyPeriodComma nextgroup=ponyTypeSuffix,ponyTypeOperator2,ponyKwOperatorT,ponyArgument skipwhite +syn region ponyBracketT3 matchgroup=ponyBracket start=/{/ end=/}/ contained contains=@ponyComments,@ponyKeyword,@ponyType,@ponyBracketT,@ponyTypeOperator,ponySymbol,ponyPeriodComma nextgroup=ponyTypeSuffix,ponyTypeOperator2,ponyKwOperatorT,ponyArgument skipwhite +syn cluster ponyBracketT contains=ponyBracketT\d + +syn region ponyGeneric matchgroup=ponyBracketT2 start=/\[/ end=/\]/ contained contains=@ponyComments,@ponyKeyword,@ponyType,@ponyBracketT,@ponyTypeOperator,ponySymbol,ponyPeriodComma nextgroup=ponyTypeSuffix,ponyTypeOperator2,ponyKwOperatorT,ponyArgument skipwhite + +syn region ponyArgument matchgroup=ponyBracket start=/(/ end=/)/ contained contains=TOP nextgroup=ponyArgument skipwhite + +syn match ponyTypeSuffix /[!^]/ contained nextgroup=ponyArgument,ponyKwOperatorT skipwhite +hi def link ponyTypeSuffix StorageClass + +syn match ponyTypeOperator1 /[&|]/ contained nextgroup=@ponyBracketT,@ponyKeyword,@ponyType skipwhite skipempty +hi def link ponyTypeOperator1 Operator + +syn match ponyTypeOperator2 /->\|<:/ contained nextgroup=@ponyBracketT,@ponyKeyword,@ponyType skipwhite skipempty +hi def link ponyTypeOperator2 Operator + +syn cluster ponyTypeOperator contains=ponyTypeOperator\d + +syn match ponyErrOperator /[-.]>\|<:\|\%(==\|!=\|<<\|>>\|<=\|>=\|[+*/%<>]\)\~\?\|[~.,]/ contained nextgroup=ponyErrOperator skipwhite +hi def link ponyErrOperator Error + +syn match ponyObjectOperator /\%(==\|!=\|<<\|>>\|<=\|>=\|[+\-*/%<>]\)\~\?\|\~\|\.>/ nextgroup=ponyErrOperator skipwhite +hi def link ponyObjectOperator Operator + +syn keyword ponyKwOperatorT is contained nextgroup=@ponyBracketT,@ponyKeyword,@ponyType skipwhite skipempty +hi def link ponyKwOperatorT Operator + +syn keyword ponyKwOperator as nextgroup=@ponyBracketT,@ponyKeyword,@ponyType skipwhite skipempty +syn keyword ponyKwOperator and or xor not is isnt consume addressof digestof +hi def link ponyKwOperator Operator + +syn match ponySymbol /=>\|[?#]/ +syn match ponySymbol /@/ nextgroup=ponyForeignFunction skipwhite skipempty +syn match ponySymbol /:/ nextgroup=@ponyKeyword,@ponyType,@ponyBracketT skipwhite skipempty +hi def link ponySymbol Special + +syn match ponyEllipsis /\.\{3}/ contained containedin=ponyArgument +hi def link ponyEllipsis Special + +syn region ponyLambda matchgroup=ponyBracketLambda start=/{/ end=/}/ contains=ponyArgument,@ponyComments,@ponyKeyword,@ponyType,@ponyTypeOperator,ponySymbol,ponyPeriodComma,ponyLambdaBody nextgroup=ponyArgument skipwhite +syn match ponyLambdaBody /=>\_.*}/me=e-1 contained contains=TOP +hi def link ponyBracketLambda Special + +" $scripts/gen_id.sh $packages/builtin +syn keyword ponyBuiltinType AmbientAuth Any Array ArrayKeys ArrayPairs + \ ArrayValues AsioEvent AsioEventID + \ AsioEventNotify Bool ByteSeq ByteSeqIter + \ Comparable Compare DisposableActor + \ DoNotOptimise Env Equal Equatable F32 F64 + \ Float FloatingPoint Greater HasEq I128 I16 I32 + \ I64 I8 ILong ISize Int Integer Iterator Less + \ MaybePointer None Number OutStream Platform + \ Pointer ReadElement ReadSeq Real Seq Signed + \ SourceLoc StdStream Stdin StdinNotify String + \ StringBytes StringRunes Stringable U128 U16 + \ U32 U64 U8 ULong USize Unsigned + \ nextgroup=ponyTypeSuffix,ponyTypeOperator2,ponyKwOperatorT,ponyGeneric,ponyArgument skipwhite +hi def link ponyBuiltinType Type + +syn keyword ponyKwControl end if else do then elseif match while for in + \ repeat until ifdef try with recover return + \ break continue error compile_intrinsic + \ compile_error iftype elseiftype +hi def link ponyKwControl Keyword + +syn keyword ponyCaseGuard if contained containedin=ponyMatchCase +hi def link ponyCaseGuard Keyword + +syn region ponyMatchCase matchgroup=ponyKwBranchHead start=/|/ matchgroup=ponySymbol end=/=>/ contains=TOP +hi def link ponyKwBranchHead Keyword + +syn keyword ponyKwAtom this nextgroup=ponyTypeOperator2 skipwhite skipempty +syn keyword ponyKwAtom object __loc +syn keyword ponyKwAtom lambda nextgroup=ponyArgument skipwhite +hi def link ponyKwAtom Keyword + +syn keyword ponyKwField let var embed nextgroup=@ponyKeyword,ponyUserVariable skipwhite skipempty +hi def link ponyKwField Keyword + +syn keyword ponyKwUse use nextgroup=ponyString,@ponyKeyword,ponyUserPackage skipwhite skipempty +hi def link ponyKwUse Include + +syn keyword ponyKwWhere where +hi def link ponyKwWhere Keyword + +syn keyword ponyKwTypedef type nextgroup=@ponyKeyword,@ponyType2 skipwhite skipempty +hi def link ponyKwTypedef Typedef + +syn match ponyKwCapability /\v#%(read|send|share|alias|any)>/ nextgroup=ponyTypeSuffix,ponyTypeOperator2,ponyKwOperatorT skipwhite +syn keyword ponyKwCapability ref val tag iso box trn nextgroup=ponyTypeSuffix,ponyTypeOperator2,ponyKwOperatorT,ponyArgument skipwhite +hi def link ponyKwCapability StorageClass + +syn keyword ponyKwClass actor class struct primitive trait interface nextgroup=@ponyKeyword,@ponyType2 skipwhite skipempty +hi def link ponyKwClass Structure + +syn keyword ponyKwFnCapability ref val tag iso box trn contained nextgroup=@ponyKeyword,ponyUserMethod skipwhite skipempty +hi def link ponyKwFnCapability StorageClass +syn keyword ponyKwFunction new be fun nextgroup=ponyKwFnCapability,@ponyKeyword,ponyUserMethod skipwhite skipempty +hi def link ponyKwFunction Keyword + +syn cluster ponyKeyword contains=ponyKw.*,ponyBoolean,ponyBuiltinType remove=ponyKwOperatorT,ponyKwFnCapability,ponyKwBranchHead +syn cluster ponyType contains=ponyBuiltinType,ponyUserType,ponyNormal +syn cluster ponyType2 contains=ponyBuiltinType,ponyUserType2 +syn cluster ponyComments contains=ponyNestedComment,ponyComment + +syn match ponyErrEscape /\\\_.\?\_s*/ contained +hi def link ponyErrEscape Error +syn match ponyEscapeSQuote /\\'/ contained +hi def link ponyEscapeSQuote SpecialChar +syn match ponyEscapeDQuote /\\"/ contained +hi def link ponyEscapeDQuote SpecialChar +syn match ponyEscape /\\[abefnrtv\\0]/ contained +syn match ponyEscape /\v\\x\x{2}/ contained +syn match ponyEscape /\v\\u\x{4}/ contained +syn match ponyEscape /\v\\U\x{6}/ contained +hi def link ponyEscape SpecialChar + +syn region ponyCharacter matchgroup=ponyCharacterX start=/\w\@<!'/ skip=/\\./ end=/'/ contains=ponyEscapeSQuote,ponyEscape,ponyErrEscape +hi def link ponyCharacter Character + +syn region ponyString matchgroup=ponyStringX start=/"/ skip=/\\./ end=/"/ contains=ponyEscapeDQuote,ponyEscape,ponyErrEscape +hi def link ponyString String +syn region ponyDocumentString matchgroup=ponyDocumentStringX start=/"\ze""/ end=/"""*\zs"/ +hi def link ponyDocumentString String + +syn keyword ponyCommentShit XXX contained +hi def link ponyCommentShit Underlined +syn keyword ponyCommentDamn FIXME contained +hi def link ponyCommentDamn Error +syn keyword ponyCommentTodo TODO contained +hi def link ponyCommentTodo Todo +syn cluster ponyCommentNote contains=ponyCommentTodo,ponyCommentDamn,ponyCommentShit + +syn match ponyComment @//.*$@ contains=@ponyCommentNote,ponyCommentX +hi def link ponyComment Comment +syn region ponyNestedComment matchgroup=ponyNestedCommentX start=@/\ze\*@ end=@\/\@<!\*\zs/@ contains=ponyNestedComment,@ponyCommentNote keepend extend fold +hi def link ponyNestedComment Comment + +" for indent check +syn match ponyCommentX @/\ze/.*$@ contained transparent +hi def link ponyNestedCommentX Comment +hi def link ponyCharacterX Character +hi def link ponyStringX String +hi def link ponyDocumentStringX String + + +let &cpo = s:cpo_save +unlet s:cpo_save + +let b:current_syntax = 'pony' + +endif |