Skip to content

Commit e6bc629

Browse files
clubby789printfn
authored andcommitted
Update annotate-snippets
Co-authored-by: printfn <[email protected]>
1 parent d97c4fb commit e6bc629

File tree

3 files changed

+36
-75
lines changed

3 files changed

+36
-75
lines changed

Cargo.lock

+7-16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ rustfmt-format-diff = []
3333
generic-simd = ["bytecount/generic-simd"]
3434

3535
[dependencies]
36-
annotate-snippets = { version = "0.9", features = ["color"] }
36+
annotate-snippets = { version = "0.11" }
3737
anyhow = "1.0"
3838
bytecount = "0.6.8"
3939
cargo_metadata = "0.18"

src/format_report_formatter.rs

+28-58
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use crate::formatting::FormattingError;
22
use crate::{ErrorKind, FormatReport};
3-
use annotate_snippets::display_list::{DisplayList, FormatOptions};
4-
use annotate_snippets::snippet::{Annotation, AnnotationType, Slice, Snippet, SourceAnnotation};
3+
use annotate_snippets::{Annotation, Level, Renderer, Snippet};
54
use std::fmt::{self, Display};
65

76
/// A builder for [`FormatReportFormatter`].
@@ -49,51 +48,35 @@ impl<'a> Display for FormatReportFormatter<'a> {
4948
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
5049
let errors_by_file = &self.report.internal.borrow().0;
5150

52-
let opt = FormatOptions {
53-
color: self.enable_colors,
54-
..Default::default()
51+
let renderer = if self.enable_colors {
52+
Renderer::styled()
53+
} else {
54+
Renderer::plain()
5555
};
5656

5757
for (file, errors) in errors_by_file {
5858
for error in errors {
5959
let error_kind = error.kind.to_string();
60-
let title = Some(Annotation {
61-
id: if error.is_internal() {
62-
Some("internal")
63-
} else {
64-
None
65-
},
66-
label: Some(&error_kind),
67-
annotation_type: error_kind_to_snippet_annotation_type(&error.kind),
68-
});
60+
let mut message =
61+
error_kind_to_snippet_annotation_level(&error.kind).title(&error_kind);
62+
if error.is_internal() {
63+
message = message.id("internal");
64+
}
6965

7066
let message_suffix = error.msg_suffix();
71-
let footer = if !message_suffix.is_empty() {
72-
Some(Annotation {
73-
id: None,
74-
label: Some(message_suffix),
75-
annotation_type: AnnotationType::Note,
76-
})
77-
} else {
78-
None
79-
};
67+
if !message_suffix.is_empty() {
68+
message = message.footer(Level::Note.title(&message_suffix));
69+
}
8070

8171
let origin = format!("{}:{}", file, error.line);
82-
let slice = Slice {
83-
source: &error.line_buffer.clone(),
84-
line_start: error.line,
85-
origin: Some(origin.as_str()),
86-
fold: false,
87-
annotations: slice_annotation(error).into_iter().collect(),
88-
};
89-
90-
let snippet = Snippet {
91-
title,
92-
footer: footer.into_iter().collect(),
93-
slices: vec![slice],
94-
opt,
95-
};
96-
writeln!(f, "{}\n", DisplayList::from(snippet))?;
72+
let snippet = Snippet::source(&error.line_buffer)
73+
.line_start(error.line)
74+
.origin(&origin)
75+
.fold(false)
76+
.annotations(annotation(error));
77+
message = message.snippet(snippet);
78+
79+
writeln!(f, "{}\n", renderer.render(message))?;
9780
}
9881
}
9982

@@ -102,39 +85,26 @@ impl<'a> Display for FormatReportFormatter<'a> {
10285
"rustfmt has failed to format. See previous {} errors.",
10386
self.report.warning_count()
10487
);
105-
let snippet = Snippet {
106-
title: Some(Annotation {
107-
id: None,
108-
label: Some(&label),
109-
annotation_type: AnnotationType::Warning,
110-
}),
111-
footer: Vec::new(),
112-
slices: Vec::new(),
113-
opt,
114-
};
115-
writeln!(f, "{}", DisplayList::from(snippet))?;
88+
let message = Level::Warning.title(&label);
89+
writeln!(f, "{}", renderer.render(message))?;
11690
}
11791

11892
Ok(())
11993
}
12094
}
12195

122-
fn slice_annotation(error: &FormattingError) -> Option<SourceAnnotation<'_>> {
96+
fn annotation(error: &FormattingError) -> Option<Annotation<'_>> {
12397
let (range_start, range_length) = error.format_len();
12498
let range_end = range_start + range_length;
12599

126100
if range_length > 0 {
127-
Some(SourceAnnotation {
128-
annotation_type: AnnotationType::Error,
129-
range: (range_start, range_end),
130-
label: "",
131-
})
101+
Some(Level::Error.span(range_start..range_end))
132102
} else {
133103
None
134104
}
135105
}
136106

137-
fn error_kind_to_snippet_annotation_type(error_kind: &ErrorKind) -> AnnotationType {
107+
fn error_kind_to_snippet_annotation_level(error_kind: &ErrorKind) -> Level {
138108
match error_kind {
139109
ErrorKind::LineOverflow(..)
140110
| ErrorKind::TrailingWhitespace
@@ -144,7 +114,7 @@ fn error_kind_to_snippet_annotation_type(error_kind: &ErrorKind) -> AnnotationTy
144114
| ErrorKind::LostComment
145115
| ErrorKind::BadAttr
146116
| ErrorKind::InvalidGlobPattern(_)
147-
| ErrorKind::VersionMismatch => AnnotationType::Error,
148-
ErrorKind::DeprecatedAttr => AnnotationType::Warning,
117+
| ErrorKind::VersionMismatch => Level::Error,
118+
ErrorKind::DeprecatedAttr => Level::Warning,
149119
}
150120
}

0 commit comments

Comments
 (0)