Class: RuboCop::Formatter::DisabledConfigFormatter
Overview
This formatter displays a YAML configuration file where all cops that detected any offenses are configured to not detect the offense.
Constant Summary
collapse
- HEADING =
['# This configuration was generated by',
'# `%s`',
"# on #{Time.now} using RuboCop version #{Version.version}.",
'# The point is for the user to remove these configuration records',
'# one by one as the offenses are removed from the code base.',
'# Note that changes in the inspected code, or installation of new',
'# versions of RuboCop, may require this file to be generated again.']
.join("\n")
- COPS =
Cop::Cop.all.group_by(&:cop_name)
Class Attribute Summary collapse
#options, #output
Instance Method Summary
collapse
-
#file_finished(file, offenses) ⇒ Object
-
#file_started(_file, _file_info) ⇒ Object
-
#finished(_inspected_files) ⇒ Object
-
#output_cop_comments(output, cfg, cop_name, offense_count) ⇒ Object
-
#output_cop_config(output, cfg, cop_name) ⇒ Object
-
#output_exclude_list(output, offending_files, cop_name) ⇒ Object
-
#output_offending_files(output, cfg, cop_name) ⇒ Object
#initialize, #started
Class Attribute Details
.config_to_allow_offenses ⇒ Object
Returns the value of attribute config_to_allow_offenses.
25
26
27
|
# File 'lib/rubocop/formatter/disabled_config_formatter.rb', line 25
def config_to_allow_offenses
@config_to_allow_offenses
end
|
.detected_styles ⇒ Object
Returns the value of attribute detected_styles.
25
26
27
|
# File 'lib/rubocop/formatter/disabled_config_formatter.rb', line 25
def detected_styles
@detected_styles
end
|
Instance Method Details
#file_finished(file, offenses) ⇒ Object
36
37
38
39
40
41
42
43
44
|
# File 'lib/rubocop/formatter/disabled_config_formatter.rb', line 36
def file_finished(file, offenses)
@cops_with_offenses ||= Hash.new(0)
@files_with_offenses ||= {}
offenses.each do |o|
@cops_with_offenses[o.cop_name] += 1
@files_with_offenses[o.cop_name] ||= []
@files_with_offenses[o.cop_name] << file
end
end
|
#file_started(_file, _file_info) ⇒ Object
28
29
30
31
32
33
34
|
# File 'lib/rubocop/formatter/disabled_config_formatter.rb', line 28
def file_started(_file, _file_info)
@exclude_limit_option = @options[:exclude_limit]
@exclude_limit = (
@exclude_limit_option ||
RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS).to_i
@show_offense_counts = !@options[:no_offense_counts]
end
|
#finished(_inspected_files) ⇒ Object
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/rubocop/formatter/disabled_config_formatter.rb', line 46
def finished(_inspected_files)
command = 'rubocop --auto-gen-config'
if @exclude_limit_option
command += format(' --exclude-limit %d', @exclude_limit_option.to_i)
end
output.puts HEADING % command
@cops_with_offenses.delete('Syntax')
@cops_with_offenses.sort.each do |cop_name, offense_count|
output.puts
cfg = self.class.config_to_allow_offenses[cop_name] || {}
(output, cfg, cop_name, offense_count)
output_cop_config(output, cfg, cop_name)
end
puts "Created #{output.path}."
puts "Run `rubocop --config #{output.path}`, or add `inherit_from: " \
"#{output.path}` in a .rubocop.yml file."
end
|
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/rubocop/formatter/disabled_config_formatter.rb', line 68
def (output, cfg, cop_name, offense_count)
output.puts "# Offense count: #{offense_count}" if @show_offense_counts
if COPS[cop_name] && COPS[cop_name].first.new.support_autocorrect?
output.puts '# Cop supports --auto-correct.'
end
default_cfg = RuboCop::ConfigLoader.default_configuration[cop_name]
return unless default_cfg
params = default_cfg.keys -
%w(Description StyleGuide Reference Enabled Exclude) -
cfg.keys
return if params.empty?
output.puts "# Configuration parameters: #{params.join(', ')}."
params.each do |param|
value = default_cfg[param]
if value.is_a?(Array)
next if value.empty?
output.puts "# #{param}: #{value.join(', ')}"
end
end
end
|
#output_cop_config(output, cfg, cop_name) ⇒ Object
93
94
95
96
97
98
99
100
|
# File 'lib/rubocop/formatter/disabled_config_formatter.rb', line 93
def output_cop_config(output, cfg, cop_name)
output.puts "#{cop_name}:"
cfg.each do |key, value|
value = value[0] if value.is_a?(Array)
output.puts " #{key}: #{value}"
end
output_offending_files(output, cfg, cop_name)
end
|
#output_exclude_list(output, offending_files, cop_name) ⇒ Object
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
# File 'lib/rubocop/formatter/disabled_config_formatter.rb', line 113
def output_exclude_list(output, offending_files, cop_name)
require 'pathname'
parent = Pathname.new(Dir.pwd)
config = ConfigStore.new.for(parent)
cfg = config[cop_name] || {}
excludes = ((cfg['Exclude'] || []) + offending_files).uniq
output.puts ' Exclude:'
excludes.each do |file|
file_path = Pathname.new(file)
begin
relative = file_path.relative_path_from(parent)
output.puts " - '#{relative}'"
rescue ArgumentError
output.puts " - '#{file}'"
end
end
rescue LoadError
output.puts ' Enabled: false'
end
|
#output_offending_files(output, cfg, cop_name) ⇒ Object
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/rubocop/formatter/disabled_config_formatter.rb', line 102
def output_offending_files(output, cfg, cop_name)
return unless cfg.empty?
offending_files = @files_with_offenses[cop_name].uniq.sort
if offending_files.count > @exclude_limit
output.puts ' Enabled: false'
else
output_exclude_list(output, offending_files, cop_name)
end
end
|