Class: RuboCop::Cop::DevDoc::Migration::AvoidVagueColumnNames
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::DevDoc::Migration::AvoidVagueColumnNames
- Defined in:
- lib/rubocop/cop/dev_doc/migration/avoid_vague_column_names.rb
Overview
Avoid vague column names like status, group, or kind.
Rationale
Use more specific names that describe the domain context. A column
named status reveals nothing about what status it tracks; a column
named processing_status makes the intent obvious at the call site.
kind is the same shape — a content-free "what variety" label that
reads no better than type (which Rails reserves for STI).
Note about type
type is reserved by Rails for Single Table Inheritance (STI). Even
if STI is not in use, naming a column type is misleading and should
be avoided. This cop does not flag type by default — that is left
to the user's discretion via the VagueNames config.
Configure the list of vague names via VagueNames in .rubocop.yml.
Constant Summary collapse
- MSG =
'Avoid vague column name `%<name>s`. Use a more specific name that includes context.'.freeze
- COLUMN_METHODS =
i[ string integer float boolean datetime date text binary decimal json jsonb bigint primary_key ].freeze
Instance Method Summary collapse
Instance Method Details
#on_send(node) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/rubocop/cop/dev_doc/migration/avoid_vague_column_names.rb', line 50 def on_send(node) col_name_node = if node.method?(:add_column) node.arguments[1] elsif COLUMN_METHODS.include?(node.method_name) node.first_argument end return unless col_name_node&.sym_type? return unless vague_names.include?(col_name_node.value.to_s) add_offense(col_name_node, message: format(MSG, name: col_name_node.value)) end |