@@ -50,6 +50,16 @@ def team
5050 @team ||= ::RuboCop ::Cop ::Team . new ( registry , config )
5151 end
5252
53+ def autocorrect_team
54+ @autocorrect_team ||=
55+ ::RuboCop ::Cop ::Team . new (
56+ registry ,
57+ config ,
58+ auto_correct : true ,
59+ stdin : true ,
60+ )
61+ end
62+
5363 def registry
5464 @registry ||= ::RuboCop ::Cop ::Registry . new ( RuboCop ::Cop ::Cop . all )
5565 end
@@ -62,8 +72,34 @@ def processed_source
6272 def new_message ( offence , line )
6373 path = line . patch . delta . new_file [ :path ]
6474 level = level ( offence . severity . name )
75+ message = message_text ( offence )
76+
77+ Message . new ( path , line , level , message , nil , runner . class )
78+ end
79+
80+ def message_text ( offence )
81+ message = offence . message
82+
83+ return message unless suggestion_cop_names . include? ( offence . cop_name )
84+ return message unless corrected
85+
86+ suggestion = corrected . lines [ offence . line - 1 ]
87+ "#{ message } \n \n ```suggestion\n #{ suggestion } ```"
88+ end
89+
90+ def corrected
91+ @corrected ||= begin
92+ autocorrect_team . inspect_file ( processed_source )
93+ corrector = RuboCop ::Cop ::Corrector . new ( processed_source . buffer )
94+ autocorrect_team . cops . each do |cop |
95+ corrector . corrections . concat ( cop . corrections )
96+ end
97+ corrector . rewrite unless corrector . corrections . empty?
98+ end
99+ end
65100
66- Message . new ( path , line , level , offence . message , nil , runner . class )
101+ def suggestion_cop_names
102+ @suggestion_cop_names ||= ENV [ 'RUBOCOP_SUGGESTION_COPS' ] . to_s . split ( ',' )
67103 end
68104
69105 def level ( severity )
0 commit comments