require_relative "./extend/formula_cop" require_relative "../extend/string" module RuboCop module Cop module FormulaAuditStrict # This cop audits `desc` in Formulae # # - Checks for existence of `desc` # - Checks if size of `desc` > 80 # - Checks if `desc` begins with an article # - Checks for correct usage of `command-line` in `desc` # - Checks if `desc` contains the formula name class Desc < FormulaCop def audit_formula(_node, _class_node, _parent_class_node, body) desc_call = find_node_method_by_name(body, :desc) if desc_call.nil? problem "Formula should have a desc (Description)." return end desc = parameters(desc_call).first desc_length = "#{@formula_name}: #{string_content(desc)}".length max_desc_length = 80 if desc_length > max_desc_length problem <<-EOS.undent Description is too long. "name: desc" should be less than #{max_desc_length} characters. Length is calculated as #{@formula_name} + desc. (currently #{desc_length}) EOS end # Check if command-line is wrongly used in formula's desc if match = regex_match_group(desc, /(command ?line)/i) c = match.to_s.chars.first problem "Description should use \"#{c}ommand-line\" instead of \"#{match}\"" end if match = regex_match_group(desc, /^(an?)\s/i) problem "Description shouldn't start with an indefinite article (#{match})" end if regex_match_group(desc, /^[a-z]/) problem "Description should start with a capital letter" end # Check if formula's name is used in formula's desc problem "Description shouldn't include the formula name" if regex_match_group(desc, /^#{@formula_name}\b/i) end end end end end