feat: add better diagnostic rendering
This commit is contained in:
Generated
+37
@@ -125,6 +125,17 @@ version = "1.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
|
checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "codespan-reporting"
|
||||||
|
version = "0.13.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
"termcolor",
|
||||||
|
"unicode-width",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "colorchoice"
|
name = "colorchoice"
|
||||||
version = "1.0.5"
|
version = "1.0.5"
|
||||||
@@ -136,6 +147,7 @@ name = "compiler"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
|
"codespan-reporting",
|
||||||
"cranelift-codegen",
|
"cranelift-codegen",
|
||||||
"cranelift-frontend",
|
"cranelift-frontend",
|
||||||
"cranelift-module",
|
"cranelift-module",
|
||||||
@@ -468,6 +480,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_core",
|
"serde_core",
|
||||||
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -525,12 +538,27 @@ version = "0.13.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
|
checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "termcolor"
|
||||||
|
version = "1.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
|
||||||
|
dependencies = [
|
||||||
|
"winapi-util",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-ident"
|
name = "unicode-ident"
|
||||||
version = "1.0.24"
|
version = "1.0.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-width"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "utf8parse"
|
name = "utf8parse"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
@@ -547,6 +575,15 @@ dependencies = [
|
|||||||
"libm",
|
"libm",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-util"
|
||||||
|
version = "0.1.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
||||||
|
dependencies = [
|
||||||
|
"windows-sys",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-link"
|
name = "windows-link"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
|
|||||||
@@ -10,3 +10,4 @@ cranelift-frontend = "0.131.0"
|
|||||||
cranelift-module = "0.131.0"
|
cranelift-module = "0.131.0"
|
||||||
cranelift-object = "0.131.0"
|
cranelift-object = "0.131.0"
|
||||||
cranelift-native = "0.131.0"
|
cranelift-native = "0.131.0"
|
||||||
|
codespan-reporting = "0.13.1"
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
fn main() -> i8 {
|
fn main() -> i8 {
|
||||||
|
if 2 * 5 == 10 {
|
||||||
return -1;
|
return -1;
|
||||||
|
} else {
|
||||||
|
return 45;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use std::fmt::Display;
|
use std::{fmt::Display, ops::Range};
|
||||||
|
|
||||||
/// A half-open interval `[start, end)` representing a location in the source text.
|
/// A half-open interval `[start, end)` representing a location in the source text.
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
@@ -23,6 +23,12 @@ impl Span {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Span> for Range<usize> {
|
||||||
|
fn from(value: Span) -> Self {
|
||||||
|
value.start..value.end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A fundamental, categorized unit of source code produced during lexical analysis.
|
/// A fundamental, categorized unit of source code produced during lexical analysis.
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
pub struct Token<'src> {
|
pub struct Token<'src> {
|
||||||
|
|||||||
+24
-4
@@ -1,12 +1,16 @@
|
|||||||
use std::{fs::read_to_string, path::PathBuf, process::exit};
|
use std::{fs::read_to_string, path::PathBuf, process::exit};
|
||||||
|
|
||||||
use clap::Parser as ClapParser;
|
use codespan_reporting::diagnostic::{Diagnostic, Label};
|
||||||
|
use codespan_reporting::files::SimpleFile;
|
||||||
|
use codespan_reporting::term;
|
||||||
|
use codespan_reporting::term::termcolor::{ColorChoice, StandardStream};
|
||||||
|
|
||||||
use crate::frontend::parser::Parser;
|
use crate::frontend::parser::Parser;
|
||||||
use crate::frontend::sema::Sema;
|
use crate::frontend::sema::Sema;
|
||||||
use crate::middle::builder::MirBuilder;
|
use crate::middle::builder::MirBuilder;
|
||||||
use crate::middle::dce::eliminate_dead_code;
|
use crate::middle::dce::eliminate_dead_code;
|
||||||
use crate::middle::fold::fold_constants;
|
use crate::middle::fold::fold_constants;
|
||||||
|
use clap::Parser as ClapParser;
|
||||||
|
|
||||||
pub mod backend;
|
pub mod backend;
|
||||||
pub mod frontend;
|
pub mod frontend;
|
||||||
@@ -37,12 +41,20 @@ fn main() {
|
|||||||
exit(1);
|
exit(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let writer = StandardStream::stderr(ColorChoice::Always);
|
||||||
|
let config = term::Config::default();
|
||||||
|
let file = SimpleFile::new(&cli.input, &content);
|
||||||
|
|
||||||
let mut parser = Parser::new(&content);
|
let mut parser = Parser::new(&content);
|
||||||
let module = parser.parse_module();
|
let module = parser.parse_module();
|
||||||
|
|
||||||
if let Some(errors) = parser.errors() {
|
if let Some(errors) = parser.errors() {
|
||||||
for error in errors {
|
for error in errors {
|
||||||
eprintln!("{:?}", error);
|
let diagnostic = Diagnostic::error()
|
||||||
|
.with_message(error.message)
|
||||||
|
.with_label(Label::primary((), error.span));
|
||||||
|
|
||||||
|
term::emit_to_write_style(&mut writer.lock(), &config, &file, &diagnostic).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -53,7 +65,11 @@ fn main() {
|
|||||||
|
|
||||||
if let Some(errors) = sema.errors() {
|
if let Some(errors) = sema.errors() {
|
||||||
for error in errors {
|
for error in errors {
|
||||||
eprintln!("{:?}", error);
|
let diagnostic = Diagnostic::error()
|
||||||
|
.with_message(error.message)
|
||||||
|
.with_label(Label::primary((), error.span));
|
||||||
|
|
||||||
|
term::emit_to_write_style(&mut writer.lock(), &config, &file, &diagnostic).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -64,7 +80,11 @@ fn main() {
|
|||||||
let warnings = eliminate_dead_code(&mut mir_module);
|
let warnings = eliminate_dead_code(&mut mir_module);
|
||||||
|
|
||||||
for warning in warnings {
|
for warning in warnings {
|
||||||
eprintln!("Warning: {} at {:?}", warning.message, warning.span);
|
let diagnostic = Diagnostic::warning()
|
||||||
|
.with_message(warning.message)
|
||||||
|
.with_label(Label::primary((), warning.span));
|
||||||
|
|
||||||
|
term::emit_to_write_style(&mut writer.lock(), &config, &file, &diagnostic).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
let backend = CraneliftBackend::new();
|
let backend = CraneliftBackend::new();
|
||||||
|
|||||||
Reference in New Issue
Block a user