Clean up grammar by a lot

This commit is contained in:
Sofia 2025-08-17 16:22:06 +03:00
parent fa95da97ae
commit 8d8d6ac336
2 changed files with 127 additions and 324 deletions

View File

@ -1,56 +1,11 @@
{ {
"scopeName": "source.reid", "scopeName": "source.reid",
"patterns": [ "patterns": [
{
"include": "#import"
},
{ {
"include": "#expression" "include": "#expression"
} }
], ],
"repository": { "repository": {
"import": {
"begin": "(import)\\s*",
"end": ";",
"beginCaptures": {
"1": {
"name": "keyword"
}
},
"endCaptures": {
"0": {
"name": "punctuation.semi.reid"
}
},
"patterns": [
{
"include": "#identifier"
},
{
"include": "#punctiation"
}
]
},
"punctuation": {
"patterns": [
{
"match": "::",
"name": "keyword.operator.namespace.reid"
},
{
"match": ";",
"name": "punctuation.semi.reid"
},
{
"match": ".",
"name": "punctuation.dot.reid"
},
{
"match": ",",
"name": "punctuation.comma.reid"
}
]
},
"expression": { "expression": {
"patterns": [ "patterns": [
{ {
@ -59,27 +14,18 @@
{ {
"include": "#fn-signature" "include": "#fn-signature"
}, },
{
"include": "#namespace"
},
{ {
"include": "#common-type" "include": "#common-type"
}, },
{
"include": "#binop-impl"
},
{
"include": "#type-impl"
},
{ {
"include": "#struct-definition" "include": "#struct-definition"
}, },
{
"include": "#block"
},
{ {
"include": "#binop" "include": "#binop"
}, },
{
"include": "#namespace"
},
{ {
"include": "#cast" "include": "#cast"
}, },
@ -95,9 +41,6 @@
{ {
"include": "#keywords" "include": "#keywords"
}, },
{
"include": "#struct-expression"
},
{ {
"include": "#number-literal" "include": "#number-literal"
}, },
@ -112,93 +55,44 @@
} }
] ]
}, },
"punctuation": {
"patterns": [
{
"match": "::",
"name": "keyword.operator.namespace.reid"
},
{
"match": ":",
"name": "keyword.operator.colon.reid"
},
{
"match": ";",
"name": "punctuation.semi.reid"
},
{
"match": ".",
"name": "punctuation.dot.reid"
},
{
"match": ",",
"name": "punctuation.comma.reid"
},
{
"match": "\\{|\\}",
"name": "punctuation.brackets.curly.reid"
},
{
"match": "\\(|\\)",
"name": "punctuation.parenthesis.reid"
}
]
},
"comment": { "comment": {
"match": "\\/\\/(.|\\/)*", "match": "\\/\\/(.|\\/)*",
"name": "comment.line.double-slash.reid" "name": "comment.line.double-slash.reid"
}, },
"fn-signature": {
"begin": "(fn)\\s*(\\w+)\\(",
"beginCaptures": {
"1": {
"name": "keyword.fn.reid"
},
"2": {
"name": "entity.name.function.reid"
}
},
"end": "\\)",
"patterns": [
{
"include": "#annotated-identifier"
},
{
"include": "#keywords"
},
{
"include": "#binop"
}
],
"endCaptures": {
"2": {
"name": "entity.name.type.reid"
}
}
},
"type-impl": {
"begin": "(impl)\\s* (\\w+)\\s* \\{\n",
"end": "\\}",
"captures": {
"1": {
"name": "keyword.impl.reid"
},
"2": {
"name": "entity.name.type"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"binop-impl": {
"begin": "(impl)\\s+(binop)\\s+\\(((.*)\\s*:\\s*(.*))\\)(.*)\\(((.*)\\s*:\\s*(.*))\\)\\s*->\\s*(\\w+)\\s*\\{",
"end": "\\}",
"beginCaptures": {
"1": {
"name": "keyword.impl.reid"
},
"2": {
"name": "keyword.impl.reid"
},
"4": {
"name": "variable.parameter.binop.reid"
},
"5": {
"name": "entity.name.type.parameter.binop.reid"
},
"6": {
"name": "keyword.operator.math.reid"
},
"8": {
"name": "variable.parameter.binop.reid"
},
"9": {
"name": "entity.name.type.parameter.binop.reid"
},
"10": {
"name": "entity.name.type.return.binop.reid"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"struct-definition": { "struct-definition": {
"begin": "(struct)\\s*(\\w+)\\s*\\{", "match": "(struct)\\s*(\\w+)",
"end": "\\}",
"captures": { "captures": {
"1": { "1": {
"name": "keyword.struct.reid" "name": "keyword.struct.reid"
@ -206,15 +100,10 @@
"2": { "2": {
"name": "entity.name.type" "name": "entity.name.type"
} }
}, }
"patterns": [
{
"include": "#annotated-identifier"
}
]
}, },
"struct-expression": { "struct-expression": {
"begin": "([A-Z]\\w*)\\s*\\{", "begin": "\\b([A-Z]\\w*)\\s*\\{",
"end": "\\}", "end": "\\}",
"captures": { "captures": {
"1": { "1": {
@ -230,19 +119,19 @@
"number-literal": { "number-literal": {
"patterns": [ "patterns": [
{ {
"match": "0x[0-9a-fA-F]+(\\.[0-9a-fA-F]+)?", "match": "\\b0x[0-9a-fA-F]+(\\.[0-9a-fA-F]+)?\\b",
"name": "constant.hexadecimal" "name": "constant.hexadecimal"
}, },
{ {
"match": "0o[0-7]+(\\.[0-7]+)?", "match": "\\b0o[0-7]+(\\.[0-7]+)?\\b",
"name": "constant.octal" "name": "constant.octal"
}, },
{ {
"match": "0b[01]+(\\.[01]+)?", "match": "\\b0b[01]+(\\.[01]+)?\\b",
"name": "constant.binary" "name": "constant.binary"
}, },
{ {
"match": "[0-9]+(\\.[0-9]+)?", "match": "\\b[0-9]+(\\.[0-9]+)?\\b",
"name": "constant.numeric" "name": "constant.numeric"
} }
] ]
@ -253,25 +142,16 @@
"name": "string.quoted.double", "name": "string.quoted.double",
"patterns": [ "patterns": [
{ {
"match": "\\.", "match": "\\\\\\w",
"name": "constant.character.escape" "name": "constant.character.escape"
} }
] ]
}, },
"block": {
"begin": "\\{",
"end": "\\}",
"patterns": [
{
"include": "#expression"
}
]
},
"namespace": { "namespace": {
"match": "(\\w+)(\\:\\:)", "match": "(\\w+)(\\:\\:)",
"captures": { "captures": {
"1": { "1": {
"name": "entity.name.function.reid" "name": "entity.name.namespace.reid"
}, },
"2": { "2": {
"name": "keyword.operator.namespace.reid" "name": "keyword.operator.namespace.reid"
@ -290,11 +170,19 @@
} }
}, },
"function-call": { "function-call": {
"begin": "(\\w+)?\\(", "begin": "(\\w+)?(\\()",
"end": "\\)", "end": "(\\))",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"name": "entity.name.function.reid" "name": "entity.name.function.reid"
},
"2": {
"name": "punctuation.parenthesis.reid"
}
},
"endCaptures": {
"1": {
"name": "punctuation.parenthesis.reid"
} }
}, },
"patterns": [ "patterns": [
@ -322,28 +210,10 @@
} }
] ]
}, },
"annotated-identifier": {
"begin": "(\\w+)\\:",
"end": ",",
"beginCaptures": {
"1": {
"name": "variable.language.reid"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"identifier": { "identifier": {
"patterns": [ "patterns": [
{ {
"match": "[A-Z]\\w*", "match": "\\b(?:\\w+)\\b",
"name": "entity.name.type.reid"
},
{
"match": "\\w+",
"name": "variable.language.reid" "name": "variable.language.reid"
} }
] ]
@ -351,16 +221,32 @@
"keywords": { "keywords": {
"patterns": [ "patterns": [
{ {
"match": "let|mut|pub|extern", "match": "\\b(?:let|mut|pub|extern)\\b",
"name": "storage.type.reid" "name": "storage.type.reid"
}, },
{ {
"match": "if|return", "match": "\\bimport\\b",
"name": "keyword.import.reid"
},
{
"match": "\\bbinop\\b",
"name": "keyword.binop.reid"
},
{
"match": "\\bimpl\\b",
"name": "keyword.impl.reid"
},
{
"match": "\\b(?:if|return|for|in)\\b",
"name": "keyword.control" "name": "keyword.control"
}, },
{ {
"match": "self", "match": "\\bself\\b",
"name": "variable.language.self.reid" "name": "variable.language.self.reid"
},
{
"match": "\\bfn\\b",
"name": "keyword.fn.reid"
} }
] ]
}, },
@ -388,7 +274,7 @@
] ]
}, },
"common-type": { "common-type": {
"match": "u8|u16|u32|u64|u128|i8|i16|i32|i64|i128|bool", "match": "\\b(?:u8|u16|u32|u64|u128|i8|i16|i32|i64|i128|f16|f16b|f32|f64|f80|f128|f128ppc|bool|char|([A-Z]\\w*))\\b",
"name": "entity.name.type.common.reid" "name": "entity.name.type.common.reid"
} }
} }

View File

@ -1,133 +1,52 @@
scopeName: source.reid scopeName: source.reid
patterns: patterns:
- include: "#import"
- include: "#expression" - include: "#expression"
repository: repository:
# function-definition: expression:
# begin: "(fn)\\s*(\\w+)\\(((\\w+)\\s*\\:\\s*(\\w+),?)*\\)\\s*->\\s*(\\w+)\\s*\\{"
# end: "\\}"
# beginCaptures:
# 1:
# name: "keyword.other"
# 2:
# name: "entity.name.function"
# 4:
# name: "entity.name.parameter"
# 5:
# name: "entity.name.type"
# 6:
# name: "entity.name.type"
# patterns:
# - include: "#type"
# - include: "#expression"
import:
begin: "(import)\\s*"
end: ";"
beginCaptures:
1:
name: keyword
endCaptures:
0:
name: punctuation.semi.reid
patterns: patterns:
- include: "#comment"
- include: "#fn-signature"
- include: "#namespace"
- include: "#common-type"
- include: "#struct-definition"
- include: "#binop"
- include: "#cast"
- include: "#function-call"
- include: "#parenthesis"
- include: "#array"
- include: "#keywords"
- include: "#number-literal"
- include: "#string-literal"
- include: "#identifier" - include: "#identifier"
- include: "#punctiation" - include: "#punctuation"
punctuation: punctuation:
patterns: patterns:
- match: "::" - match: "::"
name: keyword.operator.namespace.reid name: keyword.operator.namespace.reid
- match: ":"
name: keyword.operator.colon.reid
- match: ";" - match: ";"
name: punctuation.semi.reid name: punctuation.semi.reid
- match: "." - match: "."
name: punctuation.dot.reid name: punctuation.dot.reid
- match: "," - match: ","
name: punctuation.comma.reid name: punctuation.comma.reid
expression: - match: "\\{|\\}"
patterns: name: punctuation.brackets.curly.reid
- include: "#comment" - match: "\\(|\\)"
- include: "#fn-signature" name: punctuation.parenthesis.reid
- include: "#common-type"
- include: "#binop-impl"
- include: "#type-impl"
- include: "#struct-definition"
- include: "#block"
- include: "#binop"
- include: "#namespace"
- include: "#cast"
- include: "#function-call"
- include: "#parenthesis"
- include: "#array"
- include: "#keywords"
- include: "#struct-expression"
- include: "#number-literal"
- include: "#string-literal"
- include: "#identifier"
- include: "#punctuation"
comment: comment:
match: "\\/\\/(.|\\/)*" match: "\\/\\/(.|\\/)*"
name: comment.line.double-slash.reid name: comment.line.double-slash.reid
fn-signature:
begin: "(fn)\\s*(\\w+)\\("
beginCaptures:
1:
name: keyword.fn.reid
2:
name: entity.name.function.reid
end: "\\)"
patterns:
- include: "#annotated-identifier"
- include: "#keywords"
- include: "#binop"
endCaptures:
2:
name: entity.name.type.reid
type-impl:
begin: >
(impl)\s*
(\w+)\s*
\{
end: "\\}"
captures:
1:
name: keyword.impl.reid
2:
name: entity.name.type
patterns:
- include: "#expression"
binop-impl:
begin: "(impl)\\s+(binop)\\s+\\(((.*)\\s*:\\s*(.*))\\)(.*)\\(((.*)\\s*:\\s*(.*))\\)\\s*->\\s*(\\w+)\\s*\\{"
end: "\\}"
beginCaptures:
1:
name: keyword.impl.reid
2:
name: keyword.impl.reid
4:
name: variable.parameter.binop.reid
5:
name: entity.name.type.parameter.binop.reid
6:
name: keyword.operator.math.reid
8:
name: variable.parameter.binop.reid
9:
name: entity.name.type.parameter.binop.reid
10:
name: entity.name.type.return.binop.reid
patterns:
- include: "#expression"
struct-definition: struct-definition:
begin: "(struct)\\s*(\\w+)\\s*\\{" match: "(struct)\\s*(\\w+)"
end: "\\}"
captures: captures:
1: 1:
name: keyword.struct.reid name: keyword.struct.reid
2: 2:
name: entity.name.type name: entity.name.type
patterns:
- include: "#annotated-identifier"
struct-expression: struct-expression:
begin: "([A-Z]\\w*)\\s*\\{" begin: "\\b([A-Z]\\w*)\\s*\\{"
end: "\\}" end: "\\}"
captures: captures:
1: 1:
@ -136,31 +55,26 @@ repository:
- include: "#expression" - include: "#expression"
number-literal: number-literal:
patterns: patterns:
- match: "0x[0-9a-fA-F]+(\\.[0-9a-fA-F]+)?" - match: "\\b0x[0-9a-fA-F]+(\\.[0-9a-fA-F]+)?\\b"
name: "constant.hexadecimal" name: "constant.hexadecimal"
- match: "0o[0-7]+(\\.[0-7]+)?" - match: "\\b0o[0-7]+(\\.[0-7]+)?\\b"
name: "constant.octal" name: "constant.octal"
- match: "0b[01]+(\\.[01]+)?" - match: "\\b0b[01]+(\\.[01]+)?\\b"
name: "constant.binary" name: "constant.binary"
- match: "[0-9]+(\\.[0-9]+)?" - match: "\\b[0-9]+(\\.[0-9]+)?\\b"
name: "constant.numeric" name: "constant.numeric"
string-literal: string-literal:
begin: '"' begin: '"'
end: '"' end: '"'
name: string.quoted.double name: string.quoted.double
patterns: patterns:
- match: "\\." - match: "\\\\\\w"
name: constant.character.escape name: constant.character.escape
block:
begin: "\\{"
end: "\\}"
patterns:
- include: "#expression"
namespace: namespace:
match: "(\\w+)(\\:\\:)" match: "(\\w+)(\\:\\:)"
captures: captures:
1: 1:
name: entity.name.function.reid name: entity.name.namespace.reid
2: 2:
name: keyword.operator.namespace.reid name: keyword.operator.namespace.reid
cast: cast:
@ -171,11 +85,16 @@ repository:
2: 2:
name: entity.name.type.reid name: entity.name.type.reid
function-call: function-call:
begin: "(\\w+)?\\(" begin: "(\\w+)?(\\()"
end: "\\)" end: "(\\))"
beginCaptures: beginCaptures:
1: 1:
name: entity.name.function.reid name: entity.name.function.reid
2:
name: punctuation.parenthesis.reid
endCaptures:
1:
name: punctuation.parenthesis.reid
patterns: patterns:
- include: "#expression" - include: "#expression"
parenthesis: parenthesis:
@ -189,28 +108,26 @@ repository:
name: keyword.operator.parenthesis.reid name: keyword.operator.parenthesis.reid
patterns: patterns:
- include: "#expression" - include: "#expression"
annotated-identifier:
begin: "(\\w+)\\:"
end: ","
beginCaptures:
1:
name: variable.language.reid
patterns:
- include: "#expression"
identifier: identifier:
patterns: patterns:
- match: "[A-Z]\\w*" - match: "\\b(?:\\w+)\\b"
name: entity.name.type.reid
- match: "\\w+"
name: variable.language.reid name: variable.language.reid
keywords: keywords:
patterns: patterns:
- match: "let|mut|pub|extern" - match: "\\b(?:let|mut|pub|extern)\\b"
name: "storage.type.reid" name: storage.type.reid
- match: "if|return" - match: "\\bimport\\b"
name: "keyword.control" name: keyword.import.reid
- match: "self" - match: "\\bbinop\\b"
name: "variable.language.self.reid" name: keyword.binop.reid
- match: "\\bimpl\\b"
name: keyword.impl.reid
- match: "\\b(?:if|return|for|in)\\b"
name: keyword.control
- match: "\\bself\\b"
name: variable.language.self.reid
- match: "\\bfn\\b"
name: keyword.fn.reid
binop: binop:
match: "\\<\\=|\\>\\=|\\=\\=|\\<|\\>|\\*|\\+|\\-|\\^|\\&\\&|\\&" match: "\\<\\=|\\>\\=|\\=\\=|\\<|\\>|\\*|\\+|\\-|\\^|\\&\\&|\\&"
name: keyword.operator.math.reid name: keyword.operator.math.reid
@ -226,7 +143,7 @@ repository:
patterns: patterns:
- include: "#expression" - include: "#expression"
common-type: common-type:
match: "u8|u16|u32|u64|u128|i8|i16|i32|i64|i128|bool" match: "\\b(?:u8|u16|u32|u64|u128|i8|i16|i32|i64|i128|f16|f16b|f32|f64|f80|f128|f128ppc|bool|char|([A-Z]\\w*))\\b"
name: entity.name.type.common.reid name: entity.name.type.common.reid