rune icon indicating copy to clipboard operation
rune copied to clipboard

Printable errors

Open ModProg opened this issue 1 year ago • 7 comments

Add a module std::error that adds ty::<rune::Error> and assosiated_function(STRING_DISPLAY, ...) I propose using the debug representation to print actual useful errors i.e. write!(f, "{self:?}")

ModProg avatar May 30 '23 13:05 ModProg

fn error() -> Result<Module> {
    let mut module = Module::with_crate_item("std", ["error"]);
    fn display_error(error: &rune::Error, buf: &mut String) -> fmt::Result {
        write!(buf, "{error:?}")
    }

    module.ty::<rune::Error>()?;
    module.associated_function(Protocol::STRING_DISPLAY, display_error)?;
    Ok(module)
}

ModProg avatar May 30 '23 17:05 ModProg

I'm not sure I want rune::Error to be a type integrated into rune scripts right now. The std::error::Error is also a very generic location. But let's discuss!

udoprog avatar May 30 '23 17:05 udoprog

it is the current location actually https://github.com/rune-rs/rune/blob/e5b7a3a1095768b26fa05ec4e2857aba78a019f7/crates/rune/src/any.rs#L86

ModProg avatar May 30 '23 17:05 ModProg

Yeah, I did not remember that. Must be a hangover from old functions that could just "error". I'd honestly be prone to removing it. :thinking:

udoprog avatar May 30 '23 17:05 udoprog

It would be neat though to have something to easily produce readable errors, and anyhow is quite simple to use :D. Another thing is that the hash is really not that easily understood as the display for anyhow is missing :D

Error: Missing function with hash 0x811b62957ea9d9f9

I'd be fine with having it in e.g. an anyhow module in rune-modules but without this e.g. the toml parser doesn't produce readable errors IIRC.

ModProg avatar May 30 '23 17:05 ModProg

Ah. So readable errors can be produced: Anything can be used as an error in Rune, and if it implements STRING_DISPLAY which is expected by errors, it can be printed.

What anyhow gives you is stacktraces and the ability to wrap any error. If those added capabilities aren't used, they don't need to be their own type.

udoprog avatar May 30 '23 17:05 udoprog

What anyhow gives you is stacktraces and the ability to wrap any error. If those added capabilities aren't use, they don't need to be their own type.

Yes, for sure, and one probably should have a custom error type at some point, this would just be a way to get easily started, and the problem would be that only rune could implement Any for anyhow::Error and therefor would need to decide where it lives. Otherwise, one would need to make a wrapper around it.

ModProg avatar May 30 '23 17:05 ModProg