blob: 7863a674cf2142f74d507fc5d333e9dfc465fd2d [file] [log] [blame]
" Vim syntax file " Language: Fidl
" To get syntax highlighting for .fidl files, add the following to your .vimrc
" file:
" source /path/to/src/tools/vim/fidl.vim
"
" Based on the grammar describe in
"
" https://fuchsia.dev/fuchsia-src/development/languages/fidl/reference/grammar.md
"
" There is still some work to be done.
if !exists("g:main_syntax")
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
let g:main_syntax = 'fidl'
syntax region fidlFold start="{" end="}" transparent fold
endif
" Keywords
"
" Start from:
" sed '/## Grammar/,$!d' docs/reference/fidl/language/grammar.md |
" sed '/-------/,$d' |
" grep -P '"[a-z]*?"'
" to update.
syn keyword fidlKeyword alias as bits compose const enum error false flexible library properties protocol reserved resource resource_definition service strict struct table true type union using
" Types
syn match fidlType "\<request<@\?[a-zA-Z][a-zA-Z0-9]*\(\.[a-zA-Z][a-zA-Z0-9]*\)*>?\?"
" From zircon/vdso/zx_common.fidl:
syn match fidlBadType "\<zx.Handle:[A-Z]*?\?"
" The above flags zx.Handle:TYPO, but then reallow zx.Handle:< anything > for
" complex handle types.
syn match fidlType "\<zx.Handle:<[^>]*>\?"
" And specifically make known handle subtypes recognized.
syn match fidlType "\<zx.Handle:\(BTI\|CHANNEL\|CLOCK\|EVENT\|EVENTPAIR\|EXCEPTION\|FIFO\|GUEST\|INTERRUPT\|IOMMU\|JOB\|LOG\|MSI\|PAGER\|PCI_DEVICE\|PMT\|PORT\|PROCESS\|PROFILE\|RESOURCE\|SOCKET\|STREAM\|SUSPEND_TOKEN\|THREAD\|TIMER\|VCPU\|VMAR\|VMO\)\>"
syn match fidlType "\<string\>\%(:\%(\d\+\|\K\k*\%(\.\K\k*\)*\)\)\??\?"
syn match fidlType "\<bool\>"
syn match fidlBadType "\<bool?"
syn match fidlType "\<float\(32\|64\)\>"
syn match fidlBadType "\<float\(32\|64\)?"
syn match fidlType "\<u\?int\(8\|16\|32\|64\)\>"
syn match fidlBadType "\<u\?int\(8\|16\|32\|64\)?"
syn region fidlType matchgroup=Type start="\<vector<" end=">\%(:\%(\d\+\|\K\k*\%(\.\K\k*\)*\)\)\??\?" contains=fidlType,fidlBadType transparent
syn region fidlType matchgroup=Type start="\<array<" end=">:\%(\d\+\|\K\k*\%(\.\K\k*\)*\)" contains=fidlType,fidlBadType transparent
" Identifiers prefixed with @
syn match fidlEscapedIdentifier "@[a-zA-Z][a-zA-Z0-9]*"
" Comments
syntax keyword fidlTodo contained TODO FIXME XXX
syntax region fidlDocLink contained start=+\[+ end=+\]+
syntax match fidlLineComment "//.*" contains=fidlTodo,@Spell
syntax match fidlLineDocComment "///.*" contains=fidlTodo,fidlDocLink,@Spell
" Literals
syn region fidlString start='"' end='"' contained
" Attributes
syn region fidlAttribute start='\[' end='\]'
let b:current_syntax = "fidl"
let b:spell_options = "contained"
hi def link fidlKeyword Keyword
hi def link fidlTodo Todo
hi def link fidlLineComment Comment
hi def link fidlLineDocComment SpecialComment
hi def link fidlDocLink SpecialComment
hi def link fidlBlockCmd Statement
hi def link fidlType Type
hi def link fidlBadType Error
hi def link fidlIntType Type
hi def link fidlString String
hi def link fidlAttribute PreProc
hi def link fidlNumber Number
hi def link fidlEscapedIdentifier Normal
if g:main_syntax is# 'fidl'
unlet g:main_syntax
endif