opengoal-vscode/syntaxes/opengoal.tmLanguage.json

271 lines
6.8 KiB
JSON
Raw Normal View History

{
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
"information_for_contributors": [
"Largely converted from - https://github.com/microsoft/vscode/blob/main/extensions/clojure/syntaxes/clojure.tmLanguage.json"
],
"name": "OpenGOAL",
"scopeName": "source.opengoal",
"patterns": [
{
"include": "#comment"
},
{
"include": "#quoted-sexp"
},
{
"include": "#sexp"
},
{
"include": "#keyfn"
},
{
"include": "#string"
},
{
"include": "#regexp"
},
{
"include": "#var"
},
{
"include": "#constants"
},
{
"include": "#symbol"
},
{
"include": "#readerMacros"
}
],
"repository": {
"comment": {
"patterns": [
{
"begin": ";",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.opengoal"
}
},
"end": "$",
"name": "comment.line.semicolon.opengoal"
},
{
"begin": "#\\|",
"end": "\\|#",
"name": "comment.block.opengoal"
}
]
},
"constants": {
"patterns": [
{
"match": "(none|#f)(?=(\\s|\\)|\\]|\\}))",
"name": "constant.language.nil.opengoal"
},
{
"match": "(#t|#f)",
"name": "constant.language.boolean.opengoal"
},
{
"match": "([-+]?\\d+/\\d+)",
"name": "constant.numeric.ratio.opengoal"
},
{
"match": "([-+]?(?:(?:3[0-6])|(?:[12]\\d)|[2-9])[rR][0-9A-Za-z]+N?)",
"name": "constant.numeric.arbitrary-radix.opengoal"
},
{
"match": "([-+]?0[xX][0-9a-fA-F]+N?)",
"name": "constant.numeric.hexadecimal.opengoal"
},
{
"match": "([-+]?0[0-7]+N?)",
"name": "constant.numeric.octal.opengoal"
},
{
"match": "([-+]?[0-9]+(?:(\\.|(?=[eEM]))[0-9]*([eE][-+]?[0-9]+)?)M?)",
"name": "constant.numeric.double.opengoal"
},
{
"match": "([-+]?\\d+N?)",
"name": "constant.numeric.long.opengoal"
},
{
"include": "#keyword"
}
]
},
"keyword": {
"match": "(?<=(\\s|\\(|\\[|\\{)):[\\w\\#\\.\\-\\_\\:\\+\\=\\>\\<\\/\\!\\?\\*]+(?=(\\s|\\)|\\]|\\}|\\,))",
"name": "constant.keyword.opengoal"
},
"keyfn": {
"patterns": [
{
"match": "(?<=(\\s|\\(|\\[|\\{))(if(-[-\\p{Ll}\\?]*)?|when(-[-\\p{Ll}]*)?|unless(-[-\\p{Ll}]*)?|cond|do|let(-[-\\p{Ll}\\?]*)?|lambda|throw[\\p{Ll}\\-]*|([\\p{Ll}]*case))(?=(\\s|\\)|\\]|\\}))",
"name": "storage.control.opengoal"
},
{
"match": "(?<=(\\s|\\(|\\[|\\{))(declare-?|(in-)?ns|import|use|require|load|compile|(def[\\p{Ll}\\-]*))(?=(\\s|\\)|\\]|\\}))",
"name": "keyword.control.opengoal"
}
]
},
"quoted-sexp": {
"begin": "(['``]\\()",
"beginCaptures": {
"1": {
"name": "keyword.operator.opengoal punctuation.section.expression.begin.opengoal"
}
},
"end": "(\\))$|(\\)(?=[\\}\\]\\)\\s]*(?:;|$)))|(\\))",
"endCaptures": {
"1": {
"name": "punctuation.section.expression.end.trailing.opengoal"
},
"2": {
"name": "punctuation.section.expression.end.trailing.opengoal"
},
"3": {
"name": "punctuation.section.expression.end.opengoal"
}
},
"name": "meta.quoted-expression.opengoal",
"patterns": [
{
"include": "$self"
}
]
},
"regexp": {
"begin": "#\"",
"beginCaptures": {
"0": {
"name": "punctuation.definition.regexp.begin.opengoal"
}
},
"end": "\"",
"endCaptures": {
"0": {
"name": "punctuation.definition.regexp.end.opengoal"
}
},
"name": "string.regexp.opengoal",
"patterns": [
{
"include": "#regexp_escaped_char"
}
]
},
"regexp_escaped_char": {
"match": "\\\\.",
"name": "constant.character.escape.opengoal"
},
"sexp": {
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "punctuation.section.expression.begin.opengoal"
}
},
"end": "(\\))$|(\\)(?=[\\}\\]\\)\\s]*(?:;|$)))|(\\))",
"endCaptures": {
"1": {
"name": "punctuation.section.expression.end.trailing.opengoal"
},
"2": {
"name": "punctuation.section.expression.end.trailing.opengoal"
},
"3": {
"name": "punctuation.section.expression.end.opengoal"
}
},
"name": "meta.expression.opengoal",
"patterns": [
{
"begin": "(?<=\\()(ns|declare|def[\\w\\d._:+=><!?*-]*|[\\w._:+=><!?*-][\\w\\d._:+=><!?*-]*/def[\\w\\d._:+=><!?*-]*)\\s+",
"beginCaptures": {
"1": {
"name": "keyword.control.opengoal"
}
},
"end": "(?=\\))",
"name": "meta.definition.global.opengoal",
"patterns": [
{
"match": "([\\p{L}\\.\\-\\_\\+\\=\\>\\<\\!\\?\\*][\\w\\.\\-\\_\\:\\+\\=\\>\\<\\!\\?\\*\\d]*)",
"name": "entity.global.opengoal"
},
{
"include": "$self"
}
]
},
{
"include": "#keyfn"
},
{
"include": "#constants"
},
{
"include": "#sexp"
},
{
"match": "(?<=\\()(.+?)(?=\\s|\\))",
"captures": {
"1": {
"name": "entity.name.function.opengoal"
}
},
"patterns": [
{
"include": "$self"
}
]
},
{
"include": "$self"
}
]
},
"string": {
"begin": "(?<!\\\\)(\")",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.opengoal"
}
},
"end": "(\")",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.opengoal"
}
},
"name": "string.quoted.double.opengoal",
"patterns": [
{
"match": "\\\\.",
"name": "constant.character.escape.opengoal"
}
]
},
"symbol": {
"patterns": [
{
"match": "([\\p{L}\\.\\-\\_\\+\\=\\>\\<\\!\\?\\*][\\w\\.\\-\\_\\:\\+\\=\\>\\<\\!\\?\\*\\d]*)",
"name": "meta.symbol.opengoal"
}
]
},
"var": {
"match": "(?<=(\\s|\\(|\\[|\\{)\\#)'[\\w\\.\\-\\_\\:\\+\\=\\>\\<\\/\\!\\?\\*]+(?=(\\s|\\)|\\]|\\}))",
"name": "meta.var.opengoal"
},
"readerMacros": {
"match": "('|,@|`|,)",
"name": "keyword.operator.opengoal"
}
}
}