365 lines
11 KiB
JSON
365 lines
11 KiB
JSON
{
|
|
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
|
|
|
|
"name": "Caddyfile",
|
|
"fileTypes": ["Caddyfile"],
|
|
"scopeName": "source.Caddyfile",
|
|
|
|
"patterns": [
|
|
{ "include": "#comments" },
|
|
{ "include": "#strings" },
|
|
{ "include": "#domains" },
|
|
{ "include": "#status_codes" },
|
|
{ "include": "#path" },
|
|
{ "include": "#global_options" },
|
|
{ "include": "#matchers" },
|
|
{ "include": "#directive" },
|
|
{ "include": "#site_block_common" }
|
|
],
|
|
|
|
"repository": {
|
|
"comments": {
|
|
"patterns": [
|
|
{
|
|
"name": "comment.line.Caddyfile",
|
|
"match": "\\s#.*"
|
|
},
|
|
{
|
|
"name": "comment.line.Caddyfile",
|
|
"match": "^#.*"
|
|
}
|
|
]
|
|
},
|
|
|
|
"strings": {
|
|
"patterns": [
|
|
{
|
|
"comment": "Double Quoted Strings",
|
|
"begin": "\"",
|
|
"end": "\"",
|
|
"name": "string.quoted.double.Caddyfile",
|
|
"patterns": [
|
|
{
|
|
"name": "constant.character.escape.Caddyfile",
|
|
"match": "\\\\\""
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"comment": "Backtick Strings",
|
|
"begin": "`",
|
|
"end": "`",
|
|
"name": "string.quoted.single.Caddyfile"
|
|
}
|
|
]
|
|
},
|
|
|
|
"status_codes": {
|
|
"patterns": [
|
|
{
|
|
"name": "constant.numeric.decimal",
|
|
"match": "\\s[0-9]{3}(?!\\.)"
|
|
}
|
|
]
|
|
},
|
|
|
|
"path": {
|
|
"patterns": [
|
|
{
|
|
"name": "keyword.control.caddyfile",
|
|
"match": "(unix/)*/[a-zA-Z0-9_\\-./*]+"
|
|
},
|
|
{
|
|
"name": "variable.other.property.caddyfile",
|
|
"match": "\\*.[a-z]{1,5}"
|
|
},
|
|
{
|
|
"name": "variable.other.property.caddyfile",
|
|
"match": "\\*/?"
|
|
},
|
|
{
|
|
"name": "variable.other.property.caddyfile",
|
|
"match": "\\?/"
|
|
}
|
|
]
|
|
},
|
|
|
|
"domains": {
|
|
"patterns": [
|
|
{
|
|
"comment": "Domains and URLs",
|
|
"name": "keyword.control.caddyfile",
|
|
"match": "(https?://)*[a-z0-9-\\*]*(?:\\.[a-zA-Z]{2,})+(:[0-9]+)*\\S*"
|
|
},
|
|
{
|
|
"comment": "localhost",
|
|
"name": "keyword.control.caddyfile",
|
|
"match": "localhost(:[0-9]+)*"
|
|
},
|
|
{
|
|
"comment": "IPv4",
|
|
"name": "keyword.control.caddyfile",
|
|
"match": "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
|
|
},
|
|
{
|
|
"comment": "IPv6",
|
|
"name": "keyword.control.caddyfile",
|
|
"match": "(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))"
|
|
},
|
|
{
|
|
"comment": "Ports",
|
|
"name": "keyword.control.caddyfile",
|
|
"match": ":[0-9]+"
|
|
}
|
|
]
|
|
},
|
|
|
|
"global_options": {
|
|
"patterns": [
|
|
{
|
|
"begin": "^(\\{)$",
|
|
"end": "^(\\})$",
|
|
|
|
"beginCaptures": {
|
|
"0": { "name": "punctuation.definition.dictionary.begin" }
|
|
},
|
|
|
|
"endCaptures": {
|
|
"0": { "name": "punctuation.definition.dictionary.end" }
|
|
},
|
|
|
|
"patterns": [
|
|
{ "include": "#comments" },
|
|
{
|
|
"name": "support.constant.Caddyfile",
|
|
"match": "^\\s*(debug|https?_port|default_bind|order|storage|storage_clean_interval|renew_interval|ocsp_interval|admin|log|grace_period|shutdown_delay|auto_https|email|default_sni|local_certs|skip_install_trust|acme_ca|acme_ca_root|acme_eab|acme_dns|on_demand_tls|key_type|cert_issuer|ocsp_stapling|preferred_chains|servers|pki|events)"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
|
|
"site_block_common": {
|
|
"patterns": [{ "include": "#placeholders" }, { "include": "#block" }]
|
|
},
|
|
|
|
"matchers": {
|
|
"patterns": [
|
|
{
|
|
"comment": "Matchers",
|
|
"name": "support.function.Caddyfile",
|
|
"match": "@[^\\s]+(?=\\s)"
|
|
}
|
|
]
|
|
},
|
|
|
|
"placeholders": {
|
|
"patterns": [
|
|
{
|
|
"name": "keyword.control.Caddyfile",
|
|
"match": "\\{[\\[\\]\\w.\\$+-]+\\}"
|
|
}
|
|
]
|
|
},
|
|
|
|
"directive": {
|
|
"patterns": [
|
|
{
|
|
"name": "entity.name.function.Caddyfile",
|
|
"match": "^\\s*[a-zA-Z_\\-+]+"
|
|
},
|
|
{ "include": "#content_types" },
|
|
{ "include": "#heredoc" }
|
|
]
|
|
},
|
|
|
|
"content_types": {
|
|
"patterns": [
|
|
{
|
|
"comment": "Content Types",
|
|
"name": "variable.other.property.caddyfile",
|
|
"match": "(application|audio|example|font|image|message|model|multipart|text|video)/[a-zA-Z0-9*+\\-.]+;* *[a-zA-Z0-9=\\-]*"
|
|
}
|
|
]
|
|
},
|
|
|
|
"block": {
|
|
"patterns": [
|
|
{
|
|
"begin": "\\{",
|
|
"end": "\\}",
|
|
|
|
"patterns": [{ "include": "#block_content" }]
|
|
}
|
|
]
|
|
},
|
|
|
|
"block_content": {
|
|
"patterns": [
|
|
{
|
|
"patterns": [
|
|
{ "include": "#comments" },
|
|
{ "include": "#strings" },
|
|
{ "include": "#domains" },
|
|
{ "include": "#status_codes" },
|
|
{ "include": "#path" },
|
|
{ "include": "#matchers" },
|
|
{ "include": "#placeholders" },
|
|
{ "include": "#directive" },
|
|
{ "include": "#block" }
|
|
]
|
|
}
|
|
]
|
|
},
|
|
|
|
"heredoc": {
|
|
"patterns": [
|
|
{
|
|
"begin": "(?i)(?=<<\\s*([a-z_\\x{7f}-\\x{10ffff}][a-z0-9_\\x{7f}-\\x{10ffff}]*)\\s*$)",
|
|
"end": "(?!\\G)",
|
|
"name": "string.unquoted.heredoc.caddyfile",
|
|
"patterns": [{ "include": "#heredoc_interior" }]
|
|
}
|
|
]
|
|
},
|
|
|
|
"heredoc_interior": {
|
|
"patterns": [
|
|
{
|
|
"comment": "CSS",
|
|
|
|
"name": "meta.embedded.css",
|
|
"contentName": "source.css",
|
|
|
|
"begin": "(<<)\\s*(CSS)(\\s*)$",
|
|
"beginCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.begin.caddyfile" },
|
|
"1": { "name": "punctuation.definition.string.begin" },
|
|
"2": { "name": "keyword.operator.heredoc.caddyfile" },
|
|
"4": { "name": "invalid.illegal.trailing-whitespace.caddyfile" }
|
|
},
|
|
|
|
"end": "^\\s*(\\2)(?![A-Za-z0-9_\\x{7f}-\\x{10ffff}])",
|
|
"endCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.end.caddyfile" },
|
|
"1": { "name": "keyword.operator.heredoc.caddyfile" }
|
|
},
|
|
|
|
"patterns": [{ "include": "source.css" }]
|
|
},
|
|
|
|
{
|
|
"comment": "HTML",
|
|
|
|
"name": "meta.embedded.html",
|
|
"contentName": "text.html",
|
|
|
|
"begin": "(<<)\\s*(HTML)(\\s*)$",
|
|
"beginCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.begin.caddyfile" },
|
|
"1": { "name": "punctuation.definition.string.begin" },
|
|
"2": { "name": "keyword.operator.heredoc.caddyfile" },
|
|
"4": { "name": "invalid.illegal.trailing-whitespace.caddyfile" }
|
|
},
|
|
|
|
"end": "^\\s*(\\2)(?![A-Za-z0-9_\\x{7f}-\\x{10ffff}])",
|
|
"endCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.end.caddyfile" },
|
|
"1": { "name": "keyword.operator.heredoc.caddyfile" }
|
|
},
|
|
|
|
"patterns": [{ "include": "text.html.basic" }]
|
|
},
|
|
|
|
{
|
|
"comment": "JavaScript",
|
|
|
|
"name": "meta.embedded.js",
|
|
"contentName": "source.js",
|
|
|
|
"begin": "(<<)\\s*(JAVASCRIPT|JS)(\\s*)$",
|
|
"beginCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.begin.caddyfile" },
|
|
"1": { "name": "punctuation.definition.string.begin" },
|
|
"2": { "name": "keyword.operator.heredoc.caddyfile" },
|
|
"4": { "name": "invalid.illegal.trailing-whitespace.caddyfile" }
|
|
},
|
|
|
|
"end": "^\\s*(\\2)(?![A-Za-z0-9_\\x{7f}-\\x{10ffff}])",
|
|
"endCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.end.caddyfile" },
|
|
"1": { "name": "keyword.operator.heredoc.caddyfile" }
|
|
},
|
|
|
|
"patterns": [{ "include": "source.js" }]
|
|
},
|
|
|
|
{
|
|
"comment": "JSON",
|
|
|
|
"name": "meta.embedded.json",
|
|
"contentName": "source.json",
|
|
|
|
"begin": "(<<)\\s*(JSON)(\\s*)$",
|
|
"beginCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.begin.caddyfile" },
|
|
"1": { "name": "punctuation.definition.string.begin" },
|
|
"2": { "name": "keyword.operator.heredoc.caddyfile" },
|
|
"4": { "name": "invalid.illegal.trailing-whitespace.caddyfile" }
|
|
},
|
|
|
|
"end": "^\\s*(\\2)(?![A-Za-z0-9_\\x{7f}-\\x{10ffff}])",
|
|
"endCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.end.caddyfile" },
|
|
"1": { "name": "keyword.operator.heredoc.caddyfile" }
|
|
},
|
|
|
|
"patterns": [{ "include": "source.json" }]
|
|
},
|
|
|
|
{
|
|
"comment": "XML",
|
|
|
|
"name": "meta.embedded.xml",
|
|
"contentName": "text.xml",
|
|
|
|
"begin": "(<<)\\s*(XML)(\\s*)$",
|
|
"beginCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.begin.caddyfile" },
|
|
"1": { "name": "punctuation.definition.string.begin" },
|
|
"2": { "name": "keyword.operator.heredoc.caddyfile" },
|
|
"4": { "name": "invalid.illegal.trailing-whitespace.caddyfile" }
|
|
},
|
|
|
|
"end": "^\\s*(\\2)(?![A-Za-z0-9_\\x{7f}-\\x{10ffff}])",
|
|
"endCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.end.caddyfile" },
|
|
"1": { "name": "keyword.operator.heredoc.caddyfile" }
|
|
},
|
|
|
|
"patterns": [{ "include": "text.xml" }]
|
|
},
|
|
|
|
{
|
|
"comment": "Any other heredoc",
|
|
|
|
"begin": "(?i)(<<)\\s*([a-z_\\x{7f}-\\x{10ffff}]+[a-z0-9_\\x{7f}-\\x{10ffff}]*)(\\s*)",
|
|
"beginCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.begin.caddyfile" },
|
|
"1": { "name": "punctuation.definition.string.caddyfile" },
|
|
"2": { "name": "keyword.operator.heredoc.caddyfile" },
|
|
"4": { "name": "invalid.illegal.trailing-whitespace.caddyfile" }
|
|
},
|
|
|
|
"end": "^\\s*(\\2)(?![A-Za-z0-9_\\x{7f}-\\x{10ffff}])",
|
|
"endCaptures": {
|
|
"0": { "name": "punctuation.section.embedded.end.caddyfile" },
|
|
"1": { "name": "keyword.operator.heredoc.caddyfile" }
|
|
},
|
|
|
|
"patterns": []
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|