go.vim 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. if !exists("g:go_highlight_fields")
  2. let g:go_highlight_fields = 0
  3. endif
  4. if g:go_highlight_fields != 0
  5. syn match goField /\(\.\)\@1<=\w\+\([.\ \n\r\:\)\[,+-\*}\\\]]\)\@=/
  6. endif
  7. " Order matters...
  8. if !exists("g:go_highlight_functions")
  9. let g:go_highlight_functions = 0
  10. endif
  11. if g:go_highlight_functions != 0
  12. " FIXME: This is too greedy
  13. syn match listOfTypes /\(\S\+\ze[,)]\)\+/ contains=@goDeclarations,@goDeclTypeBegin,goMapKeyRegion,goFunctionParamRegion,goFunctionReturnRegion,goDeclStructRegion,goDeclInterfaceRegion contained
  14. syn match listOfVars /\([,(]\s*\)\@<=\w\+\(\(, \w\+\)*, \w\+ \)\@=/ contained
  15. endif
  16. if !exists("g:go_highlight_types")
  17. let g:go_highlight_types = 0
  18. endif
  19. if g:go_highlight_types != 0
  20. syn clear goTypeDecl
  21. syn clear goTypeName
  22. syn clear goDeclType
  23. syn match goTypeConstructor /\<\w\+\({\)\@1=/
  24. syn cluster validTypeContains contains=goComment,goDeclSIName,goDeclTypeField
  25. syn cluster validStructContains contains=goComment,goDeclSIName,goDeclTypeField,goString,goRawString,goMapType,goMapKeyRegion
  26. syn cluster validInterfaceContains contains=goComment,goFunction,goNestedInterfaceType
  27. syn match goDeclTypeField /\w\+/ nextgroup=@goDeclTypeBegin skipwhite contained
  28. syn match goTypeDecl /\<type\>/ nextgroup=goDeclSIName,goTypeRegion skipwhite skipnl
  29. syn region goTypeRegion matchgroup=goContainer start=/(/ end=/)/ contains=@validTypeContains skipwhite fold contained
  30. syn region goDeclStructRegion matchgroup=goContainer start=/{/ end=/}/ contains=@validStructContains skipwhite fold contained
  31. syn region goDeclInterfaceRegion matchgroup=goContainer start=/{/ end=/}/ contains=@validInterfaceContains skipwhite fold contained
  32. syn match goNestedInterfaceType /\w\+/ contained
  33. syn match goDeclTypeStart /\*/ contains=OperatorChars nextgroup=goDeclTypeStart,goDeclTypeNamespace,goDeclTypeWord,goMapType,@goDeclarations skipwhite contained
  34. syn region goDeclTypeStart matchgroup=goContainer start=/\[/ end=/\]/ contains=@goNumbers nextgroup=goDeclTypeStart,goDeclTypeNamespace,goDeclTypeWord,goMapType,@goDeclarations skipwhite transparent contained
  35. syn match goDeclTypeWord /\w\+/ contains=goMapType,@goDeclarations skipwhite contained
  36. syn match goDeclTypeNamespace /\w\+\./ contains=OperatorChars nextgroup=goDeclTypeWord skipwhite contained
  37. syn cluster goDeclTypeBegin contains=goDeclTypeStart,goDeclTypeWord,goDeclTypeNamespace
  38. syn region goMapKeyRegion matchgroup=goContainer start=/\[/ end=/\]/ contains=@goDeclTypeBegin,goDeclaration nextgroup=@goDeclTypeBegin skipwhite contained
  39. syn keyword goMapType map nextgroup=goMapKeyRegion skipwhite
  40. " This is important in order to differentiate "field type" from "field struct"
  41. " and "field interface"
  42. syn match goDeclSIName /\w\+\(\s\([*\[\] ]\)*\<\(struct\|interface\)\>\)\@=/ nextgroup=@goDeclTypeBegin,goDeclStruct,goDeclInterface skipwhite contained
  43. syn match goDeclStruct /\<struct\>/ nextgroup=goDeclStructRegion skipwhite skipnl
  44. syn match goDeclInterface /\<interface\>/ nextgroup=goDeclInterfaceRegion skipwhite skipnl
  45. syn match goVarVar /[^, ]\+/ nextgroup=goVarSep,@goDeclTypeBegin skipwhite contained
  46. syn match goVarSep /,/ nextgroup=goVarVar skipwhite contained
  47. syn region goVarRegion matchgroup=goContainer start=/(/ end=/)/ transparent contained
  48. syn keyword goVarDecl var nextgroup=goVarVar,goVarRegion skipwhite
  49. syn region goTypeAssertionRegion matchgroup=goContainer start=/(/ end=/)/ contains=@goDeclTypeBegin,goMapType,goMapKeyRegion skipwhite contained
  50. syn match goTypeAssertionOp /\.\((\)\@=/ nextgroup=goTypeAssertionRegion skipwhite
  51. endif
  52. if g:go_highlight_functions != 0
  53. syn clear goFunctionCall
  54. syn clear goFunction
  55. syn clear goReceiverType
  56. syn match goFunctionCall /\(\.\)\@1<!\w\+\((\)\@1=/ nextgroup=goFuncMethCallRegion
  57. " FIXME: ^{\], is a lazy hack-fix
  58. syn match goFunctionReturn /[^{\], ]\+/ contains=@goDeclarations,@goDeclTypeBegin skipwhite contained
  59. syn region goFunctionParamRegion matchgroup=goContainer start=/(/ end=/)/ contains=@goDeclarations,listOfTypes,listOfVars,OperatorChars nextgroup=goFunctionReturn,goFunctionReturnRegion skipwhite transparent contained
  60. syn region goFunctionReturnRegion matchgroup=goContainer start=/(/ end=/)/ contains=@goDeclarations,listOfTypes,listOfVars,OperatorChars skipwhite transparent contained
  61. syn match goFunction /\w\+\((\)\@1=/ nextgroup=goFunctionParamRegion skipwhite contained
  62. syn match goDeclaration /\<func\>/ nextgroup=goReceiverRegion,goFunction,goFunctionParamRegion skipwhite skipnl
  63. " Use the space between func and ( to determine if the next group is a
  64. " receiver or an inlined function (which matches gofmt)
  65. syn region goReceiverRegion matchgroup=goContainer start=/ (/ end=/)/ contains=goReceiver nextgroup=goFunction skipwhite contained
  66. syn match goReceiver /\(\w\|[ *]\)\+/ contains=goReceiverVar,goPointerOperator skipwhite skipnl contained
  67. syn match goReceiverVar /\w\+/ nextgroup=goPointerOperator,@goDeclTypeBegin skipwhite skipnl contained
  68. syn match goPointerOperator /\*/ nextgroup=@goDeclTypeBegin skipwhite skipnl contained
  69. endif
  70. if !exists("g:go_highlight_methods")
  71. let g:go_highlight_methods = 0
  72. endif
  73. if g:go_highlight_methods != 0
  74. syn clear goMethodCall
  75. syn match goMethodCall /\(\.\)\@1<=\w\+\((\)\@1=/ nextgroup=goFuncMethCallRegion
  76. endif
  77. syn cluster goDeclarations contains=goDeclaration,goDeclStruct,goDeclInterface
  78. syn cluster goTypes contains=goType,goSignedInts,goUnsignedInts,goFloats,goComplexes
  79. syn cluster goNumbers contains=goDecimalInt,goHexadecimalInt,goOctalInt,goFloat,goImaginary,goImaginaryFloat
  80. syn region goFuncMethCallRegion matchgroup=goContainer start=/(/ end=/)/ transparent contained
  81. syn match goLiteralStructField /\w\+\ze:[^=]/
  82. " Order is important, so redefine
  83. syn match goBuiltins /\<\(append\|cap\|close\|complex\|copy\|delete\|imag\|len\)\((\)\@=/ nextgroup=goBuiltinRegion
  84. syn match goBuiltins /\<\(make\|new\|panic\|print\|println\|real\|recover\)\((\)\@=/ nextgroup=goBuiltinRegion
  85. syn region goBuiltinRegion matchgroup=goContainer start=/(/ end=/)/ transparent contained
  86. hi link goPointerOperator Operator
  87. hi link goTypeAssertionOp Operator
  88. hi link goVarSep Operator
  89. hi link goTypeConstructor Type
  90. hi link goDeclSIName Type
  91. hi link goDeclTypeWord Type
  92. hi link goNestedInterfaceType Type
  93. hi link goMapType Type
  94. hi link goVarDecl goDeclaration
  95. hi link goDeclInterface goDeclaration
  96. hi link goDeclStruct goDeclaration
  97. hi link goFunction Function
  98. hi link goMethodCall Function
  99. hi link goFunctionCall Function
  100. hi link goContainer ContainerChars
  101. hi link goLiteralStructField Special
  102. " don't commit this
  103. "func (c *Client) shipmentConfirmRequest(ctx context.Context, request shipmentConfirmRequest) (*shipmentConfirmResponse, error) {
  104. "var response, bar shipmentConfirmResponse
  105. "a := make(map[foo]bar)
  106. "a := make(map[func()]bar)
  107. "a := func(int, interface{}, struct{ foo int }) (a foo, b []bar, c map[foo][2]bar, d, e, f baz) { return 0 }
  108. "a := func(a foo, b []bar, c map[foo]bar) int {}
  109. "a := func(a foo, b []bar, c map[foo]interface{}) int {}
  110. "a := func(a foo, b []bar, c map[func()]bar) int {}
  111. "a := func(a foo, b []bar, c map[func()]func()) int {}
  112. "b := func(f foo, c, a map[foo]int) (int, int) {}
  113. "a := func(int) (a, b foo, c, d bar) {}
  114. "b := func(int) interface{} {}
  115. "c := func(int) int {}
  116. "d := func(f func(int, asdf) int, a word) (int, thing, func(func())) {}
  117. "e := func(f func() int, a word) func() {}
  118. "f := func(f func() int, a word) (interface{}, interface{}) {}
  119. "var g func() func(Service) int
  120. "h := func(int) (int, string) {}
  121. "}