@devaloop/devalang 0.0.1-alpha.14 → 0.0.1-alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devalang +10 -8
- package/.github/workflows/ci.yml +92 -0
- package/Cargo.toml +60 -58
- package/README.md +32 -15
- package/docs/CHANGELOG.md +93 -1
- package/docs/CONTRIBUTING.md +101 -1
- package/docs/ROADMAP.md +2 -2
- package/docs/TODO.md +1 -1
- package/examples/automation.deva +42 -0
- package/examples/bank.deva +4 -4
- package/examples/events.deva +12 -0
- package/examples/function.deva +4 -4
- package/examples/index.deva +39 -25
- package/examples/loop.deva +5 -11
- package/examples/pattern.deva +8 -0
- package/examples/plugin.deva +16 -0
- package/examples/variables.deva +1 -1
- package/out-tsc/bin/index.js +51 -7
- package/out-tsc/index.js +3 -1
- package/out-tsc/scripts/postbuild.js +9 -10
- package/out-tsc/scripts/postinstall.js +49 -0
- package/package.json +12 -4
- package/project-version.json +3 -3
- package/rust/cli/bank.rs +462 -456
- package/rust/cli/build.rs +252 -199
- package/rust/cli/check.rs +221 -180
- package/rust/cli/driver.rs +297 -292
- package/rust/cli/generator.rs +1 -0
- package/rust/cli/init.rs +87 -79
- package/rust/cli/install.rs +35 -32
- package/rust/cli/login.rs +127 -134
- package/rust/cli/mod.rs +13 -11
- package/rust/cli/play.rs +1123 -218
- package/rust/cli/telemetry.rs +19 -0
- package/rust/cli/template.rs +69 -57
- package/rust/cli/update.rs +6 -4
- package/rust/common/api.rs +5 -8
- package/rust/common/cdn.rs +3 -6
- package/rust/common/mod.rs +3 -3
- package/rust/common/sso.rs +3 -6
- package/rust/config/driver.rs +118 -94
- package/rust/config/loader.rs +165 -156
- package/rust/config/mod.rs +4 -2
- package/rust/config/settings.rs +91 -0
- package/rust/config/stats.rs +257 -0
- package/rust/core/audio/engine.rs +696 -518
- package/rust/core/audio/evaluator.rs +263 -31
- package/rust/core/audio/interpreter/arrow_call.rs +198 -161
- package/rust/core/audio/interpreter/automate.rs +18 -0
- package/rust/core/audio/interpreter/call.rs +98 -95
- package/rust/core/audio/interpreter/condition.rs +70 -71
- package/rust/core/audio/interpreter/driver.rs +487 -198
- package/rust/core/audio/interpreter/function.rs +26 -21
- package/rust/core/audio/interpreter/let_.rs +38 -19
- package/rust/core/audio/interpreter/load.rs +18 -18
- package/rust/core/audio/interpreter/loop_.rs +113 -73
- package/rust/core/audio/interpreter/mod.rs +14 -13
- package/rust/core/audio/interpreter/sleep.rs +27 -30
- package/rust/core/audio/interpreter/spawn.rs +105 -102
- package/rust/core/audio/interpreter/tempo.rs +19 -16
- package/rust/core/audio/interpreter/trigger.rs +239 -210
- package/rust/core/audio/loader/mod.rs +1 -1
- package/rust/core/audio/loader/trigger.rs +100 -97
- package/rust/core/audio/mod.rs +7 -6
- package/rust/core/audio/player.rs +64 -64
- package/rust/core/audio/renderer.rs +56 -53
- package/rust/core/audio/special/easing.rs +189 -0
- package/rust/core/audio/special/env.rs +43 -0
- package/rust/core/audio/special/math.rs +102 -0
- package/rust/core/audio/special/mod.rs +9 -0
- package/rust/core/audio/special/modulator.rs +143 -0
- package/rust/core/builder/mod.rs +80 -85
- package/rust/core/debugger/lexer.rs +27 -27
- package/rust/core/debugger/mod.rs +24 -23
- package/rust/core/debugger/module.rs +55 -47
- package/rust/core/debugger/preprocessor.rs +27 -27
- package/rust/core/debugger/store.rs +40 -39
- package/rust/core/error/mod.rs +80 -66
- package/rust/core/lexer/handler/arrow.rs +82 -31
- package/rust/core/lexer/handler/at.rs +21 -21
- package/rust/core/lexer/handler/brace.rs +41 -41
- package/rust/core/lexer/handler/colon.rs +21 -21
- package/rust/core/lexer/handler/comment.rs +30 -30
- package/rust/core/lexer/handler/dot.rs +21 -21
- package/rust/core/lexer/handler/driver.rs +337 -263
- package/rust/core/lexer/handler/identifier.rs +46 -42
- package/rust/core/lexer/handler/indent.rs +66 -66
- package/rust/core/lexer/handler/mod.rs +16 -16
- package/rust/core/lexer/handler/newline.rs +23 -23
- package/rust/core/lexer/handler/number.rs +31 -31
- package/rust/core/lexer/handler/operator.rs +46 -44
- package/rust/core/lexer/handler/parenthesis.rs +41 -41
- package/rust/core/lexer/handler/slash.rs +21 -21
- package/rust/core/lexer/handler/string.rs +63 -63
- package/rust/core/lexer/mod.rs +54 -51
- package/rust/core/lexer/token.rs +97 -91
- package/rust/core/mod.rs +11 -11
- package/rust/core/parser/driver.rs +513 -408
- package/rust/core/parser/handler/arrow_call.rs +233 -211
- package/rust/core/parser/handler/at.rs +245 -162
- package/rust/core/parser/handler/bank.rs +94 -69
- package/rust/core/parser/handler/condition.rs +80 -74
- package/rust/core/parser/handler/dot.rs +143 -135
- package/rust/core/parser/handler/identifier/automate.rs +257 -0
- package/rust/core/parser/handler/identifier/call.rs +91 -88
- package/rust/core/parser/handler/identifier/emit.rs +66 -0
- package/rust/core/parser/handler/identifier/function.rs +100 -92
- package/rust/core/parser/handler/identifier/group.rs +85 -75
- package/rust/core/parser/handler/identifier/let_.rs +158 -127
- package/rust/core/parser/handler/identifier/mod.rs +54 -52
- package/rust/core/parser/handler/identifier/on.rs +98 -0
- package/rust/core/parser/handler/identifier/print.rs +52 -0
- package/rust/core/parser/handler/identifier/sleep.rs +36 -33
- package/rust/core/parser/handler/identifier/spawn.rs +91 -88
- package/rust/core/parser/handler/identifier/synth.rs +65 -65
- package/rust/core/parser/handler/loop_.rs +170 -72
- package/rust/core/parser/handler/mod.rs +8 -8
- package/rust/core/parser/handler/tempo.rs +53 -47
- package/rust/core/parser/mod.rs +4 -4
- package/rust/core/parser/statement.rs +142 -108
- package/rust/core/plugin/loader.rs +123 -48
- package/rust/core/plugin/mod.rs +2 -1
- package/rust/core/plugin/runner.rs +296 -0
- package/rust/core/preprocessor/loader.rs +515 -326
- package/rust/core/preprocessor/mod.rs +4 -4
- package/rust/core/preprocessor/module.rs +60 -58
- package/rust/core/preprocessor/processor.rs +99 -101
- package/rust/core/preprocessor/resolver/bank.rs +51 -49
- package/rust/core/preprocessor/resolver/call.rs +100 -100
- package/rust/core/preprocessor/resolver/condition.rs +97 -97
- package/rust/core/preprocessor/resolver/driver.rs +310 -278
- package/rust/core/preprocessor/resolver/function.rs +69 -78
- package/rust/core/preprocessor/resolver/group.rs +96 -91
- package/rust/core/preprocessor/resolver/let_.rs +32 -28
- package/rust/core/preprocessor/resolver/loop_.rs +320 -91
- package/rust/core/preprocessor/resolver/mod.rs +15 -15
- package/rust/core/preprocessor/resolver/spawn.rs +76 -92
- package/rust/core/preprocessor/resolver/synth.rs +56 -50
- package/rust/core/preprocessor/resolver/tempo.rs +50 -49
- package/rust/core/preprocessor/resolver/trigger.rs +113 -116
- package/rust/core/preprocessor/resolver/value.rs +81 -87
- package/rust/core/shared/bank.rs +1 -1
- package/rust/core/shared/duration.rs +9 -9
- package/rust/core/shared/mod.rs +3 -3
- package/rust/core/shared/value.rs +35 -32
- package/rust/core/store/function.rs +34 -34
- package/rust/core/store/global.rs +55 -38
- package/rust/core/store/mod.rs +5 -5
- package/rust/core/store/variable.rs +37 -34
- package/rust/core/utils/mod.rs +2 -2
- package/rust/core/utils/path.rs +37 -31
- package/rust/core/utils/validation.rs +35 -37
- package/rust/installer/addon.rs +84 -80
- package/rust/installer/bank.rs +62 -65
- package/rust/installer/mod.rs +5 -5
- package/rust/installer/plugin.rs +54 -55
- package/rust/installer/utils.rs +56 -56
- package/rust/lib.rs +156 -164
- package/rust/main.rs +250 -145
- package/rust/utils/error.rs +200 -0
- package/rust/utils/file.rs +38 -35
- package/rust/utils/first_usage.rs +76 -0
- package/rust/utils/logger.rs +195 -139
- package/rust/utils/mod.rs +9 -50
- package/rust/utils/signature.rs +19 -17
- package/rust/utils/spinner.rs +22 -19
- package/rust/utils/telemetry.rs +292 -0
- package/rust/utils/watcher.rs +34 -33
- package/templates/minimal/README.md +97 -121
- package/templates/welcome/README.md +97 -121
- package/typescript/bin/index.ts +19 -5
- package/typescript/index.ts +3 -1
- package/typescript/scripts/postbuild.ts +10 -6
- package/typescript/scripts/postinstall.ts +56 -0
- package/typescript/scripts/version/bump.ts +0 -1
- package/typescript/scripts/version/index.ts +0 -1
- package/out-tsc/bin/devalang.exe +0 -0
package/rust/core/error/mod.rs
CHANGED
|
@@ -1,66 +1,80 @@
|
|
|
1
|
-
use crate::core::parser::{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
pub struct
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
pub
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
pub
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
1
|
+
use crate::core::parser::{
|
|
2
|
+
driver::Parser,
|
|
3
|
+
statement::{Statement, StatementKind},
|
|
4
|
+
};
|
|
5
|
+
use serde::{Deserialize, Serialize};
|
|
6
|
+
|
|
7
|
+
pub struct ErrorHandler {
|
|
8
|
+
errors: Vec<Error>,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
#[derive(Serialize, Deserialize, Clone, Debug)]
|
|
12
|
+
pub enum Severity {
|
|
13
|
+
Warning,
|
|
14
|
+
Critical,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
|
|
18
|
+
pub struct StackFrame {
|
|
19
|
+
pub module: Option<String>,
|
|
20
|
+
pub context: Option<String>,
|
|
21
|
+
pub line: usize,
|
|
22
|
+
pub column: usize,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
#[derive(Serialize, Deserialize, Clone, Debug)]
|
|
26
|
+
pub struct ErrorResult {
|
|
27
|
+
pub message: String,
|
|
28
|
+
pub line: usize,
|
|
29
|
+
pub column: usize,
|
|
30
|
+
pub severity: Severity,
|
|
31
|
+
pub stack: Vec<StackFrame>,
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
#[derive(Clone)]
|
|
35
|
+
pub struct Error {
|
|
36
|
+
pub message: String,
|
|
37
|
+
pub line: usize,
|
|
38
|
+
pub column: usize,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
impl ErrorHandler {
|
|
42
|
+
pub fn new() -> Self {
|
|
43
|
+
Self { errors: Vec::new() }
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
pub fn add_error(&mut self, message: String, line: usize, column: usize) {
|
|
47
|
+
let error_statement = Error {
|
|
48
|
+
message,
|
|
49
|
+
line,
|
|
50
|
+
column,
|
|
51
|
+
};
|
|
52
|
+
self.errors.push(error_statement);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
pub fn has_errors(&self) -> bool {
|
|
56
|
+
!self.errors.is_empty()
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
pub fn get_errors(&self) -> &Vec<Error> {
|
|
60
|
+
&self.errors
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
pub fn clear_errors(&mut self) {
|
|
64
|
+
self.errors.clear();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
pub fn detect_from_statements(&mut self, _parser: &mut Parser, statements: &[Statement]) {
|
|
68
|
+
for stmt in statements {
|
|
69
|
+
match &stmt.kind {
|
|
70
|
+
StatementKind::Unknown => {
|
|
71
|
+
self.add_error("Unknown statement".to_string(), stmt.line, stmt.column);
|
|
72
|
+
}
|
|
73
|
+
StatementKind::Error { message } => {
|
|
74
|
+
self.add_error(message.clone(), stmt.line, stmt.column);
|
|
75
|
+
}
|
|
76
|
+
_ => {}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -1,31 +1,82 @@
|
|
|
1
|
-
use crate::core::lexer::token::{
|
|
2
|
-
|
|
3
|
-
pub fn handle_arrow_lexer(
|
|
4
|
-
|
|
5
|
-
chars: &mut std::iter::Peekable<std::str::Chars>,
|
|
6
|
-
current_indent: &mut usize,
|
|
7
|
-
|
|
8
|
-
tokens: &mut Vec<Token>,
|
|
9
|
-
line: &mut usize,
|
|
10
|
-
column: &mut usize
|
|
11
|
-
) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
chars.next();
|
|
17
|
-
arrow_call.push(c);
|
|
18
|
-
*column += 1;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
1
|
+
use crate::core::lexer::token::{Token, TokenKind};
|
|
2
|
+
|
|
3
|
+
pub fn handle_arrow_lexer(
|
|
4
|
+
ch: char,
|
|
5
|
+
chars: &mut std::iter::Peekable<std::str::Chars>,
|
|
6
|
+
current_indent: &mut usize,
|
|
7
|
+
_indent_stack: &mut Vec<usize>,
|
|
8
|
+
tokens: &mut Vec<Token>,
|
|
9
|
+
line: &mut usize,
|
|
10
|
+
column: &mut usize,
|
|
11
|
+
) {
|
|
12
|
+
// If next char is '>', this is an arrow '->'.
|
|
13
|
+
if let Some(&c) = chars.peek() {
|
|
14
|
+
if c == '>' {
|
|
15
|
+
let mut arrow_call = ch.to_string();
|
|
16
|
+
chars.next();
|
|
17
|
+
arrow_call.push(c);
|
|
18
|
+
*column += 1;
|
|
19
|
+
|
|
20
|
+
tokens.push(Token {
|
|
21
|
+
kind: TokenKind::Arrow,
|
|
22
|
+
lexeme: arrow_call,
|
|
23
|
+
line: *line,
|
|
24
|
+
column: *column,
|
|
25
|
+
indent: *current_indent,
|
|
26
|
+
});
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Otherwise, treat '-' as the start of a negative number if followed by digits.
|
|
32
|
+
let mut lexeme = String::from("-");
|
|
33
|
+
if let Some(&next) = chars.peek() {
|
|
34
|
+
if next.is_ascii_digit() {
|
|
35
|
+
// consume digits
|
|
36
|
+
while let Some(&d) = chars.peek() {
|
|
37
|
+
if d.is_ascii_digit() {
|
|
38
|
+
chars.next();
|
|
39
|
+
lexeme.push(d);
|
|
40
|
+
*column += 1;
|
|
41
|
+
} else {
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// optional decimal part
|
|
46
|
+
if let Some(&dot) = chars.peek() {
|
|
47
|
+
if dot == '.' {
|
|
48
|
+
chars.next();
|
|
49
|
+
lexeme.push(dot);
|
|
50
|
+
*column += 1;
|
|
51
|
+
while let Some(&d) = chars.peek() {
|
|
52
|
+
if d.is_ascii_digit() {
|
|
53
|
+
chars.next();
|
|
54
|
+
lexeme.push(d);
|
|
55
|
+
*column += 1;
|
|
56
|
+
} else {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
tokens.push(Token {
|
|
64
|
+
kind: TokenKind::Number,
|
|
65
|
+
lexeme,
|
|
66
|
+
line: *line,
|
|
67
|
+
column: *column,
|
|
68
|
+
indent: *current_indent,
|
|
69
|
+
});
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Fallback: lone '-' not part of '->' or a number; emit Unknown to avoid mis-parsing as Arrow
|
|
75
|
+
tokens.push(Token {
|
|
76
|
+
kind: TokenKind::Unknown,
|
|
77
|
+
lexeme: "-".to_string(),
|
|
78
|
+
line: *line,
|
|
79
|
+
column: *column,
|
|
80
|
+
indent: *current_indent,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
use crate::core::lexer::token::{Token, TokenKind};
|
|
2
|
-
|
|
3
|
-
pub fn handle_at_lexer(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
current_indent: &mut usize,
|
|
7
|
-
|
|
8
|
-
tokens: &mut Vec<Token>,
|
|
9
|
-
line: &mut usize,
|
|
10
|
-
column: &mut usize
|
|
11
|
-
) {
|
|
12
|
-
tokens.push(Token {
|
|
13
|
-
kind: TokenKind::At,
|
|
14
|
-
lexeme:
|
|
15
|
-
line: *line,
|
|
16
|
-
column: *column,
|
|
17
|
-
indent: *current_indent,
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
*column += 1;
|
|
21
|
-
}
|
|
1
|
+
use crate::core::lexer::token::{Token, TokenKind};
|
|
2
|
+
|
|
3
|
+
pub fn handle_at_lexer(
|
|
4
|
+
ch: char,
|
|
5
|
+
_chars: &mut std::iter::Peekable<std::str::Chars>,
|
|
6
|
+
current_indent: &mut usize,
|
|
7
|
+
_indent_stack: &mut Vec<usize>,
|
|
8
|
+
tokens: &mut Vec<Token>,
|
|
9
|
+
line: &mut usize,
|
|
10
|
+
column: &mut usize,
|
|
11
|
+
) {
|
|
12
|
+
tokens.push(Token {
|
|
13
|
+
kind: TokenKind::At,
|
|
14
|
+
lexeme: ch.to_string(),
|
|
15
|
+
line: *line,
|
|
16
|
+
column: *column,
|
|
17
|
+
indent: *current_indent,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
*column += 1;
|
|
21
|
+
}
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
use crate::core::lexer::token::{
|
|
2
|
-
|
|
3
|
-
pub fn handle_rbrace_lexer(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
current_indent: &mut usize,
|
|
7
|
-
|
|
8
|
-
tokens: &mut Vec<Token>,
|
|
9
|
-
line: &mut usize,
|
|
10
|
-
column: &mut usize
|
|
11
|
-
) {
|
|
12
|
-
tokens.push(Token {
|
|
13
|
-
kind: TokenKind::RBrace,
|
|
14
|
-
lexeme:
|
|
15
|
-
line: *line,
|
|
16
|
-
column: *column,
|
|
17
|
-
indent: *current_indent,
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
*column += 1;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
pub fn handle_lbrace_lexer(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
current_indent: &mut usize,
|
|
27
|
-
|
|
28
|
-
tokens: &mut Vec<Token>,
|
|
29
|
-
line: &mut usize,
|
|
30
|
-
column: &mut usize
|
|
31
|
-
) {
|
|
32
|
-
tokens.push(Token {
|
|
33
|
-
kind: TokenKind::LBrace,
|
|
34
|
-
lexeme:
|
|
35
|
-
line: *line,
|
|
36
|
-
column: *column,
|
|
37
|
-
indent: *current_indent,
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
*column += 1;
|
|
41
|
-
}
|
|
1
|
+
use crate::core::lexer::token::{Token, TokenKind};
|
|
2
|
+
|
|
3
|
+
pub fn handle_rbrace_lexer(
|
|
4
|
+
ch: char,
|
|
5
|
+
_chars: &mut std::iter::Peekable<std::str::Chars>,
|
|
6
|
+
current_indent: &mut usize,
|
|
7
|
+
_indent_stack: &mut Vec<usize>,
|
|
8
|
+
tokens: &mut Vec<Token>,
|
|
9
|
+
line: &mut usize,
|
|
10
|
+
column: &mut usize,
|
|
11
|
+
) {
|
|
12
|
+
tokens.push(Token {
|
|
13
|
+
kind: TokenKind::RBrace,
|
|
14
|
+
lexeme: ch.to_string(),
|
|
15
|
+
line: *line,
|
|
16
|
+
column: *column,
|
|
17
|
+
indent: *current_indent,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
*column += 1;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
pub fn handle_lbrace_lexer(
|
|
24
|
+
ch: char,
|
|
25
|
+
_chars: &mut std::iter::Peekable<std::str::Chars>,
|
|
26
|
+
current_indent: &mut usize,
|
|
27
|
+
_indent_stack: &mut Vec<usize>,
|
|
28
|
+
tokens: &mut Vec<Token>,
|
|
29
|
+
line: &mut usize,
|
|
30
|
+
column: &mut usize,
|
|
31
|
+
) {
|
|
32
|
+
tokens.push(Token {
|
|
33
|
+
kind: TokenKind::LBrace,
|
|
34
|
+
lexeme: ch.to_string(),
|
|
35
|
+
line: *line,
|
|
36
|
+
column: *column,
|
|
37
|
+
indent: *current_indent,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
*column += 1;
|
|
41
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
use crate::core::lexer::token::{Token, TokenKind};
|
|
2
|
-
|
|
3
|
-
pub fn handle_colon_lexer(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
current_indent: &mut usize,
|
|
7
|
-
|
|
8
|
-
tokens: &mut Vec<Token>,
|
|
9
|
-
line: &mut usize,
|
|
10
|
-
column: &mut usize
|
|
11
|
-
) {
|
|
12
|
-
tokens.push(Token {
|
|
13
|
-
kind: TokenKind::Colon,
|
|
14
|
-
lexeme:
|
|
15
|
-
line: *line,
|
|
16
|
-
column: *column,
|
|
17
|
-
indent: *current_indent,
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
*column += 1;
|
|
21
|
-
}
|
|
1
|
+
use crate::core::lexer::token::{Token, TokenKind};
|
|
2
|
+
|
|
3
|
+
pub fn handle_colon_lexer(
|
|
4
|
+
ch: char,
|
|
5
|
+
_chars: &mut std::iter::Peekable<std::str::Chars>,
|
|
6
|
+
current_indent: &mut usize,
|
|
7
|
+
_indent_stack: &mut Vec<usize>,
|
|
8
|
+
tokens: &mut Vec<Token>,
|
|
9
|
+
line: &mut usize,
|
|
10
|
+
column: &mut usize,
|
|
11
|
+
) {
|
|
12
|
+
tokens.push(Token {
|
|
13
|
+
kind: TokenKind::Colon,
|
|
14
|
+
lexeme: ch.to_string(),
|
|
15
|
+
line: *line,
|
|
16
|
+
column: *column,
|
|
17
|
+
indent: *current_indent,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
*column += 1;
|
|
21
|
+
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
use crate::core::lexer::token::{Token, TokenKind};
|
|
2
|
-
|
|
3
|
-
pub fn handle_comment_lexer(
|
|
4
|
-
|
|
5
|
-
chars: &mut std::iter::Peekable<std::str::Chars>,
|
|
6
|
-
current_indent: &mut usize,
|
|
7
|
-
|
|
8
|
-
tokens: &mut Vec<Token>,
|
|
9
|
-
line: &mut usize,
|
|
10
|
-
column: &mut usize
|
|
11
|
-
) {
|
|
12
|
-
let mut comment = String::new();
|
|
13
|
-
|
|
14
|
-
while let Some(&c) = chars.peek() {
|
|
15
|
-
if c == '\n' {
|
|
16
|
-
break;
|
|
17
|
-
}
|
|
18
|
-
comment.push(c);
|
|
19
|
-
chars.next();
|
|
20
|
-
*column += 1;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
tokens.push(Token {
|
|
24
|
-
kind: TokenKind::Comment,
|
|
25
|
-
lexeme: comment.trim().to_string(),
|
|
26
|
-
line: *line,
|
|
27
|
-
column: *column,
|
|
28
|
-
indent: *current_indent,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
1
|
+
use crate::core::lexer::token::{Token, TokenKind};
|
|
2
|
+
|
|
3
|
+
pub fn handle_comment_lexer(
|
|
4
|
+
_char: char,
|
|
5
|
+
chars: &mut std::iter::Peekable<std::str::Chars>,
|
|
6
|
+
current_indent: &mut usize,
|
|
7
|
+
_indent_stack: &mut Vec<usize>,
|
|
8
|
+
tokens: &mut Vec<Token>,
|
|
9
|
+
line: &mut usize,
|
|
10
|
+
column: &mut usize,
|
|
11
|
+
) {
|
|
12
|
+
let mut comment = String::new();
|
|
13
|
+
|
|
14
|
+
while let Some(&c) = chars.peek() {
|
|
15
|
+
if c == '\n' {
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
comment.push(c);
|
|
19
|
+
chars.next();
|
|
20
|
+
*column += 1;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
tokens.push(Token {
|
|
24
|
+
kind: TokenKind::Comment,
|
|
25
|
+
lexeme: comment.trim().to_string(),
|
|
26
|
+
line: *line,
|
|
27
|
+
column: *column,
|
|
28
|
+
indent: *current_indent,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
use crate::core::lexer::token::{
|
|
2
|
-
|
|
3
|
-
pub fn handle_dot_lexer(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
current_indent: &mut usize,
|
|
7
|
-
|
|
8
|
-
tokens: &mut Vec<Token>,
|
|
9
|
-
line: &mut usize,
|
|
10
|
-
column: &mut usize
|
|
11
|
-
) {
|
|
12
|
-
tokens.push(Token {
|
|
13
|
-
kind: TokenKind::Dot,
|
|
14
|
-
lexeme:
|
|
15
|
-
line: *line,
|
|
16
|
-
column: *column,
|
|
17
|
-
indent: *current_indent,
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
*column += 1;
|
|
21
|
-
}
|
|
1
|
+
use crate::core::lexer::token::{Token, TokenKind};
|
|
2
|
+
|
|
3
|
+
pub fn handle_dot_lexer(
|
|
4
|
+
ch: char,
|
|
5
|
+
_chars: &mut std::iter::Peekable<std::str::Chars>,
|
|
6
|
+
current_indent: &mut usize,
|
|
7
|
+
_indent_stack: &mut Vec<usize>,
|
|
8
|
+
tokens: &mut Vec<Token>,
|
|
9
|
+
line: &mut usize,
|
|
10
|
+
column: &mut usize,
|
|
11
|
+
) {
|
|
12
|
+
tokens.push(Token {
|
|
13
|
+
kind: TokenKind::Dot,
|
|
14
|
+
lexeme: ch.to_string(),
|
|
15
|
+
line: *line,
|
|
16
|
+
column: *column,
|
|
17
|
+
indent: *current_indent,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
*column += 1;
|
|
21
|
+
}
|