1" Vim syntax file
2" Language: Thrift
3" Maintainer: Martin Smith <martin@facebook.com>
4" Last Change: $Date: $
5" Copy to ~/.vim/
6" Add to ~/.vimrc
7"  au BufRead,BufNewFile *.thrift set filetype=thrift
8"  au! Syntax thrift source ~/.vim/thrift.vim
9"
10" $Id: $
11"
12" Licensed to the Apache Software Foundation (ASF) under one
13" or more contributor license agreements. See the NOTICE file
14" distributed with this work for additional information
15" regarding copyright ownership. The ASF licenses this file
16" to you under the Apache License, Version 2.0 (the
17" "License"); you may not use this file except in compliance
18" with the License. You may obtain a copy of the License at
19"
20"   http://www.apache.org/licenses/LICENSE-2.0
21"
22" Unless required by applicable law or agreed to in writing,
23" software distributed under the License is distributed on an
24" "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
25" KIND, either express or implied. See the License for the
26" specific language governing permissions and limitations
27" under the License.
28"
29
30if version < 600
31  syntax clear
32elseif exists("b:current_syntax")
33  finish
34endif
35
36" Todo
37syn keyword thriftTodo TODO todo FIXME fixme XXX xxx contained
38
39" Comments
40syn match thriftComment "#.*" contains=thriftTodo
41syn region thriftComment start="/\*" end="\*/" contains=thriftTodo
42syn match thriftComment "//.\{-}\(?>\|$\)\@="
43
44" String
45syn region thriftStringDouble matchgroup=None start=+"+  end=+"+
46
47" Number
48syn match thriftNumber "-\=\<\d\+\>" contained
49
50" Keywords
51syn keyword thriftKeyword namespace
52syn keyword thriftKeyword xsd_all xsd_optional xsd_nillable xsd_attrs
53syn keyword thriftKeyword include cpp_include cpp_type const optional required
54syn keyword thriftBasicTypes void bool byte i8 i16 i32 i64 double string binary
55syn keyword thriftStructure map list set struct typedef exception enum throws union
56
57" Special
58syn match thriftSpecial "\d\+:"
59
60" Structure
61syn keyword thriftStructure service oneway extends
62"async"         { return tok_async;         }
63"exception"     { return tok_xception;      }
64"extends"       { return tok_extends;       }
65"throws"        { return tok_throws;        }
66"service"       { return tok_service;       }
67"enum"          { return tok_enum;          }
68"const"         { return tok_const;         }
69
70if version >= 508 || !exists("did_thrift_syn_inits")
71  if version < 508
72    let did_thrift_syn_inits = 1
73    command! -nargs=+ HiLink hi link <args>
74  else
75    command! -nargs=+ HiLink hi def link <args>
76  endif
77
78  HiLink thriftComment Comment
79  HiLink thriftKeyword Special
80  HiLink thriftBasicTypes Type
81  HiLink thriftStructure StorageClass
82  HiLink thriftTodo Todo
83  HiLink thriftString String
84  HiLink thriftNumber Number
85  HiLink thriftSpecial Special
86  HiLink thriftStructure Structure
87
88  delcommand HiLink
89endif
90
91let b:current_syntax = "thrift"
92