Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 1 | " Vim syntax file |
| 2 | " Language: rego policy language |
| 3 | " Maintainer: Matt Dunford (zenmatic@gmail.com) |
| 4 | " URL: https://github.com/zenmatic/vim-syntax-rego |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 5 | " Last Change: 2022 Dec 4 |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 6 | |
| 7 | " https://www.openpolicyagent.org/docs/latest/policy-language/ |
| 8 | |
| 9 | " quit when a (custom) syntax file was already loaded |
| 10 | if exists("b:current_syntax") |
| 11 | finish |
| 12 | endif |
| 13 | |
| 14 | syn case match |
| 15 | |
| 16 | syn keyword regoDirective package import allow deny |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 17 | syn keyword regoKeywords as default else every false if import package not null true with some in print |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 18 | |
| 19 | syn keyword regoFuncAggregates count sum product max min sort all any |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 20 | syn match regoFuncArrays "\<array\.\(concat\|slice\|reverse\)\>" |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 21 | syn keyword regoFuncSets intersection union |
| 22 | |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 23 | syn keyword regoFuncStrings concat /\<contains\>/ endswith format_int indexof indexof_n lower replace split sprintf startswith substring trim trim_left trim_prefix trim_right trim_suffix trim_space upper |
| 24 | syn match regoFuncStrings2 "\<strings\.\(replace_n\|reverse\|any_prefix_match\|any_suffix_match\)\>" |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 25 | syn match regoFuncStrings3 "\<contains\>" |
| 26 | |
| 27 | syn keyword regoFuncRegex re_match |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 28 | syn match regoFuncRegex2 "\<regex\.\(is_valid\|split\|globs_match\|template_match\|find_n\|find_all_string_submatch_n\|replace\)\>" |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 29 | |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 30 | syn match regoFuncUuid "\<uuid.rfc4122\>" |
| 31 | syn match regoFuncBits "\<bits\.\(or\|and\|negate\|xor\|lsh\|rsh\)\>" |
| 32 | syn match regoFuncObject "\<object\.\(get\|remove\|subset\|union\|union_n\|filter\)\>" |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 33 | syn match regoFuncGlob "\<glob\.\(match\|quote_meta\)\>" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 34 | syn match regoFuncUnits "\<units\.parse\(_bytes\)\=\>" |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 35 | syn keyword regoFuncTypes is_number is_string is_boolean is_array is_set is_object is_null type_name |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 36 | syn match regoFuncEncoding1 "\<base64\.\(encode\|decode\|is_valid\)\>" |
| 37 | syn match regoFuncEncoding2 "\<base64url\.\(encode\(_no_pad\)\=\|decode\)\>" |
| 38 | syn match regoFuncEncoding3 "\<urlquery\.\(encode\|decode\|\(en\|de\)code_object\)\>" |
| 39 | syn match regoFuncEncoding4 "\<\(json\|yaml\)\.\(is_valid\|marshal\|unmarshal\)\>" |
| 40 | syn match regoFuncEncoding5 "\<json\.\(filter\|patch\|remove\)\>" |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 41 | syn match regoFuncTokenSigning "\<io\.jwt\.\(encode_sign_raw\|encode_sign\)\>" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 42 | syn match regoFuncTokenVerification1 "\<io\.jwt\.\(decode\|decode_verify\)\>" |
| 43 | syn match regoFuncTokenVerification2 "\<io\.jwt\.verify_\(rs\|ps\|es\|hs\)\(256\|384\|512\)\>" |
| 44 | syn match regoFuncTime "\<time\.\(now_ns\|parse_ns\|parse_rfc3339_ns\|parse_duration_ns\|date\|clock\|weekday\|diff\|add_date\)\>" |
| 45 | syn match regoFuncCryptography "\<crypto\.x509\.\(parse_certificates\|parse_certificate_request\|parse_and_verify_certificates\|parse_rsa_private_key\)\>" |
| 46 | syn match regoFuncCryptography "\<crypto\.\(md5\|sha1\|sha256\)" |
| 47 | syn match regoFuncCryptography "\<crypto\.hmac\.\(md5\|sha1\|sha256\|sha512\)" |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 48 | syn keyword regoFuncGraphs walk |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 49 | syn match regoFuncGraphs2 "\<graph\.reachable\(_paths\)\=\>" |
| 50 | syn match regoFuncGraphQl "\<graphql\.\(\(schema_\)\=is_valid\|parse\(_\(and_verify\|query\|schema\)\)\=\)\>" |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 51 | syn match regoFuncHttp "\<http\.send\>" |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 52 | syn match regoFuncNet "\<net\.\(cidr_merge\|cidr_contains\|cidr_contains_matches\|cidr_intersects\|cidr_expand\|lookup_ip_addr\|cidr_is_valid\)\>" |
| 53 | syn match regoFuncRego "\<rego\.\(parse_module\|metadata\.\(rule\|chain\)\)\>" |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 54 | syn match regoFuncOpa "\<opa\.runtime\>" |
| 55 | syn keyword regoFuncDebugging trace |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 56 | syn match regoFuncRand "\<rand\.intn\>" |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 57 | |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 58 | syn match regoFuncNumbers "\<numbers\.\(range\|intn\)\>" |
| 59 | syn keyword regoFuncNumbers round ceil floor abs |
| 60 | |
| 61 | syn match regoFuncSemver "\<semver\.\(is_valid\|compare\)\>" |
| 62 | syn keyword regoFuncConversions to_number |
| 63 | syn match regoFuncHex "\<hex\.\(encode\|decode\)\>" |
| 64 | |
| 65 | hi def link regoFuncUuid Statement |
| 66 | hi def link regoFuncBits Statement |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 67 | hi def link regoDirective Statement |
| 68 | hi def link regoKeywords Statement |
| 69 | hi def link regoFuncAggregates Statement |
| 70 | hi def link regoFuncArrays Statement |
| 71 | hi def link regoFuncSets Statement |
| 72 | hi def link regoFuncStrings Statement |
| 73 | hi def link regoFuncStrings2 Statement |
| 74 | hi def link regoFuncStrings3 Statement |
| 75 | hi def link regoFuncRegex Statement |
| 76 | hi def link regoFuncRegex2 Statement |
| 77 | hi def link regoFuncGlob Statement |
| 78 | hi def link regoFuncUnits Statement |
| 79 | hi def link regoFuncTypes Statement |
| 80 | hi def link regoFuncEncoding1 Statement |
| 81 | hi def link regoFuncEncoding2 Statement |
| 82 | hi def link regoFuncEncoding3 Statement |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 83 | hi def link regoFuncEncoding4 Statement |
| 84 | hi def link regoFuncEncoding5 Statement |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 85 | hi def link regoFuncTokenSigning Statement |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 86 | hi def link regoFuncTokenVerification1 Statement |
| 87 | hi def link regoFuncTokenVerification2 Statement |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 88 | hi def link regoFuncTime Statement |
| 89 | hi def link regoFuncCryptography Statement |
| 90 | hi def link regoFuncGraphs Statement |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 91 | hi def link regoFuncGraphQl Statement |
| 92 | hi def link regoFuncGraphs2 Statement |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 93 | hi def link regoFuncHttp Statement |
| 94 | hi def link regoFuncNet Statement |
| 95 | hi def link regoFuncRego Statement |
| 96 | hi def link regoFuncOpa Statement |
| 97 | hi def link regoFuncDebugging Statement |
Bram Moolenaar | 86b4816 | 2022-12-06 18:20:10 +0000 | [diff] [blame] | 98 | hi def link regoFuncObject Statement |
| 99 | hi def link regoFuncNumbers Statement |
| 100 | hi def link regoFuncSemver Statement |
| 101 | hi def link regoFuncConversions Statement |
| 102 | hi def link regoFuncHex Statement |
| 103 | hi def link regoFuncRand Statement |
Bram Moolenaar | 95a9dd1 | 2019-12-19 22:12:03 +0100 | [diff] [blame] | 104 | |
| 105 | " https://www.openpolicyagent.org/docs/latest/policy-language/#strings |
| 106 | syn region regoString start=+"+ skip=+\\\\\|\\"+ end=+"+ |
| 107 | syn region regoRawString start=+`+ end=+`+ |
| 108 | |
| 109 | hi def link regoString String |
| 110 | hi def link regoRawString String |
| 111 | |
| 112 | " Comments; their contents |
| 113 | syn keyword regoTodo contained TODO FIXME XXX BUG |
| 114 | syn cluster regoCommentGroup contains=regoTodo |
| 115 | syn region regoComment start="#" end="$" contains=@regoCommentGroup,@Spell |
| 116 | |
| 117 | hi def link regoComment Comment |
| 118 | hi def link regoTodo Todo |
| 119 | |
| 120 | let b:current_syntax = 'rego' |