Files
core/editor/vscode/syntaxes/dever.tmLanguage.json
T

96 lines
3.7 KiB
JSON

{
"name": "Dever",
"scopeName": "source.dever",
"patterns": [
{ "include": "#comments" },
{ "include": "#strings" },
{ "include": "#unsupported" },
{ "include": "#declarations" },
{ "include": "#constants" },
{ "include": "#numbers" },
{ "include": "#names" },
{ "include": "#keywords" },
{ "include": "#operators" }
],
"repository": {
"comments": {
"name": "comment.line.number-sign.dever",
"begin": "#",
"end": "$"
},
"strings": {
"name": "string.quoted.double.dever",
"begin": "\"",
"end": "\"|$",
"beginCaptures": { "0": { "name": "punctuation.definition.string.begin.dever" } },
"endCaptures": { "0": { "name": "punctuation.definition.string.end.dever" } },
"patterns": [
{ "name": "constant.character.escape.dever", "match": "\\\\(?:[\"\\\\nrt]|u\\{[0-9A-Fa-f]{1,6}\\})" },
{ "name": "invalid.illegal.escape.dever", "match": "\\\\." }
]
},
"declarations": {
"patterns": [
{
"match": "\\b(type)\\s+([A-Z][A-Za-z0-9_]*)",
"captures": {
"1": { "name": "storage.type.dever" },
"2": { "name": "entity.name.type.dever" }
}
},
{
"match": "^\\s*(?:(public)\\s+)?(get|post|put|delete|cmd|rest)\\b",
"captures": {
"1": { "name": "storage.modifier.dever" },
"2": { "name": "keyword.control.api.dever" }
}
},
{
"match": "^\\s*(external)\\s+(command|exec|pip|npm|go)\\b",
"captures": {
"1": { "name": "storage.modifier.external.dever" },
"2": { "name": "keyword.other.external.dever" }
}
},
{ "name": "keyword.other.declaration.dever", "match": "^\\s*(database|relation|seed|migrate|sql|index|unique|schedule)\\b" }
]
},
"constants": {
"name": "constant.language.dever",
"match": "\\b(true|false|null|other)\\b"
},
"unsupported": {
"name": "invalid.illegal.keyword.dever",
"match": "\\b(package|exposes|if|else|switch|match|when|by|for|while|break|continue|iterate|recur|repeat|return|function|throw|catch|try|import|use|class|interface|unsafe|macro)\\b"
},
"numbers": {
"name": "constant.numeric.dever",
"match": "(?<![A-Za-z0-9_])[0-9]+(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?(?![A-Za-z0-9_])"
},
"names": {
"patterns": [
{ "name": "variable.other.member.dever", "match": "\\b[a-z_][A-Za-z0-9_]*(?=\\s*:)" },
{ "name": "entity.name.function.dever", "match": "\\b[a-z_][A-Za-z0-9_]*(?=\\s*\\()" },
{ "name": "support.type.dever", "match": "\\b(Int|Float|Decimal|Bool|Text|Bytes|Secret|List|Map|Stream|AsyncStream|Channel|Task|Group|Json|Date|Time|DateTime|Duration|Id|Uuid)\\b" },
{ "name": "entity.name.type.dever", "match": "\\b[A-Z][A-Za-z0-9_]*\\b" },
{ "name": "entity.name.namespace.dever", "match": "\\b(dever|app|domain|model|port|adapter)(?=\\.)" }
]
},
"keywords": {
"patterns": [
{ "name": "keyword.operator.logical.dever", "match": "\\b(and|or|not)\\b" },
{ "name": "storage.modifier.dever", "match": "\\b(public|global|pure|transaction|job|recover|fails|private|owner)\\b" },
{ "name": "keyword.other.model.dever", "match": "\\b(default|unique|index|before|after|drop)\\b" },
{ "name": "keyword.other.adapter.dever", "match": "\\b(setting|lib|allow)\\b" }
]
},
"operators": {
"patterns": [
{ "name": "keyword.operator.dever", "match": "//|==|!=|<=|>=|[=+*/%<>?-]" },
{ "name": "punctuation.section.dever", "match": "[{}()\\[\\]]" },
{ "name": "punctuation.separator.dever", "match": "[,:.]" }
]
}
}
}