|
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