module RuboCop::Cop::UncommunicativeName
Common functionality shared by Uncommunicative cops
Constants
- CASE_MSG
- FORBIDDEN_MSG
- LENGTH_MSG
- NUM_MSG
Public Instance Methods
check(node, args)
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 12 def check(node, args) args.each do |arg| # Argument names might be "_" or prefixed with "_" to indicate they # are unused. Trim away this prefix and only analyse the basename. name_child = arg.children.first next if name_child.nil? full_name = name_child.to_s next if full_name == '_' name = full_name.gsub(/\A(_+)/, '') next if allowed_names.include?(name) length = full_name.size length += 1 if arg.restarg_type? length += 2 if arg.kwrestarg_type? range = arg_range(arg, length) issue_offenses(node, range, name) end end
Private Instance Methods
allow_nums()
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 95 def allow_nums cop_config['AllowNamesEndingInNumbers'] end
allowed_names()
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 87 def allowed_names cop_config['AllowedNames'] end
arg_range(arg, length)
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 78 def arg_range(arg, length) begin_pos = arg.source_range.begin_pos Parser::Source::Range.new(processed_source.buffer, begin_pos, begin_pos + length) end
case_offense(node, range)
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 45 def case_offense(node, range) add_offense(range, message: format(CASE_MSG, name_type: name_type(node))) end
ends_with_num?(name)
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 64 def ends_with_num?(name) /\d/.match?(name[-1]) end
forbidden_names()
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 91 def forbidden_names cop_config['ForbiddenNames'] end
forbidden_offense(node, range, name)
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 83 def forbidden_offense(node, range, name) add_offense(range, message: format(FORBIDDEN_MSG, name: name, name_type: name_type(node))) end
issue_offenses(node, range, name)
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 36 def issue_offenses(node, range, name) forbidden_offense(node, range, name) if forbidden_names.include?(name) case_offense(node, range) if uppercase?(name) length_offense(node, range) unless long_enough?(name) return if allow_nums num_offense(node, range) if ends_with_num?(name) end
length_offense(node, range)
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 68 def length_offense(node, range) message = format(LENGTH_MSG, name_type: name_type(node).capitalize, min: min_length) add_offense(range, message: message) end
long_enough?(name)
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 74 def long_enough?(name) name.size >= min_length end
min_length()
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 99 def min_length cop_config['MinNameLength'] end
name_type(node)
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 53 def name_type(node) @name_type ||= case node.type when :block then 'block parameter' when :def, :defs then 'method parameter' end end
num_offense(node, range)
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 60 def num_offense(node, range) add_offense(range, message: format(NUM_MSG, name_type: name_type(node))) end
uppercase?(name)
click to toggle source
# File lib/rubocop/cop/mixin/uncommunicative_name.rb, line 49 def uppercase?(name) /[[:upper:]]/.match?(name) end