2023-01-20 16:10:03 +01:00
|
|
|
use std::fmt::{Debug, Display};
|
|
|
|
|
|
|
|
|
|
#[derive(Copy, Clone)]
|
|
|
|
|
pub struct CodePos {
|
|
|
|
|
pub line: u32,
|
|
|
|
|
pub col: u32,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Default for CodePos {
|
|
|
|
|
fn default() -> Self {
|
|
|
|
|
Self { line: 1, col: 0 }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Display for CodePos {
|
|
|
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
|
|
|
write!(f, "line {}, col {}", self.line, self.col)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Debug for CodePos {
|
|
|
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
|
|
|
write!(f, "{}:{}", self.line, self.col)
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-01-25 19:01:13 +01:00
|
|
|
|
|
|
|
|
/*====================================================================================================================*/
|
|
|
|
|
|
|
|
|
|
pub fn indent(s: String) -> String {
|
|
|
|
|
s.split('\n')
|
|
|
|
|
.map(|line| format!("\t{line}"))
|
|
|
|
|
.collect::<Vec<String>>()
|
|
|
|
|
.join("\n")
|
|
|
|
|
}
|