go.vim 4.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. syn cluster goTypes contains=goType,goSignedInts,goUnsignedInts,goFloats,goComplexes
  2. syn cluster goNumber contains=goDecimalInt,goHexadecimalInt,goOctalInt,goFloat,goImaginary,goImaginaryFloat
  3. if !exists("g:go_highlight_fields")
  4. let g:go_highlight_fields = 0
  5. endif
  6. if g:go_highlight_fields != 0
  7. syn match goField /\(\.\)\@1<=\w\+\([.\ \n\r\:\)\[,+-\*\\\]]\)\@=/
  8. endif
  9. if !exists("g:go_highlight_functions")
  10. let g:go_highlight_functions = 0
  11. endif
  12. if g:go_highlight_functions != 0
  13. syn clear goFunctionCall
  14. syn clear goFunction
  15. syn match goDeclaration /\<func\>/ nextgroup=goReceiverRegion,goFunction skipwhite skipnl
  16. syn region goReceiverRegion matchgroup=goContainer start=/(/ end=/)/ contains=goReceiver nextgroup=goFunction contained
  17. syn match goReceiver /\(\w\|[ *]\)\+/ contained contains=goReceiverVar skipwhite skipnl contained
  18. syn cluster validFuncRegionContains contains=@goTypes,goField,goDeclaration,GoBuiltins,goDeclStruct,goDeclInterface,OperatorChars,goContainer,goString,goRawString,@goNumber,goTypeConstructor
  19. " fix comment
  20. syn match goFunctionTagLine /\w\+(.\{-})\(\s*(.\{-})\|\s\S\+\)\?\(\s*\|$\)/ nextgroup=goFunction contains=goFunction,goFunctionParamRegion,goFunctionReturnRegion,goFunctionReturn,OperatorChars,goContainer,goComment
  21. syn region goFunctionParamRegion matchgroup=goContainer start=/(/ end=/)/ contains=@validFuncRegionContains nextgroup=goFunctionReturnRegion,goFunctionReturn skipwhite contained
  22. syn region goFunctionReturnRegion matchgroup=goContainer start=/(/ end=/)/ contains=@validFuncRegionContains skipwhite contained
  23. syn match goFunctionReturn /\w\+/ contains=@validFuncRegionContains skipwhite contained
  24. syn match goFunction /\w\+\ze(/ nextgroup=goFunctionParamRegion skipwhite contained
  25. endif
  26. if !exists("g:go_highlight_types")
  27. let g:go_highlight_types = 0
  28. endif
  29. if g:go_highlight_types != 0
  30. syn match goTypeConstructor /\<\w\+\({\)\@1=/
  31. " TODO (maybe):
  32. " handle only Type-highlighting things like xml.Name ignoring
  33. " the first \w+\. and highlighting the remaining \w+
  34. "
  35. " handle map[type]type
  36. " handle field, field type
  37. " This is most likely bad... probably very bad.. and brittle?
  38. syn clear goTypeDecl
  39. syn clear goTypeName
  40. syn clear goDeclType
  41. syn cluster validTypeContains contains=goComment,goNewDeclType,goDeclTypeField,goDeclTypeFieldType,goDeclTypeFieldSlice,goDeclTypeFieldPointerOp,goString,goRawString,OperatorChars,goContainer
  42. syn cluster validStructContains contains=goComment,goNewDeclType,goDeclTypeField,goDeclTypeFieldType,goString,goRawString,OperatorChars,goContainer
  43. syn cluster validInterfaceContains contains=goComment,goFunctionTagLine,OperatorChars,goContainer
  44. syn match goTypeDecl /\<type\>/ nextgroup=goNewDeclType,goTypeRegion skipwhite skipnl
  45. syn region goTypeRegion matchgroup=goContainer start=/(/ end=/)/ contains=@validTypeContains fold contained
  46. syn region goDeclStructRegion matchgroup=goContainer start=/{/ end=/}/ contains=@validStructContains fold contained
  47. syn region goDeclInterfaceRegion matchgroup=goContainer start=/{/ end=/}/ contains=@validInterfaceContains fold contained
  48. syn match goDeclTypeFieldPointerOp /\*/ nextgroup=goDeclTypeFieldPointerOp,goDeclTypeFieldSlice,goDeclTypeFieldType,goDeclStruct,goDeclInterface skipwhite contained
  49. syn region goDeclTypeFieldSlice matchgroup=goContainer start=/\[/ end=/\]/ contains=goDecimalInt,goHexadecimalInt,goOctalInt nextgroup=goDeclTypeFieldPointerOp,goDeclTypeFieldSlice,goDeclTypeFieldType,goDeclStruct,goDeclInterface skipwhite contained
  50. syn match goDeclTypeFieldType /\(\w\|\.\)\+/ skipwhite contained
  51. syn match goDeclTypeField /\w\+/ nextgroup=goDeclTypeFieldPointerOp,goDeclTypeFieldSlice,goDeclTypeFieldType skipwhite contained
  52. syn match goNewDeclType /\w\+\ze\s\+\<\(struct\|interface\)\>/ nextgroup=goDeclStruct,goDeclInterface skipwhite contained
  53. syn match goDeclStruct /\<struct\>/ nextgroup=goDeclStructRegion skipwhite skipnl
  54. syn match goDeclInterface /\<interface\>/ nextgroup=goDeclInterfaceRegion skipwhite skipnl
  55. endif
  56. " Order is important, so redefine
  57. syn match goBuiltins /\<\v(append|cap|close|complex|copy|delete|imag|len)\ze\(/
  58. syn match goBuiltins /\<\v(make|new|panic|print|println|real|recover)\ze\(/
  59. hi link goPointerOperator Operator
  60. hi link goDeclTypeFieldPointerOp Operator
  61. hi link goTypeConstructor Type
  62. hi link goTypeOpen goContainer
  63. hi link goDeclTypeFieldType Type
  64. hi link goNewDeclType Type
  65. hi link goDeclInterface Keyword
  66. hi link goDeclStruct Keyword
  67. hi link goFunction Function
  68. hi link goMethodCall Function
  69. hi link goFunctionCall Function
  70. hi link goContainer ContainerChars