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).
❌
t.string :status
add_column :orders, :group, :integer
t.integer :kind
✔️
t.string :processing_status
add_column :orders, :user_group, :integer
t.integer :membership_kind
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 |