From 059cf18954d1eb080338c26f29d956aea95108ec Mon Sep 17 00:00:00 2001 From: Torin Sandall Date: Fri, 4 Nov 2016 11:26:53 -0700 Subject: [PATCH] Add Vim plugin for Rego --- misc/syntax/vim/README.md | 3 ++ misc/syntax/vim/ftdetect/rego.vim | 1 + misc/syntax/vim/syntax/rego.vim | 57 +++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 misc/syntax/vim/README.md create mode 100644 misc/syntax/vim/ftdetect/rego.vim create mode 100644 misc/syntax/vim/syntax/rego.vim diff --git a/misc/syntax/vim/README.md b/misc/syntax/vim/README.md new file mode 100644 index 0000000000..828e8337d8 --- /dev/null +++ b/misc/syntax/vim/README.md @@ -0,0 +1,3 @@ +# vim-rego + +A Vim plugin for the Rego language that includes support for syntax highlighting. \ No newline at end of file diff --git a/misc/syntax/vim/ftdetect/rego.vim b/misc/syntax/vim/ftdetect/rego.vim new file mode 100644 index 0000000000..b82dc97179 --- /dev/null +++ b/misc/syntax/vim/ftdetect/rego.vim @@ -0,0 +1 @@ +autocmd BufRead,BufNewFile *.rego set filetype=rego diff --git a/misc/syntax/vim/syntax/rego.vim b/misc/syntax/vim/syntax/rego.vim new file mode 100644 index 0000000000..443c510ba8 --- /dev/null +++ b/misc/syntax/vim/syntax/rego.vim @@ -0,0 +1,57 @@ +" Vim syntax file +" Language: Rego (http://github.com/open-policy-agent/opa) +" Maintainers: Torin Sandall + +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +syn case match + +" language keywords +syn keyword regoKeyword package import as not + +" comments +syn match regoComment "#.*$" contains=regoTodo,@Spell +syn keyword regoTodo FIXME XXX TODO contained + +" data types +syn keyword regoNull null +syn keyword regoBoolean true false +syn match regoNumber "\<\(0[0-7]*\|0[xx]\x\+\|\d\+\)[ll]\=\>" +syn match regoNumber "\(\<\d\+\.\d*\|\.\d\+\)\([ee][-+]\=\d\+\)\=[ffdd]\=" +syn match regoNumber "\<\d\+[ee][-+]\=\d\+[ffdd]\=\>" +syn match regoNumber "\<\d\+\([ee][-+]\=\d\+\)\=[ffdd]\>" +syn region regoString start="\"[^"]" skip="\\\"" end="\"" contains=regoStringEscape +syn match regoStringEscape "\\u[0-9a-fA-F]\{4}" contained +syn match regoStringEscape "\\[nrfvb\\\"]" contained + +" rule head +syn match regoRuleName "^\w\+" nextgroup=regoRuleKey,regoRuleValue skipwhite +syn region regoRuleKey start="\[" end="\]" contained skipwhite +syn match regoRuleValue "=\w\+" nextgroup=regoIfThen skipwhite + +" operators +syn match regoIfThen ":-" +syn match regoEquality "=" +syn match regoInequality "[<>!]" +syn match regoBuiltin "\w\+(" nextgroup=regoBuiltinArgs contains=regoBuiltinArgs +syn region regoBuiltinArgs start="(" end=")" contained contains=regoNumber,regoNull,regoBoolean,regoString + +" highlighting +hi link regoKeyword Keyword +hi link regoNull Function +hi link regoBoolean Boolean +hi link regoNumber Number +hi link regoString String +hi link regoRuleName Function +hi link regoRuleKey Normal +hi link regoRuleValue Normal +hi link regoIfThen Keyword +hi link regoEquality Keyword +hi link regoInequality Keyword +hi link regoBuiltin Keyword +hi link regoComment Comment +hi link regoTodo Todo