|
1 | 1 | use crate::core::{Edition, Feature, Features, Manifest, Package};
|
2 | 2 | use crate::{CargoResult, GlobalContext};
|
3 |
| -use annotate_snippets::{Level, Snippet}; |
| 3 | +use annotate_snippets::{AnnotationKind, Group, Level, Snippet}; |
4 | 4 | use cargo_util_schemas::manifest::{TomlLintLevel, TomlToolLints};
|
5 | 5 | use pathdiff::diff_paths;
|
6 | 6 | use std::fmt::Display;
|
@@ -145,32 +145,33 @@ fn verify_feature_enabled(
|
145 | 145 | panic!("could not find `cargo::{lint_name}` in `[lints]`, or `[workspace.lints]` ")
|
146 | 146 | };
|
147 | 147 |
|
148 |
| - let mut message = Level::Error |
149 |
| - .title(&title) |
150 |
| - .snippet( |
151 |
| - Snippet::source(contents) |
152 |
| - .origin(path) |
153 |
| - .annotation(Level::Error.span(span.key).label(&label)) |
154 |
| - .fold(true), |
155 |
| - ) |
156 |
| - .footer(Level::Help.title(&help)); |
| 148 | + let mut report = Vec::new(); |
| 149 | + report.push( |
| 150 | + Group::with_title(Level::ERROR.primary_title(title)) |
| 151 | + .element( |
| 152 | + Snippet::source(contents) |
| 153 | + .path(path) |
| 154 | + .annotation(AnnotationKind::Primary.span(span.key).label(label)), |
| 155 | + ) |
| 156 | + .element(Level::HELP.message(help)), |
| 157 | + ); |
157 | 158 |
|
158 | 159 | if let Some(inherit_span) = get_key_value_span(manifest.document(), &["lints", "workspace"])
|
159 | 160 | {
|
160 |
| - message = message.footer( |
161 |
| - Level::Note.title(&second_title).snippet( |
| 161 | + report.push( |
| 162 | + Group::with_title(Level::NOTE.secondary_title(second_title)).element( |
162 | 163 | Snippet::source(manifest.contents())
|
163 |
| - .origin(&manifest_path) |
| 164 | + .path(manifest_path) |
164 | 165 | .annotation(
|
165 |
| - Level::Note.span(inherit_span.key.start..inherit_span.value.end), |
166 |
| - ) |
167 |
| - .fold(true), |
| 166 | + AnnotationKind::Context |
| 167 | + .span(inherit_span.key.start..inherit_span.value.end), |
| 168 | + ), |
168 | 169 | ),
|
169 | 170 | );
|
170 | 171 | }
|
171 | 172 |
|
172 | 173 | *error_count += 1;
|
173 |
| - gctx.shell().print_message(message)?; |
| 174 | + gctx.shell().print_report(&report)?; |
174 | 175 | }
|
175 | 176 | Ok(())
|
176 | 177 | }
|
@@ -330,12 +331,12 @@ impl LintLevel {
|
330 | 331 | self == &LintLevel::Forbid || self == &LintLevel::Deny
|
331 | 332 | }
|
332 | 333 |
|
333 |
| - pub fn to_diagnostic_level(self) -> Level { |
| 334 | + pub fn to_diagnostic_level(self) -> Level<'static> { |
334 | 335 | match self {
|
335 | 336 | LintLevel::Allow => unreachable!("allow does not map to a diagnostic level"),
|
336 |
| - LintLevel::Warn => Level::Warning, |
337 |
| - LintLevel::Deny => Level::Error, |
338 |
| - LintLevel::Forbid => Level::Error, |
| 337 | + LintLevel::Warn => Level::WARNING, |
| 338 | + LintLevel::Deny => Level::ERROR, |
| 339 | + LintLevel::Forbid => Level::ERROR, |
339 | 340 | }
|
340 | 341 | }
|
341 | 342 | }
|
@@ -450,17 +451,15 @@ pub fn check_im_a_teapot(
|
450 | 451 |
|
451 | 452 | let span = get_key_value_span(manifest.document(), &["package", "im-a-teapot"]).unwrap();
|
452 | 453 |
|
453 |
| - let message = level |
454 |
| - .title(IM_A_TEAPOT.desc) |
455 |
| - .snippet( |
| 454 | + let report = &[Group::with_title(level.primary_title(IM_A_TEAPOT.desc)) |
| 455 | + .element( |
456 | 456 | Snippet::source(manifest.contents())
|
457 |
| - .origin(&manifest_path) |
458 |
| - .annotation(level.span(span.key.start..span.value.end)) |
459 |
| - .fold(true), |
| 457 | + .path(&manifest_path) |
| 458 | + .annotation(AnnotationKind::Primary.span(span.key.start..span.value.end)), |
460 | 459 | )
|
461 |
| - .footer(Level::Note.title(&emitted_reason)); |
| 460 | + .element(Level::NOTE.message(&emitted_reason))]; |
462 | 461 |
|
463 |
| - gctx.shell().print_message(message)?; |
| 462 | + gctx.shell().print_report(report)?; |
464 | 463 | }
|
465 | 464 | Ok(())
|
466 | 465 | }
|
@@ -540,37 +539,36 @@ fn output_unknown_lints(
|
540 | 539 | panic!("could not find `cargo::{lint_name}` in `[lints]`, or `[workspace.lints]` ")
|
541 | 540 | };
|
542 | 541 |
|
543 |
| - let mut message = level.title(&title).snippet( |
| 542 | + let mut report = Vec::new(); |
| 543 | + let mut group = Group::with_title(level.clone().primary_title(title)).element( |
544 | 544 | Snippet::source(contents)
|
545 |
| - .origin(path) |
546 |
| - .annotation(Level::Error.span(span.key)) |
547 |
| - .fold(true), |
| 545 | + .path(path) |
| 546 | + .annotation(AnnotationKind::Primary.span(span.key)), |
548 | 547 | );
|
549 |
| - |
550 | 548 | if emitted_source.is_none() {
|
551 | 549 | emitted_source = Some(UNKNOWN_LINTS.emitted_source(lint_level, reason));
|
552 |
| - message = message.footer(Level::Note.title(emitted_source.as_ref().unwrap())); |
| 550 | + group = group.element(Level::NOTE.message(emitted_source.as_ref().unwrap())); |
553 | 551 | }
|
554 |
| - |
555 | 552 | if let Some(help) = help.as_ref() {
|
556 |
| - message = message.footer(Level::Help.title(help)); |
| 553 | + group = group.element(Level::HELP.message(help)); |
557 | 554 | }
|
| 555 | + report.push(group); |
558 | 556 |
|
559 | 557 | if let Some(inherit_span) = get_key_value_span(manifest.document(), &["lints", "workspace"])
|
560 | 558 | {
|
561 |
| - message = message.footer( |
562 |
| - Level::Note.title(&second_title).snippet( |
| 559 | + report.push( |
| 560 | + Group::with_title(Level::NOTE.secondary_title(second_title)).element( |
563 | 561 | Snippet::source(manifest.contents())
|
564 |
| - .origin(&manifest_path) |
| 562 | + .path(manifest_path) |
565 | 563 | .annotation(
|
566 |
| - Level::Note.span(inherit_span.key.start..inherit_span.value.end), |
567 |
| - ) |
568 |
| - .fold(true), |
| 564 | + AnnotationKind::Context |
| 565 | + .span(inherit_span.key.start..inherit_span.value.end), |
| 566 | + ), |
569 | 567 | ),
|
570 |
| - ) |
| 568 | + ); |
571 | 569 | }
|
572 | 570 |
|
573 |
| - gctx.shell().print_message(message)?; |
| 571 | + gctx.shell().print_report(&report)?; |
574 | 572 | }
|
575 | 573 |
|
576 | 574 | Ok(())
|
|
0 commit comments