11use crate :: formatting:: FormattingError ;
22use 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 } ;
54use 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