Rust syntax highlighting

This commit is contained in:
liquidex 2024-04-07 19:05:02 +02:00
parent 48be61e127
commit ad1e5693c4
2 changed files with 189 additions and 0 deletions

View file

@ -197,3 +197,73 @@
end end
end end
``` ```
- `rust`
- patterns
```rust
// this is a comment
/* this is a multiline comment */
"string" 'c' 'ł'
b"string" b'ł'
r"string" r#"string"# r##"string"## r###"string"###
0b11001100 0b11001100_u8
0o1234567_f32
0xDEADBEEF 0xDEADBEEF_i16
2137
3.14159265 2.3e-32
+ - * / % == ~= <= >= & .
#![doc = ""]
identifier macro! function() 'static
T Vec<i32>
union Example
europeanunion A
```
- keywords
```rust
_ as async await break const continue dyn else enum extern fn for if impl in let loop
macro_rules! match mod move mut pub ref return static struct trait type unsafe use where while
crate self Self super
true false
abstract become box do final macro override priv try typeof unsized virtual yield
```
- sample
```rust
use chrono::{Datelike, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum Season {
Spring,
Summer,
Autumn,
Winter,
}
impl Season {
pub fn on(month: u32, day: u32) -> Option<Season> {
let md = (month, day);
Some(match () {
_ if ((1, 1)..=(3, 20)).contains(&md) => Season::Winter,
_ if ((3, 21)..=(6, 21)).contains(&md) => Season::Spring,
_ if ((6, 22)..=(9, 22)).contains(&md) => Season::Summer,
_ if ((9, 23)..=(12, 21)).contains(&md) => Season::Autumn,
_ if ((12, 22)..=(12, 31)).contains(&md) => Season::Winter,
// Just in case something really darn weird happens to the calendar.
_ => return None,
})
}
pub fn current() -> Option<Season> {
let now = Utc::now();
Self::on(now.month(), now.day())
}
}
```

119
static/syntax/rust.json Normal file
View file

@ -0,0 +1,119 @@
{
"patterns": [
{ "regex": "\\/\\/.*", "is": "comment" },
{
"regex": "\\/\\*.*?\\*\\/",
"flags": ["dotMatchesNewline"],
"is": "comment"
},
{ "regex": "'(\\\\'|[^'])'", "is": "string" },
{ "regex": "\"(\\\\\"|[^\"])*\"", "is": "string" },
{ "regex": "b'(\\\\'|[^'])'", "is": "string" },
{ "regex": "b\"(\\\\\"|[^\"])*\"", "is": "string" },
{ "regex": "r\"(\\\\\"|[^\"])*\"", "is": "string" },
{ "regex": "r#\"(\\\\\"|[^\"])*\"#", "is": "string" },
{ "regex": "r##\"(\\\\\"|[^\"])*\"##", "is": "string" },
{ "regex": "r###\"(\\\\\"|[^\"])*\"###", "is": "string" },
{ "regex": "0[bB][01_]+([uif](8|16|32|64|128))?", "is": "literal" },
{ "regex": "0[oO][0-7_]+([uif](8|16|32|64|128))?", "is": "literal" },
{
"regex": "0[xX][0-9a-fA-F_]+([uif](8|16|32|64|128))?",
"is": "literal"
},
{ "regex": "[0-9_]+n", "is": "literal" },
{ "regex": "[0-9_]+(\\.[0-9_]*([eE][-+]?[0-9_]+)?)?", "is": "literal" },
{ "regex": "[+=/*^%<>!~|&\\.?:@-]+", "is": "operator" },
{ "regex": "#!\\[", "is": "default" },
{
"regex": "[a-zA-Z_][a-zA-Z0-9_]*(\\()",
"is": { "default": "function", "captures": ["default"] }
},
{ "regex": "[a-zA-Z_][a-zA-Z0-9_]*!", "is": "function" },
{ "regex": "[A-Z_][a-zA-Z0-9_]*", "is": "keyword2" },
{
"regex": "union\\s+([a-zA-Z_][a-zA-Z0-9_]*)",
"is": {
"default": "keyword1",
"captures": ["keyword2"]
}
},
{ "regex": "[a-zA-Z_][a-zA-Z0-9_]*", "is": "identifier" },
{ "regex": "'[a-zA-Z_][a-zA-Z0-9_]*", "is": "literal" }
],
"keywords": {
"_": { "into": "keyword1" },
"as": { "into": "keyword1" },
"async": { "into": "keyword1" },
"await": { "into": "keyword1" },
"break": { "into": "keyword1" },
"const": { "into": "keyword1" },
"continue": { "into": "keyword1" },
"dyn": { "into": "keyword1" },
"else": { "into": "keyword1" },
"enum": { "into": "keyword1" },
"extern": { "into": "keyword1" },
"fn": { "into": "keyword1" },
"for": { "into": "keyword1" },
"if": { "into": "keyword1" },
"impl": { "into": "keyword1" },
"in": { "into": "keyword1" },
"let": { "into": "keyword1" },
"loop": { "into": "keyword1" },
"macro_rules!": { "into": "keyword1" },
"match": { "into": "keyword1" },
"mod": { "into": "keyword1" },
"move": { "into": "keyword1" },
"mut": { "into": "keyword1" },
"pub": { "into": "keyword1" },
"ref": { "into": "keyword1" },
"return": { "into": "keyword1" },
"static": { "into": "keyword1" },
"struct": { "into": "keyword1" },
"trait": { "into": "keyword1" },
"type": { "into": "keyword1" },
"unsafe": { "into": "keyword1" },
"use": { "into": "keyword1" },
"where": { "into": "keyword1" },
"while": { "into": "keyword1" },
"crate": { "into": "keyword2" },
"self": { "into": "keyword2" },
"Self": { "into": "keyword2" },
"super": { "into": "keyword2" },
"bool": { "into": "keyword2" },
"i8": { "into": "keyword2" },
"i16": { "into": "keyword2" },
"i32": { "into": "keyword2" },
"i64": { "into": "keyword2" },
"i128": { "into": "keyword2" },
"isize": { "into": "keyword2" },
"u8": { "into": "keyword2" },
"u16": { "into": "keyword2" },
"u32": { "into": "keyword2" },
"u64": { "into": "keyword2" },
"u128": { "into": "keyword2" },
"usize": { "into": "keyword2" },
"f32": { "into": "keyword2" },
"f64": { "into": "keyword2" },
"char": { "into": "keyword2" },
"str": { "into": "keyword2" },
"true": { "into": "literal" },
"false": { "into": "literal" },
"abstract": { "into": "error reserved-word" },
"become": { "into": "error reserved-word" },
"box": { "into": "error reserved-word" },
"do": { "into": "error reserved-word" },
"final": { "into": "error reserved-word" },
"macro": { "into": "error reserved-word" },
"override": { "into": "error reserved-word" },
"priv": { "into": "error reserved-word" },
"try": { "into": "error reserved-word" },
"typeof": { "into": "error reserved-word" },
"unsized": { "into": "error reserved-word" },
"virtual": { "into": "error reserved-word" },
"yield": { "into": "error reserved-word" }
}
}