update syntax highlighting to use vscode dark mode theme

This commit is contained in:
2025-12-05 00:25:24 -07:00
parent b06ad778d9
commit f2aedb96df
6 changed files with 116 additions and 49 deletions

View File

@@ -1,4 +1,5 @@
mod macros;
mod syscall;
/// This trait will allow the LSP to emit documentation for various tokens and expressions.
/// You can easily create documentation for large enums with the `documented!` macro.
@@ -10,5 +11,5 @@ pub trait Documentation {
}
pub mod prelude {
pub use super::{Documentation, documented};
pub use super::{Documentation, documented, with_syscalls};
}

View File

@@ -0,0 +1,32 @@
#[macro_export]
macro_rules! with_syscalls {
($matcher:ident) => {
$matcher!(
"yield",
"sleep",
"hash",
"loadFromDevice",
"loadBatchNamed",
"loadBatch",
"setOnDevice",
"setOnDeviceBatched",
"setOnDeviceBatchedNamed",
"acos",
"asin",
"atan",
"atan2",
"abs",
"ceil",
"cos",
"floor",
"log",
"max",
"min",
"rand",
"sin",
"sqrt",
"tan",
"trunc"
);
};
}

View File

@@ -256,31 +256,6 @@ impl std::fmt::Display for SysCall {
impl SysCall {
pub fn is_syscall(identifier: &str) -> bool {
matches!(
identifier,
"yield"
| "sleep"
| "hash"
| "loadFromDevice"
| "setOnDevice"
| "setOnDeviceBatched"
| "setOnDeviceBatchedNamed"
| "acos"
| "asin"
| "atan"
| "atan2"
| "abs"
| "ceil"
| "cos"
| "floor"
| "log"
| "max"
| "min"
| "rand"
| "sin"
| "sqrt"
| "tan"
| "trunc"
)
tokenizer::token::is_syscall(identifier)
}
}

View File

@@ -1,6 +1,15 @@
use helpers::prelude::*;
use rust_decimal::Decimal;
// Define a local macro to consume the list
macro_rules! generate_check {
($($name:literal),*) => {
pub fn is_syscall(s: &str) -> bool {
matches!(s, $($name)|*)
}
}
}
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct Token {
/// The type of the token
@@ -101,17 +110,43 @@ impl Documentation for TokenType {
}
}
helpers::with_syscalls!(generate_check);
impl From<TokenType> for u32 {
fn from(value: TokenType) -> Self {
use TokenType::*;
match value {
String(_) => 1,
Number(_) => 2,
Boolean(_) => 3,
Keyword(_) => 4,
Identifier(_) => 5,
Symbol(_) => 6,
EOF => 0,
TokenType::String(_) => 1,
TokenType::Number(_) => 2,
TokenType::Boolean(_) => 3,
TokenType::Keyword(k) => match k {
Keyword::If
| Keyword::Else
| Keyword::Loop
| Keyword::While
| Keyword::Break
| Keyword::Continue
| Keyword::Return => 4,
_ => 5,
},
TokenType::Identifier(s) => {
if is_syscall(&s) {
10
} else {
6
}
}
TokenType::Symbol(s) => {
if s.is_comparison() {
11
} else if s.is_operator() {
12
} else if s.is_logical() {
13
} else {
7
}
}
TokenType::EOF => 0,
}
}
}