class RuboCop::Cop::Style::PredicateName

def value? …
# good
def has_value? …
# bad
def even?(value)
# good
def is_even?(value) …
# bad
@example
This cop makes sure that predicates are named properly.

def expected_name(method_name, prefix)

def expected_name(method_name, prefix)
  new_name = if prefix_blacklist.include?(prefix)
               method_name.sub(prefix, '')
             else
               method_name.dup
             end
  new_name << '?' unless method_name.end_with?('?')
  new_name
end

def message(method_name, new_name)

def message(method_name, new_name)
  "Rename `#{method_name}` to `#{new_name}`."
end

def on_method(node, method_name, _args, _body)

def on_method(node, method_name, _args, _body)
  predicate_prefices.each do |prefix|
    method_name = method_name.to_s
    next unless method_name.start_with?(prefix)
    next if method_name == expected_name(method_name, prefix)
    add_offense(
      node,
      :name,
      message(method_name, expected_name(method_name, prefix))
    )
  end
end

def predicate_prefices

def predicate_prefices
  cop_config['NamePrefix']
end

def prefix_blacklist

def prefix_blacklist
  cop_config['NamePrefixBlacklist']
end