feat(tvix/eval): fancy-format parse errors returned by rnix

This change is quite verbose, so a little bit of explaining:

1. To correctly format parse errors, errors must be able to return
   more than one annotated span (the parser returns a list of errors
   for each span).

   To accomplish this, the structure of how the `Diagnostic` struct
   which formats an error is constructed has changed to delegate the
   creation of the `SpanLabel` vector to the kind of error.

2. The rnix structures don't have human-readable output formats by
   default, so some verbose methods for formatting them in
   human-readable ways have been added in the errors module. We might
   want to move these out into a submodule.

3. In many cases, the errors returned by rnix are a bit strange - so
   while we format them with all information that is easily available
   they may look weird or not necessarily help users. Consider this CL
   only a first step in the right direction.

Change-Id: Ie7dd74751af9e7ecb35d751f8b087aae5ae6e2e8
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6871
Reviewed-by: sterni <sternenseemann@systemli.org>
Autosubmit: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
This commit is contained in:
Vincent Ambo 2022-10-06 17:22:17 +03:00 committed by clbot
parent 70427fd934
commit 1e2d323a7c
4 changed files with 267 additions and 23 deletions

View file

@ -54,4 +54,10 @@ impl SourceCode {
c.find_file(span.low()).source_slice(span)
})
}
/// Returns the reference to the file structure that a given span
/// is in.
pub fn get_file(&self, span: Span) -> Arc<codemap::File> {
self.codemap().look_up_span(span).file
}
}