{"name":"VCL","scopeName":"source.varnish.vcl","patterns":[{"name":"comment.line.number-sign.vcl","match":"\\#.*"},{"name":"comment.line.double-slash.vcl","match":"\\/\\/.*"},{"name":"comment.block.vcl","begin":"\\/\\*","end":"\\*\\/"},{"name":"meta.include.vcl","begin":"\\b(import|include)\\b\\s*","end":"(?=\\s|;|$)","patterns":[{"include":"#strings"}],"beginCaptures":{"1":{"name":"keyword.control.import.php"}}},{"name":"meta.director.vcl","begin":"(?i)^\\s*(director)\\s+([a-z0-9_]+)\\s+(round\\-robin|random|client|hash|dns|fallback)\\s*\\{","end":"\\}","patterns":[{"include":"$self"}],"captures":{"1":{"name":"storage.type.director.vcl"},"2":{"name":"entity.name.type.director.vcl"},"3":{"name":"storage.type.director.family.vcl"}}},{"name":"meta.backend.vcl","begin":"(?i)^\\s*(backend)\\s+([a-z0-9_]+)\\s*\\{","end":"\\}","patterns":[{"include":"$self"}],"captures":{"1":{"name":"storage.type.backend.vcl"},"2":{"name":"entity.name.type.backend.vcl"}}},{"name":"meta.acl.vcl","begin":"(?i)^\\s*(acl)\\s+([a-z0-9_]+)\\s*\\{","end":"\\}","patterns":[{"include":"$self"}],"captures":{"1":{"name":"storage.type.acl.vcl"},"2":{"name":"entity.name.type.acl.vcl"}}},{"name":"meta.probe.vcl","match":"(?i)^\\s*(probe)\\s+([a-z0-9_]+)\\s*","captures":{"1":{"name":"storage.type.probe.vcl"},"2":{"name":"entity.name.type.probe.vcl"}}},{"name":"meta.subroutine.vcl","begin":"(?i)^\\s*(sub)\\s+([a-z0-9_]+)\\s*\\{","end":"\\}","patterns":[{"include":"$self"}],"captures":{"1":{"name":"storage.type.subroutine.vcl"},"2":{"name":"entity.name.type.subroutine.vcl"}}},{"begin":"\\b(return)\\s*\\(","end":"\\)","patterns":[{"name":"constant.language.return.vcl","match":"(deliver|error|fetch|hash|hit_for_pass|lookup|ok|pass|pipe|restart|synth|retry|abandon|fail|purge)"}],"captures":{"1":{"name":"keyword.control.vcl"}}},{"name":"meta.error.vcl","begin":"\\b(error)\\b\\s*","end":"(?=\\s|;|$)","patterns":[{"include":"#strings"},{"include":"#numbers"}],"beginCaptures":{"1":{"name":"keyword.control.error"}}},{"match":"\\b(set|unset|remove|synthetic|call|if|else|elsif|else if)\\b","captures":{"1":{"name":"keyword.control.php"}}},{"include":"#variables"},{"include":"#numbers"},{"include":"#strings"},{"include":"#functions"},{"include":"#constants"},{"include":"#subkeys"},{"include":"#blocks"}],"repository":{"blocks":{"patterns":[{"begin":"\\{","end":"\\}","patterns":[{"include":"$self"}]}]},"constants":{"patterns":[{"name":"constant.builtin.vcl","match":"\\b(true|false|now)\\b"}]},"functions":{"patterns":[{"name":"support.function.builtin.vcl","match":"(hash_data|regsuball|regsub|ban_url|ban|purge|synth)"},{"name":"support.function.module.std.vcl","match":"std\\.(log|toupper|tolower|set_ip_tos|random|log|syslog|fileread|collect|duration|integer|ip)"},{"name":"support.function.module.libvmodredis.vcl","match":"redis[0-9]?\\.(call|send|pipeline|init_redis)"}]},"numbers":{"patterns":[{"name":"constant.numeric.time.vcl","match":"\\b[0-9]+ ?(m|s|h|d|w)\\b"},{"name":"constant.numeric.vcl","match":"\\b[0-9]+(\\b|;)"}]},"string-double-quoted":{"patterns":[{"name":"string.quoted.double.vcl","contentName":"meta.string-contents.quoted.double.vcl","begin":"\"","end":"\"","patterns":[{"name":"constant.character.escape.vcl","match":"\\\\[\\\\\"]"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.vcl"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.vcl"}}}]},"string-long":{"patterns":[{"name":"string.quoted.long.vcl","contentName":"meta.string-contents.quoted.double.vcl","begin":"\\{\"","end":"\"\\}","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.vcl"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.vcl"}}}]},"string-single-quoted":{"name":"string.quoted.single.vcl","contentName":"meta.string-contents.quoted.single.vcl","begin":"'","end":"'","patterns":[{"name":"constant.character.escape.vcl","match":"\\\\[\\\\']"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.vcl"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.vcl"}}},"strings":{"patterns":[{"include":"#string-long"},{"include":"#string-single-quoted"},{"include":"#string-double-quoted"}]},"subkeys":{"patterns":[{"name":"variable.subkey.vcl","match":"\\.(max_connections|first_byte_timeout|between_bytes_timeout|probe|host_header|retries|backend|weight|host|list|port|connect_timeout|ttl|suffix|url|request|window|threshold|initial|expected_response|interval|timeout)\\b"}]},"variables":{"patterns":[{"name":"variable.other.vcl","match":"(req|bereq|obj|beresp|client|server|resp)\\.[a-zA-Z0-9\\-\\_\\.]+"}]}}}