@@ -12,21 +12,21 @@ const TRUNCATION_TOTAL_TARGET: usize = 1000;
12
12
13
13
#[ derive( Debug , Deserialize , Serialize ) ]
14
14
struct LintJson {
15
- lint : String ,
16
- krate : String ,
17
- file_name : String ,
18
- byte_pos : ( u32 , u32 ) ,
19
- file_link : String ,
15
+ /// The lint name e.g. `clippy::bytes_nth`
16
+ name : String ,
17
+ /// The filename and line number e.g. `anyhow-1.0.86/src/error.rs:42`
18
+ file_line : String ,
19
+ file_url : String ,
20
20
rendered : String ,
21
21
}
22
22
23
23
impl LintJson {
24
24
fn key ( & self ) -> impl Ord + ' _ {
25
- ( self . lint . as_str ( ) , self . file_name . as_str ( ) , self . byte_pos )
25
+ ( self . name . as_str ( ) , self . file_line . as_str ( ) )
26
26
}
27
27
28
28
fn info_text ( & self , action : & str ) -> String {
29
- format ! ( "{action} `{}` in `{}` at {} " , self . lint , self . krate , self . file_link )
29
+ format ! ( "{action} `{}` at [ `{}`]({}) " , self . name , self . file_line , self . file_url )
30
30
}
31
31
}
32
32
@@ -36,13 +36,16 @@ pub(crate) fn output(clippy_warnings: Vec<ClippyWarning>) -> String {
36
36
. into_iter ( )
37
37
. map ( |warning| {
38
38
let span = warning. span ( ) ;
39
+ let file_name = span
40
+ . file_name
41
+ . strip_prefix ( "target/lintcheck/sources/" )
42
+ . unwrap_or ( & span. file_name ) ;
43
+ let file_line = format ! ( "{file_name}:{}" , span. line_start) ;
39
44
LintJson {
40
- file_name : span. file_name . clone ( ) ,
41
- byte_pos : ( span. byte_start , span. byte_end ) ,
42
- krate : warning. krate ,
43
- file_link : warning. url ,
44
- lint : warning. lint ,
45
- rendered : warning. diag . rendered . unwrap ( ) ,
45
+ name : warning. name ,
46
+ file_line,
47
+ file_url : warning. url ,
48
+ rendered : warning. diag . rendered . unwrap ( ) . trim ( ) . to_string ( ) ,
46
49
}
47
50
} )
48
51
. collect ( ) ;
@@ -63,7 +66,7 @@ pub(crate) fn diff(old_path: &Path, new_path: &Path, truncate: bool) {
63
66
let mut lint_warnings = vec ! [ ] ;
64
67
65
68
for ( name, changes) in & itertools:: merge_join_by ( old_warnings, new_warnings, |old, new| old. key ( ) . cmp ( & new. key ( ) ) )
66
- . chunk_by ( |change| change. as_ref ( ) . into_left ( ) . lint . to_string ( ) )
69
+ . chunk_by ( |change| change. as_ref ( ) . into_left ( ) . name . clone ( ) )
67
70
{
68
71
let mut added = Vec :: new ( ) ;
69
72
let mut removed = Vec :: new ( ) ;
@@ -162,7 +165,7 @@ fn print_warnings(title: &str, warnings: &[LintJson], truncate_after: usize) {
162
165
return ;
163
166
}
164
167
165
- print_h3 ( & warnings[ 0 ] . lint , title) ;
168
+ print_h3 ( & warnings[ 0 ] . name , title) ;
166
169
println ! ( ) ;
167
170
168
171
let warnings = truncate ( warnings, truncate_after) ;
@@ -171,7 +174,7 @@ fn print_warnings(title: &str, warnings: &[LintJson], truncate_after: usize) {
171
174
println ! ( "{}" , warning. info_text( title) ) ;
172
175
println ! ( ) ;
173
176
println ! ( "```" ) ;
174
- println ! ( "{}" , warning. rendered. trim_end ( ) ) ;
177
+ println ! ( "{}" , warning. rendered) ;
175
178
println ! ( "```" ) ;
176
179
println ! ( ) ;
177
180
}
@@ -182,7 +185,7 @@ fn print_changed_diff(changed: &[(LintJson, LintJson)], truncate_after: usize) {
182
185
return ;
183
186
}
184
187
185
- print_h3 ( & changed[ 0 ] . 0 . lint , "Changed" ) ;
188
+ print_h3 ( & changed[ 0 ] . 0 . name , "Changed" ) ;
186
189
println ! ( ) ;
187
190
188
191
let changed = truncate ( changed, truncate_after) ;
@@ -191,7 +194,7 @@ fn print_changed_diff(changed: &[(LintJson, LintJson)], truncate_after: usize) {
191
194
println ! ( "{}" , new. info_text( "Changed" ) ) ;
192
195
println ! ( ) ;
193
196
println ! ( "```diff" ) ;
194
- for change in diff:: lines ( old. rendered . trim_end ( ) , new. rendered . trim_end ( ) ) {
197
+ for change in diff:: lines ( & old. rendered , & new. rendered ) {
195
198
use diff:: Result :: { Both , Left , Right } ;
196
199
197
200
match change {
0 commit comments