Files
remanso/src/utils/alloy.tmLanguage.json
2026-04-29 10:34:46 +02:00

297 lines
9.6 KiB
JSON

{
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
"name": "Alloy",
"scopeName": "source.als",
"patterns": [
{ "include": "#comments" },
{ "include": "#declaration" },
{ "include": "#expression" },
{ "include": "#built-in" },
{ "include": "#keywords" },
{ "include": "#digit" }
],
"repository": {
"comments": {
"patterns": [
{ "begin": "/\\*", "end": "\\*/", "name": "comment.block.alloy" },
{ "begin": "//", "end": "\n", "name": "comment.line.double-slash" },
{ "begin": "--", "end": "\n", "name": "comment.line.double-dash" }
]
},
"keywords": {
"patterns": [
{ "include": "#define" },
{ "include": "#modifier" },
{ "include": "#operator" },
{ "include": "#control" },
{ "include": "#variable" }
],
"repository": {
"define": {
"patterns": [
{ "match": "\\b(sig)\\b", "name": "keyword.language.sig.alloy" },
{ "match": "\\b(fact)\\b", "name": "keyword.language.fact.alloy" },
{ "match": "\\b(pred)\\b", "name": "keyword.language.pred.alloy" },
{ "match": "\\b(fun)\\b", "name": "keyword.language.fun.alloy" },
{
"match": "\\b(module)\\b",
"name": "keyword.language.module.alloy"
},
{
"match": "\\b(extends)\\b",
"name": "keyword.language.extends.alloy"
},
{ "match": ":", "name": "keyword.other.colon.alloy" },
{
"match": "\\b(check)\\b",
"name": "keyword.language.check.alloy"
},
{
"match": "\\b(assert)\\b",
"name": "keyword.language.assert.alloy"
},
{ "match": "\\b(run)\\b", "name": "keyword.language.run.alloy" },
{ "match": "\\b(open)\\b", "name": "keyword.other.open.alloy" },
{ "match": "\\b(as)\\b", "name": "keyword.other.as.alloy" },
{ "match": "\\b(in)\\b", "name": "keyword.other.in.alloy" }
]
},
"modifier": {
"patterns": [
{ "match": "\\b(var)\\b", "name": "keyword.modifier.var.alloy" },
{
"match": "\\b(private)\\b",
"name": "keyword.modifier.private.alloy"
},
{
"match": "\\b(abstract)\\b",
"name": "keyword.modifier.abstract.alloy"
},
{
"match": "\\b(all|disj|lone|no|one|set|seq|some|sum|univ|none)\\b",
"name": "keyword.modifier.set.alloy"
}
]
},
"operator": {
"patterns": [
{ "include": "#temporal" },
{ "include": "#unary" },
{ "include": "#binary" }
],
"repository": {
"temporal": {
"patterns": [
{
"match": "\\b(always|eventually|after|before|historically|once|prev)\\b",
"name": "keyword.operator.temporal.unary.alloy"
},
{
"match": "\\b(until|releases|since|triggered)\\b",
"name": "keyword.operator.temporal.binary.alloy"
}
]
},
"unary": {
"patterns": [
{
"match": "!|#|~|\\*|\\^|(\\b(not)\\b)",
"name": "keyword.operator.unary.alloy"
}
]
},
"binary": {
"patterns": [
{
"match": "(?:\\|\\|)|&&|<=>|=>|&|\\+|-|\\+\\+|<:|:>|\\.|=|->",
"name": "keyword.operator.binary.alloy"
},
{
"match": "\\b(and|or|iff|implies|else|in)\\b",
"name": "keyword.operator.binary.alloy"
},
{
"match": "=|<|>|=<|>=",
"name": "keyword.operator.binary.alloy"
},
{ "match": ",", "name": "keyword.other.comma.alloy" },
{ "match": "\\|", "name": "keyword.other.split.alloy" }
]
}
}
},
"variable": {
"patterns": [
{ "match": "\\b(let)\\b", "name": "keyword.language.let.alloy" },
{ "match": "\\b(this)\\b", "name": "keyword.language.this.alloy" }
]
},
"control": {
"patterns": [
{ "match": "\\b(for)\\b", "name": "keyword.control.for.alloy" },
{ "match": "\\b(but)\\b", "name": "keyword.control.but.alloy" },
{
"match": "\\b(exactly)\\b",
"name": "keyword.control.exactly.alloy"
},
{
"match": "\\b(expect)\\b",
"name": "keyword.control.expect.alloy"
},
{ "match": "\\b(steps)\\b", "name": "keyword.control.steps.alloy" }
]
}
}
},
"declaration": {
"patterns": [
{ "include": "#module" },
{ "include": "#predict" },
{ "include": "#signature" },
{ "include": "#fact" },
{ "include": "#fun" }
],
"repository": {
"module": {
"patterns": [
{
"match": "(module)\\b\\s*((?:\\w|'|_|\\d|/)+)",
"captures": {
"1": { "name": "keyword.language.module.alloy" },
"2": { "name": "support.class.module.alloy" }
}
}
]
},
"predict": {
"patterns": [
{
"match": "(pred)\\b\\s*((?:\\w|'|_|\\d|/)+)",
"captures": {
"1": { "name": "keyword.language.pred.alloy" },
"2": { "name": "entity.name.function.pred.alloy" }
}
}
]
},
"signature": {
"patterns": [
{
"begin": "(abstract)?\\s*(lone|some|one)?\\s*(var)?\\s*(sig)\\b\\s*",
"end": "(?=\\{)",
"beginCaptures": {
"1": { "name": "keyword.modifier.abstract.alloy" },
"2": { "name": "keyword.modifier.set.alloy" },
"3": { "name": "keyword.modifier.var.alloy" },
"4": { "name": "keyword.language.sig.alloy" }
},
"patterns": [
{
"begin": "(extends)",
"end": "(?=\\{)",
"beginCaptures": {
"1": { "name": "keyword.language.extends.alloy" }
},
"patterns": [
{
"match": "(?:\\w|'|_|\\d|/)+",
"name": "entity.other.inherited-class.alloy"
}
]
},
{
"begin": "(in)",
"end": "(?=\\{)",
"beginCaptures": {
"1": { "name": "keyword.other.in.alloy" }
},
"patterns": [
{
"match": "(?:\\w|'|_|\\d|/)+",
"name": "entity.other.inherited-class.alloy"
},
{ "match": "\\+", "name": "keyword.operator.binary.alloy" }
]
},
{
"match": "(?:\\w|'|_|\\d|/)+",
"name": "entity.name.type.signature.alloy"
},
{ "match": ",", "name": "keyword.other.comma.alloy" }
]
}
]
},
"fact": {
"patterns": [
{
"match": "(fact)\\b\\s*((?:\\w|'|_|\\d|/)+)",
"captures": {
"1": { "name": "keyword.language.fact.alloy" },
"2": { "name": "entity.name.function.fact.alloy" }
}
}
]
},
"fun": {
"patterns": [
{
"match": "(fun)\\b\\s*((?:\\w|'|_|\\d|/)+)",
"captures": {
"1": { "name": "keyword.language.fun.alloy" },
"2": { "name": "entity.name.function.fun.alloy" }
}
}
]
}
}
},
"expression": {
"patterns": [
{
"match": "(check)\\b\\s*((?:\\w|'|_|\\d|/)+)",
"captures": {
"1": { "name": "keyword.language.check.alloy" },
"2": { "name": "entity.name.function.check.alloy" }
}
},
{
"match": "(assert)\\b\\s*((?:\\w|'|_|\\d|/)+)",
"captures": {
"1": { "name": "keyword.language.assert.alloy" },
"2": { "name": "entity.name.function.check.alloy" }
}
}
]
},
"digit": {
"patterns": [
{ "match": "\\b(\\d+)\\b", "name": "constant.numeric.alloy" }
]
},
"built-in": {
"patterns": [
{
"match": "\\b(plus|minus|mul|div|rem|sum)\\[",
"captures": { "1": { "name": "support.function.numeric.alloy" } }
},
{
"match": "\\b(open)\\b\\s*((?:\\w|'|_|\\d|/)+)\\[",
"captures": {
"1": { "name": "keyword.other.open.alloy" },
"2": { "name": "support.class.module.alloy" }
}
},
{
"match": "(/(?:\\w|'|_|\\d|/)+)",
"captures": { "1": { "name": "support.function.order.alloy" } }
},
{
"match": "((?:\\w|'|_|\\d)+)\\s*\\[",
"captures": { "1": { "name": "support.function.order.alloy" } }
}
]
}
}
}