update syntax highlighting to use vscode dark mode theme
This commit is contained in:
@@ -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};
|
||||
}
|
||||
|
||||
32
rust_compiler/libs/helpers/src/syscall.rs
Normal file
32
rust_compiler/libs/helpers/src/syscall.rs
Normal 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"
|
||||
);
|
||||
};
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user