@devaloop/devalang 0.0.1-alpha.8 → 0.0.1-beta.1

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.
Files changed (277) hide show
  1. package/.cargo/config.toml +2 -0
  2. package/.devalang +10 -4
  3. package/.github/workflows/ci.yml +103 -0
  4. package/Cargo.toml +80 -48
  5. package/README.md +135 -158
  6. package/docs/CHANGELOG.md +413 -1
  7. package/docs/CONTRIBUTING.md +101 -0
  8. package/docs/ROADMAP.md +10 -7
  9. package/docs/TODO.md +21 -9
  10. package/examples/automation.deva +42 -0
  11. package/examples/bank.deva +7 -0
  12. package/examples/condition.deva +8 -12
  13. package/examples/duration.deva +9 -0
  14. package/examples/events.deva +12 -0
  15. package/examples/function.deva +15 -0
  16. package/examples/group.deva +3 -3
  17. package/examples/index.deva +57 -10
  18. package/examples/loop.deva +7 -12
  19. package/examples/pattern.deva +8 -0
  20. package/examples/plugin.deva +16 -0
  21. package/examples/synth.deva +14 -0
  22. package/examples/variables.deva +2 -2
  23. package/out-tsc/bin/index.d.ts +2 -0
  24. package/out-tsc/bin/index.js +51 -7
  25. package/out-tsc/core/functions/index.d.ts +37 -0
  26. package/out-tsc/core/functions/index.js +76 -0
  27. package/out-tsc/core/index.d.ts +6 -0
  28. package/out-tsc/core/index.js +22 -0
  29. package/out-tsc/core/types/index.d.ts +4 -0
  30. package/out-tsc/core/types/index.js +20 -0
  31. package/out-tsc/core/types/plugin.d.ts +18 -0
  32. package/out-tsc/core/types/plugin.js +2 -0
  33. package/out-tsc/core/types/result.d.ts +27 -0
  34. package/out-tsc/core/types/result.js +2 -0
  35. package/out-tsc/core/types/statement.d.ts +106 -0
  36. package/out-tsc/core/types/statement.js +2 -0
  37. package/out-tsc/core/types/value.d.ts +43 -0
  38. package/out-tsc/core/types/value.js +2 -0
  39. package/out-tsc/index.d.ts +7 -0
  40. package/out-tsc/index.js +42 -1
  41. package/out-tsc/pkg/devalang_core.d.ts +13 -0
  42. package/out-tsc/pkg/devalang_core.js +50 -0
  43. package/out-tsc/pkg/devalang_core_bg.wasm.d.ts +33 -0
  44. package/out-tsc/scripts/copy-wasm-dts.d.ts +1 -0
  45. package/out-tsc/scripts/copy-wasm-dts.js +73 -0
  46. package/out-tsc/scripts/postinstall.d.ts +1 -0
  47. package/out-tsc/scripts/postinstall.js +83 -0
  48. package/out-tsc/scripts/version/bump.d.ts +1 -0
  49. package/out-tsc/scripts/version/fetch.d.ts +1 -0
  50. package/out-tsc/scripts/version/fetch.js +1 -5
  51. package/out-tsc/scripts/version/index.d.ts +1 -0
  52. package/out-tsc/scripts/version/sync.d.ts +1 -0
  53. package/package.json +28 -7
  54. package/project-version.json +4 -4
  55. package/rust/cli/bank/api.rs +122 -0
  56. package/rust/cli/bank/commands.rs +275 -0
  57. package/rust/cli/bank/mod.rs +29 -0
  58. package/rust/cli/build/commands.rs +103 -0
  59. package/rust/cli/build/mod.rs +2 -0
  60. package/rust/cli/build/process.rs +146 -0
  61. package/rust/cli/check/mod.rs +208 -0
  62. package/rust/cli/discover/commands.rs +253 -0
  63. package/rust/cli/discover/config.rs +111 -0
  64. package/rust/cli/discover/fs.rs +19 -0
  65. package/rust/cli/discover/install.rs +103 -0
  66. package/rust/cli/discover/metadata.rs +48 -0
  67. package/rust/cli/discover/mod.rs +5 -0
  68. package/rust/cli/{init.rs → init/commands.rs} +32 -23
  69. package/rust/cli/init/mod.rs +1 -0
  70. package/rust/cli/install/addon.rs +118 -0
  71. package/rust/cli/install/bank.rs +53 -0
  72. package/rust/cli/install/commands.rs +35 -0
  73. package/rust/cli/install/mod.rs +4 -0
  74. package/rust/cli/install/plugin.rs +61 -0
  75. package/rust/cli/login/commands.rs +124 -0
  76. package/rust/cli/login/mod.rs +1 -0
  77. package/rust/cli/mod.rs +12 -205
  78. package/rust/cli/parser.rs +314 -0
  79. package/rust/cli/play/commands.rs +324 -0
  80. package/rust/cli/play/io.rs +17 -0
  81. package/rust/cli/play/mod.rs +5 -0
  82. package/rust/cli/play/process.rs +150 -0
  83. package/rust/cli/play/realtime.rs +91 -0
  84. package/rust/cli/play/utils.rs +23 -0
  85. package/rust/cli/telemetry/commands.rs +22 -0
  86. package/rust/cli/telemetry/event_creator.rs +80 -0
  87. package/rust/cli/telemetry/mod.rs +3 -0
  88. package/rust/cli/telemetry/send.rs +51 -0
  89. package/rust/cli/{template.rs → template/commands.rs} +69 -57
  90. package/rust/cli/template/mod.rs +1 -0
  91. package/rust/cli/update/commands.rs +6 -0
  92. package/rust/cli/update/mod.rs +1 -0
  93. package/rust/config/driver.rs +103 -0
  94. package/rust/config/mod.rs +3 -16
  95. package/rust/config/ops.rs +26 -0
  96. package/rust/config/settings.rs +101 -0
  97. package/rust/core/audio/engine/helpers.rs +170 -0
  98. package/rust/core/audio/engine/mod.rs +7 -0
  99. package/rust/core/audio/engine/sample.rs +366 -0
  100. package/rust/core/audio/engine/synth.rs +325 -0
  101. package/rust/core/audio/evaluator.rs +310 -31
  102. package/rust/core/audio/interpreter/arrow_call.rs +311 -0
  103. package/rust/core/audio/interpreter/automate.rs +18 -0
  104. package/rust/core/audio/interpreter/call.rs +294 -42
  105. package/rust/core/audio/interpreter/condition.rs +71 -65
  106. package/rust/core/audio/interpreter/driver.rs +542 -204
  107. package/rust/core/audio/interpreter/function.rs +26 -0
  108. package/rust/core/audio/interpreter/let_.rs +38 -19
  109. package/rust/core/audio/interpreter/load.rs +19 -18
  110. package/rust/core/audio/interpreter/loop_.rs +114 -59
  111. package/rust/core/audio/interpreter/mod.rs +14 -11
  112. package/rust/core/audio/interpreter/sleep.rs +28 -36
  113. package/rust/core/audio/interpreter/spawn.rs +252 -65
  114. package/rust/core/audio/interpreter/tempo.rs +40 -16
  115. package/rust/core/audio/interpreter/trigger.rs +239 -69
  116. package/rust/core/audio/loader/mod.rs +1 -1
  117. package/rust/core/audio/loader/trigger.rs +97 -52
  118. package/rust/core/audio/mod.rs +7 -6
  119. package/rust/core/audio/player.rs +70 -54
  120. package/rust/core/audio/renderer.rs +54 -57
  121. package/rust/core/audio/special/easing.rs +189 -0
  122. package/rust/core/audio/special/env.rs +45 -0
  123. package/rust/core/audio/special/math.rs +134 -0
  124. package/rust/core/audio/special/mod.rs +9 -0
  125. package/rust/core/audio/special/modulator.rs +143 -0
  126. package/rust/core/builder/mod.rs +86 -80
  127. package/rust/core/debugger/lexer.rs +27 -27
  128. package/rust/core/debugger/mod.rs +30 -21
  129. package/rust/core/debugger/module.rs +55 -0
  130. package/rust/core/debugger/preprocessor.rs +27 -27
  131. package/rust/core/debugger/store.rs +40 -25
  132. package/rust/core/error/mod.rs +269 -60
  133. package/rust/core/lexer/driver.rs +61 -0
  134. package/rust/core/lexer/handler/arrow.rs +82 -0
  135. package/rust/core/lexer/handler/at.rs +21 -21
  136. package/rust/core/lexer/handler/brace.rs +41 -41
  137. package/rust/core/lexer/handler/colon.rs +21 -21
  138. package/rust/core/lexer/handler/comment.rs +30 -30
  139. package/rust/core/lexer/handler/dot.rs +21 -21
  140. package/rust/core/lexer/handler/driver.rs +337 -215
  141. package/rust/core/lexer/handler/identifier.rs +47 -40
  142. package/rust/core/lexer/handler/indent.rs +66 -52
  143. package/rust/core/lexer/handler/mod.rs +15 -13
  144. package/rust/core/lexer/handler/newline.rs +23 -23
  145. package/rust/core/lexer/handler/number.rs +31 -31
  146. package/rust/core/lexer/handler/operator.rs +46 -44
  147. package/rust/core/lexer/handler/parenthesis.rs +41 -0
  148. package/rust/core/lexer/handler/slash.rs +21 -0
  149. package/rust/core/lexer/handler/string.rs +63 -63
  150. package/rust/core/lexer/mod.rs +3 -30
  151. package/rust/core/lexer/token.rs +21 -12
  152. package/rust/core/mod.rs +10 -10
  153. package/rust/core/parser/driver.rs +584 -312
  154. package/rust/core/parser/handler/arrow_call.rs +253 -0
  155. package/rust/core/parser/handler/at.rs +279 -162
  156. package/rust/core/parser/handler/bank.rs +104 -41
  157. package/rust/core/parser/handler/condition.rs +83 -74
  158. package/rust/core/parser/handler/dot.rs +148 -112
  159. package/rust/core/parser/handler/identifier/automate.rs +254 -0
  160. package/rust/core/parser/handler/identifier/call.rs +91 -0
  161. package/rust/core/parser/handler/identifier/emit.rs +70 -0
  162. package/rust/core/parser/handler/identifier/function.rs +113 -0
  163. package/rust/core/parser/handler/identifier/group.rs +89 -0
  164. package/rust/core/parser/handler/identifier/let_.rs +173 -0
  165. package/rust/core/parser/handler/identifier/mod.rs +55 -0
  166. package/rust/core/parser/handler/identifier/on.rs +107 -0
  167. package/rust/core/parser/handler/identifier/print.rs +49 -0
  168. package/rust/core/parser/handler/identifier/sleep.rs +43 -0
  169. package/rust/core/parser/handler/identifier/spawn.rs +91 -0
  170. package/rust/core/parser/handler/identifier/synth.rs +135 -0
  171. package/rust/core/parser/handler/loop_.rs +194 -66
  172. package/rust/core/parser/handler/mod.rs +9 -7
  173. package/rust/core/parser/handler/pattern.rs +74 -0
  174. package/rust/core/parser/handler/tempo.rs +57 -47
  175. package/rust/core/parser/mod.rs +3 -4
  176. package/rust/core/parser/statement.rs +11 -88
  177. package/rust/core/plugin/loader.rs +137 -0
  178. package/rust/core/plugin/mod.rs +2 -0
  179. package/rust/core/plugin/runner.rs +347 -0
  180. package/rust/core/preprocessor/loader.rs +637 -179
  181. package/rust/core/preprocessor/mod.rs +4 -4
  182. package/rust/core/preprocessor/module.rs +60 -53
  183. package/rust/core/preprocessor/processor.rs +114 -67
  184. package/rust/core/preprocessor/resolver/bank.rs +49 -47
  185. package/rust/core/preprocessor/resolver/call.rs +124 -53
  186. package/rust/core/preprocessor/resolver/condition.rs +95 -66
  187. package/rust/core/preprocessor/resolver/driver.rs +324 -182
  188. package/rust/core/preprocessor/resolver/function.rs +69 -0
  189. package/rust/core/preprocessor/resolver/group.rs +94 -118
  190. package/rust/core/preprocessor/resolver/let_.rs +32 -0
  191. package/rust/core/preprocessor/resolver/loop_.rs +318 -145
  192. package/rust/core/preprocessor/resolver/mod.rs +16 -10
  193. package/rust/core/preprocessor/resolver/pattern.rs +83 -0
  194. package/rust/core/preprocessor/resolver/spawn.rs +99 -53
  195. package/rust/core/preprocessor/resolver/synth.rs +54 -0
  196. package/rust/core/preprocessor/resolver/tempo.rs +48 -49
  197. package/rust/core/preprocessor/resolver/trigger.rs +116 -111
  198. package/rust/core/preprocessor/resolver/value.rs +176 -0
  199. package/rust/core/store/export.rs +28 -28
  200. package/rust/core/store/function.rs +40 -0
  201. package/rust/core/store/global.rs +61 -39
  202. package/rust/core/store/import.rs +28 -28
  203. package/rust/core/store/mod.rs +5 -4
  204. package/rust/core/store/variable.rs +51 -28
  205. package/rust/core/utils/mod.rs +1 -2
  206. package/rust/core/utils/path.rs +37 -46
  207. package/rust/lib.rs +308 -117
  208. package/rust/main.rs +364 -65
  209. package/rust/types/Cargo.toml +11 -0
  210. package/rust/types/src/addons.rs +55 -0
  211. package/rust/types/src/ast.rs +202 -0
  212. package/rust/types/src/config.rs +74 -0
  213. package/rust/types/src/lib.rs +12 -0
  214. package/rust/types/src/telemetry.rs +85 -0
  215. package/rust/utils/Cargo.toml +26 -0
  216. package/rust/utils/src/error.rs +186 -0
  217. package/rust/utils/src/file.rs +94 -0
  218. package/rust/utils/src/first_usage.rs +97 -0
  219. package/rust/utils/{mod.rs → src/lib.rs} +9 -6
  220. package/rust/utils/{logger.rs → src/logger.rs} +200 -123
  221. package/rust/utils/src/path.rs +88 -0
  222. package/rust/utils/src/signature.rs +41 -0
  223. package/rust/utils/{spinner.rs → src/spinner.rs} +20 -21
  224. package/rust/utils/src/version.rs +27 -0
  225. package/rust/utils/{watcher.rs → src/watcher.rs} +46 -33
  226. package/rust/web/api.rs +5 -0
  227. package/rust/web/cdn.rs +34 -0
  228. package/rust/web/mod.rs +3 -0
  229. package/rust/web/sso.rs +5 -0
  230. package/templates/minimal/README.md +143 -127
  231. package/templates/welcome/README.md +143 -127
  232. package/templates/welcome/src/index.deva +56 -8
  233. package/templates/welcome/src/variables.deva +2 -4
  234. package/tests/integration.rs +21 -0
  235. package/tests/rust/cli_check_build.rs +21 -0
  236. package/tests/rust/cli_help.rs +12 -0
  237. package/tests/rust/cli_template_list.rs +10 -0
  238. package/tests/rust/cli_version.rs +11 -0
  239. package/tests/typescript/index.spec.ts +136 -0
  240. package/tests/typescript/playhead.spec.ts +36 -0
  241. package/tests/typescript/render_e2e.spec.ts +77 -0
  242. package/tsconfig.json +12 -10
  243. package/typescript/bin/index.ts +19 -5
  244. package/typescript/core/functions/index.ts +83 -0
  245. package/typescript/core/index.ts +6 -0
  246. package/typescript/core/types/index.ts +4 -0
  247. package/typescript/core/types/plugin.ts +19 -0
  248. package/typescript/core/types/result.ts +29 -0
  249. package/typescript/core/types/statement.ts +47 -0
  250. package/typescript/core/types/value.ts +29 -0
  251. package/typescript/index.ts +8 -1
  252. package/typescript/pkg/devalang_core.d.ts +4 -0
  253. package/typescript/pkg/devalang_core.ts +49 -0
  254. package/typescript/scripts/copy-wasm-dts.ts +41 -0
  255. package/typescript/scripts/postinstall.ts +85 -0
  256. package/typescript/scripts/version/bump.ts +0 -1
  257. package/typescript/scripts/version/fetch.ts +1 -6
  258. package/typescript/scripts/version/index.ts +0 -1
  259. package/docs/COMMANDS.md +0 -85
  260. package/docs/CONFIG.md +0 -30
  261. package/docs/SYNTAX.md +0 -210
  262. package/out-tsc/bin/devalang.exe +0 -0
  263. package/out-tsc/scripts/postbuild.js +0 -11
  264. package/rust/cli/build.rs +0 -137
  265. package/rust/cli/check.rs +0 -117
  266. package/rust/cli/play.rs +0 -193
  267. package/rust/config/loader.rs +0 -13
  268. package/rust/core/audio/engine.rs +0 -126
  269. package/rust/core/parser/handler/identifier.rs +0 -262
  270. package/rust/core/shared/duration.rs +0 -8
  271. package/rust/core/shared/mod.rs +0 -2
  272. package/rust/core/shared/value.rs +0 -18
  273. package/rust/core/utils/validation.rs +0 -35
  274. package/rust/utils/file.rs +0 -35
  275. package/rust/utils/signature.rs +0 -17
  276. package/rust/utils/version.rs +0 -15
  277. package/typescript/scripts/postbuild.ts +0 -8
@@ -1,80 +1,86 @@
1
- use crate::core::audio::renderer::render_audio_with_modules;
2
- use crate::core::parser::statement::Statement;
3
- use crate::core::store::global::GlobalStore;
4
- use std::{ collections::HashMap, fs::create_dir_all };
5
- use std::io::Write;
6
-
7
- use crate::utils::logger::Logger;
8
-
9
- pub struct Builder {}
10
-
11
- impl Builder {
12
- pub fn new() -> Self {
13
- Builder {}
14
- }
15
-
16
- pub fn build_ast(&self, modules: &HashMap<String, Vec<Statement>>, out_dir: &str) {
17
- for (name, statements) in modules {
18
- let formatted_name = name.split("/").last().unwrap_or(name);
19
- let formatted_name = formatted_name.replace(".deva", "");
20
-
21
- create_dir_all(format!("{}/ast", out_dir)).expect("Failed to create AST directory");
22
-
23
- let file_path = format!("{}/ast/{}.json", out_dir, formatted_name);
24
- let mut file = std::fs::File::create(file_path).expect("Failed to create AST file");
25
-
26
- let content = serde_json
27
- ::to_string_pretty(&statements)
28
- .expect("Failed to serialize AST");
29
-
30
- file.write_all(content.as_bytes()).expect("Failed to write AST to file");
31
- }
32
- }
33
-
34
- pub fn build_audio(
35
- &self,
36
- modules: &HashMap<String, Vec<Statement>>,
37
- normalized_output_dir: &str,
38
- global_store: &mut GlobalStore
39
- ) {
40
- let logger = Logger::new();
41
-
42
- let audio_engines = render_audio_with_modules(
43
- modules.clone(),
44
- &normalized_output_dir,
45
- global_store
46
- );
47
-
48
- create_dir_all(format!("{}/audio", normalized_output_dir)).expect(
49
- "Failed to create audio directory"
50
- );
51
-
52
- for (module_name, mut audio_engine) in audio_engines {
53
- let formatted_module_name = module_name
54
- .split('/')
55
- .last()
56
- .unwrap_or(&module_name)
57
- .replace(".deva", "");
58
-
59
- let output_path = format!(
60
- "{}/audio/{}.wav",
61
- normalized_output_dir,
62
- formatted_module_name
63
- );
64
-
65
- match audio_engine.generate_wav_file(&output_path) {
66
- Ok(_) => {}
67
- Err(msg) => {
68
- logger.log_error_with_stacktrace(
69
- &format!(
70
- "Unable to generate WAV file for module '{}': {}",
71
- formatted_module_name,
72
- msg
73
- ),
74
- &module_name
75
- );
76
- }
77
- }
78
- }
79
- }
80
- }
1
+ use crate::core::audio::renderer::render_audio_with_modules;
2
+ use crate::core::parser::statement::Statement;
3
+ use crate::core::store::global::GlobalStore;
4
+ use devalang_utils::logger::Logger;
5
+ use std::io::Write;
6
+ use std::{collections::HashMap, fs::create_dir_all};
7
+
8
+ pub struct Builder {}
9
+
10
+ impl Default for Builder {
11
+ fn default() -> Self {
12
+ Self::new()
13
+ }
14
+ }
15
+
16
+ impl Builder {
17
+ pub fn new() -> Self {
18
+ Builder {}
19
+ }
20
+
21
+ pub fn build_ast(
22
+ &self,
23
+ modules: &HashMap<String, Vec<Statement>>,
24
+ out_dir: &str,
25
+ compress: bool,
26
+ ) {
27
+ for (name, statements) in modules {
28
+ let formatted_name = name.split("/").last().unwrap_or(name);
29
+ let formatted_name = formatted_name.replace(".deva", "");
30
+
31
+ create_dir_all(format!("{}/ast", out_dir)).expect("Failed to create AST directory");
32
+
33
+ let file_path = format!("{}/ast/{}.json", out_dir, formatted_name);
34
+ let mut file = std::fs::File::create(file_path).expect("Failed to create AST file");
35
+ let content = if compress {
36
+ serde_json::to_string(&statements).expect("Failed to serialize AST")
37
+ } else {
38
+ serde_json::to_string_pretty(&statements).expect("Failed to serialize AST")
39
+ };
40
+
41
+ file.write_all(content.as_bytes())
42
+ .expect("Failed to write AST to file");
43
+ }
44
+ }
45
+
46
+ pub fn build_audio(
47
+ &self,
48
+ modules: &HashMap<String, Vec<Statement>>,
49
+ normalized_output_dir: &str,
50
+ global_store: &mut GlobalStore,
51
+ ) {
52
+ let logger = Logger::new();
53
+
54
+ let audio_engines =
55
+ render_audio_with_modules(modules.clone(), normalized_output_dir, global_store);
56
+
57
+ create_dir_all(format!("{}/audio", normalized_output_dir))
58
+ .expect("Failed to create audio directory");
59
+
60
+ for (module_name, mut audio_engine) in audio_engines {
61
+ let formatted_module_name = module_name
62
+ .split('/')
63
+ .next_back()
64
+ .unwrap_or(&module_name)
65
+ .replace(".deva", "");
66
+
67
+ let output_path = format!(
68
+ "{}/audio/{}.wav",
69
+ normalized_output_dir, formatted_module_name
70
+ );
71
+
72
+ match audio_engine.generate_wav_file(&output_path) {
73
+ Ok(_) => {}
74
+ Err(msg) => {
75
+ logger.log_error_with_stacktrace(
76
+ &format!(
77
+ "Unable to generate WAV file for module '{}': {}",
78
+ formatted_module_name, msg
79
+ ),
80
+ &module_name,
81
+ );
82
+ }
83
+ }
84
+ }
85
+ }
86
+ }
@@ -1,27 +1,27 @@
1
- use std::{ collections::HashMap, fs::create_dir_all };
2
- use crate::core::{ debugger::Debugger, lexer::token::Token };
3
-
4
- pub fn write_lexer_log_file(
5
- output_dir: &str,
6
- file_name: &str,
7
- modules: HashMap<String, Vec<Token>>
8
- ) {
9
- let debugger = Debugger::new();
10
- let mut content = String::new();
11
-
12
- let log_directory = format!("{}/logs", output_dir);
13
-
14
- create_dir_all(&log_directory).expect("Failed to create log directory");
15
-
16
- for (path, tokens) in modules {
17
- content.push_str(&format!("--- Resolved Tokens for {} ---\n", path));
18
-
19
- for token in tokens {
20
- content.push_str(&format!("{:?}\n", token));
21
- }
22
-
23
- content.push_str("\n");
24
- }
25
-
26
- debugger.write_log_file(&log_directory, file_name, &content);
27
- }
1
+ use crate::core::{debugger::Debugger, lexer::token::Token};
2
+ use std::{collections::HashMap, fs::create_dir_all};
3
+
4
+ pub fn write_lexer_log_file(
5
+ output_dir: &str,
6
+ file_name: &str,
7
+ modules: HashMap<String, Vec<Token>>,
8
+ ) {
9
+ let debugger = Debugger::new();
10
+ let mut content = String::new();
11
+
12
+ let log_directory = format!("{}/logs", output_dir);
13
+
14
+ create_dir_all(&log_directory).expect("Failed to create log directory");
15
+
16
+ for (path, tokens) in modules {
17
+ content.push_str(&format!("--- Resolved Tokens for {} ---\n", path));
18
+
19
+ for token in tokens {
20
+ content.push_str(&format!("{:?}\n", token));
21
+ }
22
+
23
+ content.push('\n');
24
+ }
25
+
26
+ debugger.write_log_file(&log_directory, file_name, &content);
27
+ }
@@ -1,21 +1,30 @@
1
- pub mod preprocessor;
2
- pub mod lexer;
3
- pub mod store;
4
-
5
- use std::io::Write;
6
-
7
- pub struct Debugger {}
8
-
9
- impl Debugger {
10
- pub fn new() -> Self {
11
- Debugger {}
12
- }
13
-
14
- pub fn write_log_file(&self, path: &str, filename: &str, content: &str) {
15
- std::fs::create_dir_all(path).expect("Failed to create directory");
16
- let file_path = format!("{}/{}", path, filename);
17
- let mut file = std::fs::File::create(file_path).expect("Failed to create file");
18
-
19
- file.write_all(content.as_bytes()).expect("Failed to write to file");
20
- }
21
- }
1
+ pub mod lexer;
2
+ pub mod module;
3
+ pub mod preprocessor;
4
+ pub mod store;
5
+
6
+ use std::io::Write;
7
+
8
+ pub struct Debugger {}
9
+
10
+ impl Default for Debugger {
11
+ fn default() -> Self {
12
+ Self::new()
13
+ }
14
+ }
15
+
16
+ impl Debugger {
17
+ pub fn new() -> Self {
18
+ Debugger {}
19
+ }
20
+
21
+ pub fn write_log_file(&self, path: &str, filename: &str, content: &str) {
22
+ std::fs::create_dir_all(path).expect("Failed to create directory");
23
+
24
+ let file_path = format!("{}/{}", path, filename);
25
+ let mut file = std::fs::File::create(file_path).expect("Failed to create file");
26
+
27
+ file.write_all(content.as_bytes())
28
+ .expect("Failed to write to file");
29
+ }
30
+ }
@@ -0,0 +1,55 @@
1
+ use crate::core::{
2
+ debugger::Debugger,
3
+ store::{function::FunctionTable, variable::VariableTable},
4
+ };
5
+ use std::fs::create_dir_all;
6
+
7
+ pub fn write_module_variable_log_file(
8
+ output_dir: &str,
9
+ module_path: &str,
10
+ variable_table: &VariableTable,
11
+ ) {
12
+ let debugger = Debugger::new();
13
+ let mut content = String::new();
14
+ let module_name = module_path
15
+ .split('/')
16
+ .next_back()
17
+ .unwrap_or("index")
18
+ .replace(".deva", "");
19
+
20
+ let log_directory = format!("{}/logs/modules/{}", output_dir, module_name);
21
+ create_dir_all(&log_directory).expect("Failed to create log directory");
22
+
23
+ for (var_name, var_data) in &variable_table.variables {
24
+ content.push_str(&format!("{:?} = {:?}\n", var_name, var_data));
25
+ }
26
+
27
+ content.push('\n');
28
+
29
+ debugger.write_log_file(&log_directory, "variables.log", &content);
30
+ }
31
+
32
+ pub fn write_module_function_log_file(
33
+ output_dir: &str,
34
+ module_path: &str,
35
+ function_table: &FunctionTable,
36
+ ) {
37
+ let debugger = Debugger::new();
38
+ let mut content = String::new();
39
+ let module_name = module_path
40
+ .split('/')
41
+ .next_back()
42
+ .unwrap_or("index")
43
+ .replace(".deva", "");
44
+
45
+ let log_directory = format!("{}/logs/modules/{}", output_dir, module_name);
46
+ create_dir_all(&log_directory).expect("Failed to create log directory");
47
+
48
+ for (func_name, func_data) in &function_table.functions {
49
+ content.push_str(&format!("{:?} = {:?}\n", func_name, func_data));
50
+ }
51
+
52
+ content.push('\n');
53
+
54
+ debugger.write_log_file(&log_directory, "functions.log", &content);
55
+ }
@@ -1,27 +1,27 @@
1
- use std::{ collections::HashMap, fs::create_dir_all };
2
- use crate::core::{ debugger::Debugger, parser::statement::Statement };
3
-
4
- pub fn write_preprocessor_log_file(
5
- output_dir: &str,
6
- file_name: &str,
7
- modules: HashMap<String, Vec<Statement>>
8
- ) {
9
- let debugger = Debugger::new();
10
- let mut content = String::new();
11
-
12
- let log_directory = format!("{}/logs", output_dir);
13
-
14
- create_dir_all(&log_directory).expect("Failed to create log directory");
15
-
16
- for (path, stmts) in modules {
17
- content.push_str(&format!("--- Resolved Statements for {} ---\n", path));
18
-
19
- for stmt in stmts {
20
- content.push_str(&format!("{:?}\n", stmt));
21
- }
22
-
23
- content.push_str("\n");
24
- }
25
-
26
- debugger.write_log_file(&log_directory, file_name, &content);
27
- }
1
+ use crate::core::{debugger::Debugger, parser::statement::Statement};
2
+ use std::{collections::HashMap, fs::create_dir_all};
3
+
4
+ pub fn write_preprocessor_log_file(
5
+ output_dir: &str,
6
+ file_name: &str,
7
+ modules: HashMap<String, Vec<Statement>>,
8
+ ) {
9
+ let debugger = Debugger::new();
10
+ let mut content = String::new();
11
+
12
+ let log_directory = format!("{}/logs", output_dir);
13
+
14
+ create_dir_all(&log_directory).expect("Failed to create log directory");
15
+
16
+ for (path, stmts) in modules {
17
+ content.push_str(&format!("--- Resolved Statements for {} ---\n", path));
18
+
19
+ for stmt in stmts {
20
+ content.push_str(&format!("{:?}\n", stmt));
21
+ }
22
+
23
+ content.push('\n');
24
+ }
25
+
26
+ debugger.write_log_file(&log_directory, file_name, &content);
27
+ }
@@ -1,25 +1,40 @@
1
- use std::{ collections::HashMap, fs::create_dir_all };
2
- use crate::core::{ debugger::Debugger, preprocessor::module::Module };
3
-
4
- pub fn write_store_log_file(output_dir: &str, file_name: &str, modules: HashMap<String, Module>) {
5
- let debugger = Debugger::new();
6
- let mut content = String::new();
7
-
8
- let log_directory = format!("{}/logs", output_dir);
9
- create_dir_all(&log_directory).expect("Failed to create log directory");
10
-
11
- for (path, module) in modules {
12
- content.push_str(&format!("--- Module: {} ---\n", path));
13
-
14
- for (index, var_value) in module.variable_table.variables.iter().enumerate() {
15
- let var_name = var_value.0.clone();
16
- let var_data = var_value.1;
17
-
18
- content.push_str(&format!("{}: {:?} = {:?}\n", index + 1, var_name, var_data));
19
- }
20
-
21
- content.push_str("\n");
22
- }
23
-
24
- debugger.write_log_file(&log_directory, file_name, &content);
25
- }
1
+ use crate::core::{
2
+ debugger::Debugger,
3
+ store::{function::FunctionTable, variable::VariableTable},
4
+ };
5
+ use std::fs::create_dir_all;
6
+
7
+ pub fn write_variables_log_file(output_dir: &str, file_name: &str, variables: VariableTable) {
8
+ let debugger = Debugger::new();
9
+ let mut content = String::new();
10
+
11
+ let log_directory = format!("{}/logs", output_dir);
12
+ create_dir_all(&log_directory).expect("Failed to create log directory");
13
+
14
+ for (var_name, var_data) in variables.variables {
15
+ content.push_str(&format!("{:?} = {:?}\n", var_name, var_data));
16
+ }
17
+
18
+ content.push('\n');
19
+
20
+ debugger.write_log_file(&log_directory, file_name, &content);
21
+ }
22
+
23
+ pub fn write_function_log_file(output_dir: &str, file_name: &str, functions: FunctionTable) {
24
+ let debugger = Debugger::new();
25
+ let mut content = String::new();
26
+
27
+ let log_directory = format!("{}/logs", output_dir);
28
+ create_dir_all(&log_directory).expect("Failed to create log directory");
29
+
30
+ for (_index, function) in functions.functions {
31
+ content.push_str(&format!(
32
+ "'{}' = [{:?}] => {:?}\n",
33
+ function.name, function.parameters, function.body
34
+ ));
35
+ }
36
+
37
+ content.push('\n');
38
+
39
+ debugger.write_log_file(&log_directory, file_name, &content);
40
+ }