vala.syntax 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. " Vim syntax file
  2. " Language: Vala
  3. " Maintainers: Emmanuele Bassi <ebassi@gnome.org>
  4. " Hans Vercammen <hveso3@gmail.com>
  5. " pancake <pancake@nopcode.org>
  6. " Filenames: *.vala *.vapi
  7. "
  8. " REFERENCES:
  9. " [1] http://live.gnome.org/Vala
  10. "
  11. " TODO: Possibly when reaching vala 1.0 release
  12. " - validate code attributes
  13. " - better error checking for known errors
  14. " - full support for valadoc
  15. if exists("b:current_syntax")
  16. finish
  17. endif
  18. let s:vala_cpo_save = &cpo
  19. set cpo&vim
  20. " Types
  21. syn keyword valaType bool char double float size_t ssize_t string unichar void
  22. syn keyword valaType int int8 int16 int32 int64 long short
  23. syn keyword valaType uint uint8 uint16 uint32 uint64 ulong ushort
  24. " Storage keyword
  25. syn keyword valaStorage class delegate enum errordomain interface namespace struct
  26. " repeat / condition / label
  27. syn keyword valaRepeat break continue do for foreach return while
  28. syn keyword valaConditional else if switch assert
  29. " User Labels
  30. syn keyword valaLabel case default
  31. " Modifiers
  32. syn keyword valaModifier abstract const dynamic ensures extern inline internal override
  33. syn keyword valaModifier private protected public requires signal static virtual volatile weak
  34. syn keyword valaModifier async owned unowned
  35. " Constants
  36. syn keyword valaConstant false null true
  37. " Exceptions
  38. syn keyword valaException try catch finally throw
  39. " Unspecified Statements
  40. syn keyword valaUnspecifiedStatement as base construct delete get in is lock new out params ref sizeof set this throws typeof using value var yield
  41. " Comments
  42. syn cluster valaCommentGroup contains=valaTodo
  43. syn keyword valaTodo contained TODO FIXME XXX NOTE
  44. " valadoc Comments (ported from javadoc comments in java.vim)
  45. " TODO: need to verify valadoc syntax
  46. if !exists("vala_ignore_valadoc")
  47. syn cluster valaDocCommentGroup contains=valaDocTags,valaDocSeeTag
  48. syn region valaDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
  49. syn match valaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=valaDocParam
  50. syn match valaDocParam contained "\s\S\+"
  51. syn match valaDocTags contained "@\(author\|brief\|version\|return\|deprecated\)\>"
  52. syn region valaDocSeeTag contained matchgroup=valaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=valaDocSeeTagParam
  53. syn match valaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
  54. endif
  55. " Comment Strings (ported from c.vim)
  56. if exists("vala_comment_strings")
  57. syn match valaCommentSkip contained "^\s*\*\($\|\s\+\)"
  58. syn region valaCommentString contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=valaSpecialChar,valaCommentSkip
  59. syn region valaComment2String contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=valaSpecialChar
  60. syn cluster valaCommentStringGroup contains=valaCommentString,valaCharacter,valaNumber
  61. syn region valaCommentL start="//" end="$" keepend contains=@valaCommentGroup,valaComment2String,valaCharacter,valaNumber,valaSpaceError,@Spell
  62. syn region valaComment matchgroup=valaCommentStart start="/\*" end="\*/" contains=@valaCommentGroup,@valaCommentStringGroup,valaCommentStartError,valaSpaceError,@Spell extend
  63. if !exists("vala_ignore_valadoc")
  64. syn region valaDocComment matchgroup=valaCommentStart start="/\*\*" end="\*/" keepend contains=@valaCommentGroup,@valaDocCommentGroup,@valaCommentStringGroup,valaCommentStartError,valaSpaceError,@Spell
  65. endif
  66. else
  67. syn region valaCommentL start="//" end="$" keepend contains=@valaCommentGroup,valaSpaceError,@Spell
  68. syn region valaComment matchgroup=valaCommentStart start="/\*" end="\*/" contains=@valaCommentGroup,valaCommentStartError,valaSpaceError,@Spell
  69. if !exists("vala_ignore_valadoc")
  70. syn region valaDocComment matchgroup=valaCommentStart start="/\*\*" end="\*/" keepend contains=@valaCommentGroup,@valaDocCommentGroup,valaCommentStartError,valaSpaceError,@Spell
  71. endif
  72. endif
  73. " match comment errors
  74. syntax match valaCommentError display "\*/"
  75. syntax match valaCommentStartError display "/\*"me=e-1 contained
  76. " match the special comment /**/
  77. syn match valaComment "/\*\*/"
  78. " Vala Code Attributes
  79. syn region valaAttribute start="^\s*\[" end="\]$" contains=valaComment,valaString keepend
  80. syn region valaAttribute start="\[CCode" end="\]" contains=valaComment,valaString
  81. " Avoid escaped keyword matching
  82. syn match valaUserContent display "@\I*"
  83. " Strings and constants
  84. syn match valaSpecialError contained "\\."
  85. syn match valaSpecialCharError contained "[^']"
  86. syn match valaSpecialChar contained +\\["\\'0abfnrtvx]+
  87. syn region valaString start=+"+ end=+"+ end=+$+ contains=valaSpecialChar,valaSpecialError,valaUnicodeNumber,@Spell
  88. syn region valaVerbatimString start=+"""+ end=+"""+ contains=@Spell
  89. syn match valaUnicodeNumber +\\\(u\x\{4}\|U\x\{8}\)+ contained contains=valaUnicodeSpecifier
  90. syn match valaUnicodeSpecifier +\\[uU]+ contained
  91. syn match valaCharacter "'[^']*'" contains=valaSpecialChar,valaSpecialCharError
  92. syn match valaCharacter "'\\''" contains=valaSpecialChar
  93. syn match valaCharacter "'[^\\]'"
  94. syn match valaNumber display "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
  95. syn match valaNumber display "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
  96. syn match valaNumber display "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
  97. syn match valaNumber display "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
  98. " when wanted, highlight trailing white space
  99. if exists("vala_space_errors")
  100. if !exists("vala_no_trail_space_error")
  101. syn match valaSpaceError display excludenl "\s\+$"
  102. endif
  103. if !exists("vala_no_tab_space_error")
  104. syn match valaSpaceError display " \+\t"me=e-1
  105. endif
  106. endif
  107. " when wanted, set minimum lines for comment syntax syncing
  108. if exists("vala_minlines")
  109. let b:vala_minlines = vala_minlines
  110. else
  111. let b:vala_minlines = 50
  112. endif
  113. exec "syn sync ccomment valaComment minlines=" . b:vala_minlines
  114. " The default highlighting.
  115. hi def link valaType Type
  116. hi def link valaStorage StorageClass
  117. hi def link valaRepeat Repeat
  118. hi def link valaConditional Conditional
  119. hi def link valaLabel Label
  120. hi def link valaModifier StorageClass
  121. hi def link valaConstant Constant
  122. hi def link valaException Exception
  123. hi def link valaUnspecifiedStatement Statement
  124. hi def link valaUnspecifiedKeyword Keyword
  125. hi def link valaContextualStatement Statement
  126. hi def link valaCommentError Error
  127. hi def link valaCommentStartError Error
  128. hi def link valaSpecialError Error
  129. hi def link valaSpecialCharError Error
  130. hi def link valaSpaceError Error
  131. hi def link valaTodo Todo
  132. hi def link valaCommentL valaComment
  133. hi def link valaCommentStart valaComment
  134. hi def link valaCommentSkip valaComment
  135. hi def link valaComment Comment
  136. hi def link valaDocComment Comment
  137. hi def link valaDocTags Special
  138. hi def link valaDocParam Function
  139. hi def link valaDocSeeTagParam Function
  140. hi def link valaAttribute PreCondit
  141. hi def link valaCommentString valaString
  142. hi def link valaComment2String valaString
  143. hi def link valaString String
  144. hi def link valaVerbatimString String
  145. hi def link valaCharacter Character
  146. hi def link valaSpecialChar SpecialChar
  147. hi def link valaNumber Number
  148. hi def link valaUnicodeNumber SpecialChar
  149. hi def link valaUnicodeSpecifier SpecialChar
  150. let b:current_syntax = "vala"
  151. let &cpo = s:vala_cpo_save
  152. unlet s:vala_cpo_save