Annotate-snippets

Examples:

Rustc

Notes:

  • Primary Snippet is used for
    • Arrow vs not
    • How to determine: Could be order based
  • Primary Annotation is used for
    • determining line/column
    • choosing to style like the level

Proposal:

pub struct Message { level: Level, code: Option<&str> title: &str, snippets: Vec<Snippet>, } pub struct Snippet { origin: Option<&'a str>, line_start: usize, source: &'a str, annotations: Vec<Annotation>, elide_unannotated: bool, } pub struct Annotation { style: AnnotationStyle, span: Range<usize>, label: Option<&str>, } pub enum Level { Error, Warn, Info, Note, Help, } pub enum Style { Level, // Primary Neutral, // Secondary Added, Removed, }
Level::Error .title("missing lifetime specifier") .code("E0106") .snippet( Snippet::new("fn short(foo_bar: &Vec<&i32>) -> &i32 {") .line_start(100) .origin("$DIR/multiline-multipart-suggestion.rs") .annotate( Style::Level.span(..4).label("expected named lifetime parameter") ) .annotate( Style::Neutral.span(18..24) ) ) Level::Help .title("this function's return type ...") Level::Help .title("consider") .snippet( Snippet::new("source") .line_start(100) .origin("foo.rs") .annotate( Style::Added.span(1..4) ) .annotate( Style::Added.span(10..13) ) .annotate( Style::Added.span(17..19) ) .annotate( Style::Added.span(20..23) ) )
Select a repo