|  | 
| 5 | 5 | //! | 
| 6 | 6 | //! [annotate_snippets]: https://docs.rs/crate/annotate-snippets/ | 
| 7 | 7 | 
 | 
| 8 |  | -use annotate_snippets::{Annotation, AnnotationType, Renderer, Slice, Snippet, SourceAnnotation}; | 
|  | 8 | +use annotate_snippets::{Renderer, Snippet}; | 
| 9 | 9 | use rustc_data_structures::sync::Lrc; | 
| 10 | 10 | use rustc_error_messages::FluentArgs; | 
| 11 | 11 | use rustc_span::source_map::SourceMap; | 
| @@ -83,15 +83,17 @@ fn source_string(file: Lrc<SourceFile>, line: &Line) -> String { | 
| 83 | 83 |     file.get_line(line.line_index - 1).map(|a| a.to_string()).unwrap_or_default() | 
| 84 | 84 | } | 
| 85 | 85 | 
 | 
| 86 |  | -/// Maps `diagnostic::Level` to `snippet::AnnotationType` | 
| 87 |  | -fn annotation_type_for_level(level: Level) -> AnnotationType { | 
|  | 86 | +/// Maps [`crate::Level`] to [`annotate_snippets::Level`] | 
|  | 87 | +fn annotation_level_for_level(level: Level) -> annotate_snippets::Level { | 
| 88 | 88 |     match level { | 
| 89 |  | -        Level::Bug | Level::Fatal | Level::Error | Level::DelayedBug => AnnotationType::Error, | 
| 90 |  | -        Level::ForceWarning(_) | Level::Warning => AnnotationType::Warning, | 
| 91 |  | -        Level::Note | Level::OnceNote => AnnotationType::Note, | 
| 92 |  | -        Level::Help | Level::OnceHelp => AnnotationType::Help, | 
|  | 89 | +        Level::Bug | Level::Fatal | Level::Error | Level::DelayedBug => { | 
|  | 90 | +            annotate_snippets::Level::Error | 
|  | 91 | +        } | 
|  | 92 | +        Level::ForceWarning(_) | Level::Warning => annotate_snippets::Level::Warning, | 
|  | 93 | +        Level::Note | Level::OnceNote => annotate_snippets::Level::Note, | 
|  | 94 | +        Level::Help | Level::OnceHelp => annotate_snippets::Level::Help, | 
| 93 | 95 |         // FIXME(#59346): Not sure how to map this level | 
| 94 |  | -        Level::FailureNote => AnnotationType::Error, | 
|  | 96 | +        Level::FailureNote => annotate_snippets::Level::Error, | 
| 95 | 97 |         Level::Allow => panic!("Should not call with Allow"), | 
| 96 | 98 |         Level::Expect(_) => panic!("Should not call with Expect"), | 
| 97 | 99 |     } | 
| @@ -180,42 +182,29 @@ impl AnnotateSnippetEmitter { | 
| 180 | 182 |                 }) | 
| 181 | 183 |                 .collect(); | 
| 182 | 184 |             let code = code.map(|code| code.to_string()); | 
| 183 |  | -            let snippet = Snippet { | 
| 184 |  | -                title: Some(Annotation { | 
| 185 |  | -                    label: Some(&message), | 
| 186 |  | -                    id: code.as_deref(), | 
| 187 |  | -                    annotation_type: annotation_type_for_level(*level), | 
| 188 |  | -                }), | 
| 189 |  | -                footer: vec![], | 
| 190 |  | -                slices: annotated_files | 
| 191 |  | -                    .iter() | 
| 192 |  | -                    .map(|(file_name, source, line_index, annotations)| { | 
| 193 |  | -                        Slice { | 
| 194 |  | -                            source, | 
| 195 |  | -                            line_start: *line_index, | 
| 196 |  | -                            origin: Some(file_name), | 
| 197 |  | -                            // FIXME(#59346): Not really sure when `fold` should be true or false | 
| 198 |  | -                            fold: false, | 
| 199 |  | -                            annotations: annotations | 
| 200 |  | -                                .iter() | 
| 201 |  | -                                .map(|annotation| SourceAnnotation { | 
| 202 |  | -                                    range: ( | 
| 203 |  | -                                        annotation.start_col.display, | 
| 204 |  | -                                        annotation.end_col.display, | 
| 205 |  | -                                    ), | 
| 206 |  | -                                    label: annotation.label.as_deref().unwrap_or_default(), | 
| 207 |  | -                                    annotation_type: annotation_type_for_level(*level), | 
| 208 |  | -                                }) | 
| 209 |  | -                                .collect(), | 
| 210 |  | -                        } | 
| 211 |  | -                    }) | 
| 212 |  | -                    .collect(), | 
| 213 |  | -            }; | 
|  | 185 | + | 
|  | 186 | +            let snippets = | 
|  | 187 | +                annotated_files.iter().map(|(file_name, source, line_index, annotations)| { | 
|  | 188 | +                    Snippet::source(source) | 
|  | 189 | +                        .line_start(*line_index) | 
|  | 190 | +                        .origin(file_name) | 
|  | 191 | +                        // FIXME(#59346): Not really sure when `fold` should be true or false | 
|  | 192 | +                        .fold(false) | 
|  | 193 | +                        .annotations(annotations.iter().map(|annotation| { | 
|  | 194 | +                            annotation_level_for_level(*level) | 
|  | 195 | +                                .span(annotation.start_col.display..annotation.end_col.display) | 
|  | 196 | +                                .label(annotation.label.as_deref().unwrap_or_default()) | 
|  | 197 | +                        })) | 
|  | 198 | +                }); | 
|  | 199 | +            let mut message = annotation_level_for_level(*level).title(&message).snippets(snippets); | 
|  | 200 | +            if let Some(code) = code.as_deref() { | 
|  | 201 | +                message = message.id(code) | 
|  | 202 | +            } | 
| 214 | 203 |             // FIXME(#59346): Figure out if we can _always_ print to stderr or not. | 
| 215 | 204 |             // `emitter.rs` has the `Destination` enum that lists various possible output | 
| 216 | 205 |             // destinations. | 
| 217 | 206 |             let renderer = Renderer::plain().anonymized_line_numbers(self.ui_testing); | 
| 218 |  | -            eprintln!("{}", renderer.render(snippet)) | 
|  | 207 | +            eprintln!("{}", renderer.render(message)) | 
| 219 | 208 |         } | 
| 220 | 209 |         // FIXME(#59346): Is it ok to return None if there's no source_map? | 
| 221 | 210 |     } | 
|  | 
0 commit comments