summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Bridle <bridle.benjamin@gmail.com>2025-02-10 11:56:58 +1300
committerBen Bridle <bridle.benjamin@gmail.com>2025-02-10 11:56:58 +1300
commitfd6b4471955dac64b7d40b7c31992c15d52b2460 (patch)
tree5b2561150e0eac0922a8ff40dd34da6a3ca76f7c
parent2d67476d48fcb33cd1c59cbc2e0f82872bc0c217 (diff)
downloadassembler-fd6b4471955dac64b7d40b7c31992c15d52b2460.zip
Move report-printing structs to separate module
-rw-r--r--src/errors/mod.rs66
-rw-r--r--src/lib.rs4
-rw-r--r--src/reports/mod.rs69
-rw-r--r--src/reports/resolver_error.rs (renamed from src/errors/resolver_error.rs)0
-rw-r--r--src/reports/source_hierarchy.rs (renamed from src/source_hierarchy.rs)0
5 files changed, 71 insertions, 68 deletions
diff --git a/src/errors/mod.rs b/src/errors/mod.rs
index b0bf7e4..4bf3f0f 100644
--- a/src/errors/mod.rs
+++ b/src/errors/mod.rs
@@ -1,71 +1,5 @@
mod file_error;
mod merge_error;
-mod resolver_error;
pub use file_error::*;
pub use merge_error::*;
-pub use resolver_error::*;
-
-use crate::*;
-
-use ansi::*;
-use log::LogLevel;
-
-
-pub fn report_source_issue(level: LogLevel, context: &Context, message: &str) {
- // Prepare variables.
- let in_merged = &context.source.in_merged;
- let line_num = in_merged.start.line + 1;
- let digits = line_num.to_string().len();
- let w = digits + 3;
- let arrow = "-->";
- let mut string = message.to_string();
-
- macro_rules! push {
- ($($tokens:tt)*) => { string.push_str(&format!($($tokens)*)) };
- }
-
- // Format message and locations.
- push!("{NORMAL}\n");
- push!("{BLUE}{arrow:>w$}{NORMAL} {in_merged}\n", w=w);
- if let Some(in_source) = &context.source.in_source {
- push!("{BLUE}{arrow:>w$}{NORMAL} {in_source}\n", w=w);
- }
-
- // Format source context.
- let left = in_merged.start.column;
- let right = in_merged.end.column + 1;
- let source_line = context.source_code.split('\n').nth(in_merged.start.line)
- .unwrap_or("<error reading line from source>");
- let space = " ";
- let colour = match level {
- LogLevel::Info => BLUE,
- LogLevel::Warn => YELLOW,
- LogLevel::Error => RED,
- LogLevel::Fatal => RED,
- };
-
- // Print source code line.
- push!("{BLUE} {line_num} | {NORMAL}");
- for (i, c) in source_line.chars().enumerate() {
- if i == left { push!("{colour}") }
- if i == right { push!("{NORMAL}") }
- push!("{c}");
- }
- push!("{NORMAL}\n");
-
- // Print source code underline.
- push!("{BLUE} {space:>w$} | {NORMAL}", w=digits);
- for _ in 0..left { push!(" "); }
- push!("{colour}");
- for _ in left..right { push!("^"); }
- push!("{NORMAL}");
-
- // Print the completed message.
- match level {
- LogLevel::Info => log::info!( "{}", string),
- LogLevel::Warn => log::warn!( "{}", string),
- LogLevel::Error => log::error!("{}", string),
- LogLevel::Fatal => log::fatal!("{}", string),
- }
-}
diff --git a/src/lib.rs b/src/lib.rs
index b8ce3c9..64c1666 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -5,7 +5,7 @@ mod context;
mod errors;
mod locators;
mod resolver;
-mod source_hierarchy;
+mod reports;
mod source_unit;
mod tokeniser;
@@ -13,6 +13,6 @@ pub use context::*;
pub use errors::*;
pub use locators::*;
pub use resolver::*;
-pub use source_hierarchy::*;
+pub use reports::*;
pub use source_unit::*;
pub use tokeniser::*;
diff --git a/src/reports/mod.rs b/src/reports/mod.rs
new file mode 100644
index 0000000..9ab3da3
--- /dev/null
+++ b/src/reports/mod.rs
@@ -0,0 +1,69 @@
+mod resolver_error;
+mod source_hierarchy;
+
+pub use resolver_error::*;
+pub use source_hierarchy::*;
+
+use crate::*;
+
+use ansi::*;
+use log::LogLevel;
+
+
+pub fn report_source_issue(level: LogLevel, context: &Context, message: &str) {
+ // Prepare variables.
+ let in_merged = &context.source.in_merged;
+ let line_num = in_merged.start.line + 1;
+ let digits = line_num.to_string().len();
+ let w = digits + 3;
+ let arrow = "-->";
+ let mut string = message.to_string();
+
+ macro_rules! push {
+ ($($tokens:tt)*) => { string.push_str(&format!($($tokens)*)) };
+ }
+
+ // Format message and locations.
+ push!("{NORMAL}\n");
+ push!("{BLUE}{arrow:>w$}{NORMAL} {in_merged}\n", w=w);
+ if let Some(in_source) = &context.source.in_source {
+ push!("{BLUE}{arrow:>w$}{NORMAL} {in_source}\n", w=w);
+ }
+
+ // Format source context.
+ let left = in_merged.start.column;
+ let right = in_merged.end.column + 1;
+ let source_line = context.source_code.split('\n').nth(in_merged.start.line)
+ .unwrap_or("<error reading line from source>");
+ let space = " ";
+ let colour = match level {
+ LogLevel::Info => BLUE,
+ LogLevel::Warn => YELLOW,
+ LogLevel::Error => RED,
+ LogLevel::Fatal => RED,
+ };
+
+ // Print source code line.
+ push!("{BLUE} {line_num} | {NORMAL}");
+ for (i, c) in source_line.chars().enumerate() {
+ if i == left { push!("{colour}") }
+ if i == right { push!("{NORMAL}") }
+ push!("{c}");
+ }
+ push!("{NORMAL}\n");
+
+ // Print source code underline.
+ push!("{BLUE} {space:>w$} | {NORMAL}", w=digits);
+ for _ in 0..left { push!(" "); }
+ push!("{colour}");
+ for _ in left..right { push!("^"); }
+ push!("{NORMAL}");
+
+ // Print the completed message.
+ match level {
+ LogLevel::Info => log::info!( "{}", string),
+ LogLevel::Warn => log::warn!( "{}", string),
+ LogLevel::Error => log::error!("{}", string),
+ LogLevel::Fatal => log::fatal!("{}", string),
+ }
+}
diff --git a/src/errors/resolver_error.rs b/src/reports/resolver_error.rs
index 97fc761..97fc761 100644
--- a/src/errors/resolver_error.rs
+++ b/src/reports/resolver_error.rs
diff --git a/src/source_hierarchy.rs b/src/reports/source_hierarchy.rs
index 9478c56..9478c56 100644
--- a/src/source_hierarchy.rs
+++ b/src/reports/source_hierarchy.rs