Class: RuboCop::Cop::Registry
- Inherits:
-
Object
- Object
- RuboCop::Cop::Registry
- Defined in:
- lib/rubocop/cop/registry.rb
Overview
Registry that tracks all cops by their badge and department.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #contains_cop_matching?(names) ⇒ Boolean
- #cops ⇒ Object
- #department_missing?(badge, name) ⇒ Boolean
-
#departments ⇒ Array<Symbol>
List of departments for current cops.
- #each(&block) ⇒ Object
- #enabled(config, only, only_safe = false) ⇒ Object
- #enabled?(cop, config, only_safe) ⇒ Boolean
- #enlist(cop) ⇒ Object
- #find_by_cop_name(cop_name) ⇒ Class?
-
#initialize(cops = []) ⇒ Registry
constructor
A new instance of Registry.
- #length ⇒ Object
- #names ⇒ Object
- #print_warning(name, path) ⇒ Object
-
#qualified_cop_name(name, path, shall_warn = true) ⇒ String
Convert a user provided cop name into a properly namespaced name.
- #select(&block) ⇒ Object
- #sort! ⇒ Object
- #to_h ⇒ Hash{String => Array<Class>}
- #unqualified_cop_names ⇒ Object
-
#with_department(department) ⇒ Registry
Cops for that specific department.
-
#without_department(department) ⇒ Registry
Cops not for a specific department.
Constructor Details
#initialize(cops = []) ⇒ Registry
Returns a new instance of Registry.
25 26 27 28 29 30 31 |
# File 'lib/rubocop/cop/registry.rb', line 25 def initialize(cops = []) @registry = {} @departments = {} @cops_by_cop_name = Hash.new { |hash, key| hash[key] = [] } cops.each { |cop| enlist(cop) } end |
Instance Method Details
#==(other) ⇒ Object
160 161 162 |
# File 'lib/rubocop/cop/registry.rb', line 160 def ==(other) cops == other.cops end |
#contains_cop_matching?(names) ⇒ Boolean
58 59 60 |
# File 'lib/rubocop/cop/registry.rb', line 58 def contains_cop_matching?(names) cops.any? { |cop| cop.match?(names) } end |
#cops ⇒ Object
133 134 135 |
# File 'lib/rubocop/cop/registry.rb', line 133 def cops @registry.values end |
#department_missing?(badge, name) ⇒ Boolean
110 111 112 |
# File 'lib/rubocop/cop/registry.rb', line 110 def department_missing?(badge, name) !badge.qualified? && unqualified_cop_names.include?(name) end |
#departments ⇒ Array<Symbol>
Returns list of departments for current cops.
41 42 43 |
# File 'lib/rubocop/cop/registry.rb', line 41 def departments @departments.keys end |
#each(&block) ⇒ Object
174 175 176 |
# File 'lib/rubocop/cop/registry.rb', line 174 def each(&block) cops.each(&block) end |
#enabled(config, only, only_safe = false) ⇒ Object
141 142 143 144 145 |
# File 'lib/rubocop/cop/registry.rb', line 141 def enabled(config, only, only_safe = false) select do |cop| only.include?(cop.cop_name) || enabled?(cop, config, only_safe) end end |
#enabled?(cop, config, only_safe) ⇒ Boolean
147 148 149 150 151 152 153 154 |
# File 'lib/rubocop/cop/registry.rb', line 147 def enabled?(cop, config, only_safe) cfg = config.for_cop(cop) if only_safe cfg.fetch('Enabled') && cfg.fetch('Safe', true) else cfg.fetch('Enabled') end end |
#enlist(cop) ⇒ Object
33 34 35 36 37 38 |
# File 'lib/rubocop/cop/registry.rb', line 33 def enlist(cop) @registry[cop.badge] = cop @departments[cop.department] ||= [] @departments[cop.department] << cop @cops_by_cop_name[cop.cop_name] << cop end |
#find_by_cop_name(cop_name) ⇒ Class?
180 181 182 |
# File 'lib/rubocop/cop/registry.rb', line 180 def find_by_cop_name(cop_name) @cops_by_cop_name[cop_name].first end |
#length ⇒ Object
137 138 139 |
# File 'lib/rubocop/cop/registry.rb', line 137 def length @registry.size end |
#names ⇒ Object
156 157 158 |
# File 'lib/rubocop/cop/registry.rb', line 156 def names cops.map(&:cop_name) end |
#print_warning(name, path) ⇒ Object
114 115 116 117 118 119 120 |
# File 'lib/rubocop/cop/registry.rb', line 114 def print_warning(name, path) = "#{path}: Warning: no department given for #{name}." if path.end_with?('.rb') += ' Run `rubocop -a --only Migration/DepartmentName` to fix.' end warn end |
#qualified_cop_name(name, path, shall_warn = true) ⇒ String
Note:
Emits a warning if the provided name has an incorrect namespace
Convert a user provided cop name into a properly namespaced name
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/rubocop/cop/registry.rb', line 94 def qualified_cop_name(name, path, shall_warn = true) badge = Badge.parse(name) if shall_warn && department_missing?(badge, name) print_warning(name, path) end return name if registered?(badge) potential_badges = qualify_badge(badge) case potential_badges.size when 0 then name # No namespace found. Deal with it later in caller. when 1 then resolve_badge(badge, potential_badges.first, path) else raise AmbiguousCopName.new(badge, path, potential_badges) end end |
#select(&block) ⇒ Object
170 171 172 |
# File 'lib/rubocop/cop/registry.rb', line 170 def select(&block) cops.select(&block) end |
#sort! ⇒ Object
164 165 166 167 168 |
# File 'lib/rubocop/cop/registry.rb', line 164 def sort! @registry = Hash[@registry.sort_by { |badge, _| badge.cop_name }] self end |
#to_h ⇒ Hash{String => Array<Class>}
129 130 131 |
# File 'lib/rubocop/cop/registry.rb', line 129 def to_h @cops_by_cop_name end |
#unqualified_cop_names ⇒ Object
122 123 124 125 126 |
# File 'lib/rubocop/cop/registry.rb', line 122 def unqualified_cop_names @unqualified_cop_names ||= Set.new(@cops_by_cop_name.keys.map { |qn| File.basename(qn) }) << 'UnneededCopDisableDirective' end |
#with_department(department) ⇒ Registry
Returns Cops for that specific department.
46 47 48 |
# File 'lib/rubocop/cop/registry.rb', line 46 def with_department(department) with(@departments.fetch(department, [])) end |
#without_department(department) ⇒ Registry
Returns Cops not for a specific department.
51 52 53 54 55 56 |
# File 'lib/rubocop/cop/registry.rb', line 51 def without_department(department) without_department = @departments.dup without_department.delete(department) with(without_department.values.flatten) end |