Migration/AddLimitToTextColumns raises error when column defined in constant
The following discussion from !36198 (merged) should be addressed:
-
@iroussos started a discussion: (+2 comments) @mwoolf minor: do you mind also using
SOURCE_TABLE_NAME
andPARTITIONED_TABLE_NAME
here?
Currently, the Migration/AddLimitToTextColumns
cop raises an error when using add_column
with a :text
field and the column name is defined in a constant. e.g.
class AddNewTextField < ActiveRecord::Migration[6.0]
DOWNTIME = false
TABLE_NAME = 'table_name'
def up
with_lock_retries do
add_column(TABLE_NAME, :target_type, :text)
end
end
end
The error is caused on this line: rubocop/cop/migration/add_limit_to_text_columns.rb:95
as a result of assuming that the node is a string, and not a constant.
Stacktrace
Expand
An error occurred while Migration/AddLimitToTextColumns cop was inspecting /Users/maxwoolf/Documents/gitlab/gitlab-development-kit/gitlab/db/post_migrate/20200810100921_add_target_type_to_audit_event.rb:12:2.
undefined method `value' for s(:const, nil, :SOURCE_TABLE_NAME):RuboCop::AST::Node
/Users/maxwoolf/Documents/gitlab/gitlab-development-kit/gitlab/rubocop/cop/migration/add_limit_to_text_columns.rb:95:in `table_and_attribute_name'
/Users/maxwoolf/Documents/gitlab/gitlab-development-kit/gitlab/rubocop/cop/migration/add_limit_to_text_columns.rb:33:in `block in on_def'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:555:in `block in visit_descendants'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:187:in `block in each_child_node'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:184:in `each'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:184:in `each_child_node'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:554:in `visit_descendants'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:556:in `block in visit_descendants'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:187:in `block in each_child_node'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:184:in `each'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:184:in `each_child_node'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:554:in `visit_descendants'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:556:in `block in visit_descendants'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:187:in `block in each_child_node'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:184:in `each'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:184:in `each_child_node'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:554:in `visit_descendants'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/node.rb:219:in `each_descendant'
/Users/maxwoolf/Documents/gitlab/gitlab-development-kit/gitlab/rubocop/cop/migration/add_limit_to_text_columns.rb:29:in `on_def'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/commissioner.rb:57:in `block (2 levels) in trigger_responding_cops'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/commissioner.rb:136:in `with_cop_error_handling'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/commissioner.rb:56:in `block in trigger_responding_cops'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/commissioner.rb:55:in `each'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/commissioner.rb:55:in `trigger_responding_cops'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/commissioner.rb:32:in `block (2 levels) in <class:Commissioner>'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/traversal.rb:57:in `block in on_begin'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/traversal.rb:57:in `each'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/traversal.rb:57:in `on_begin'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/commissioner.rb:33:in `block (2 levels) in <class:Commissioner>'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/traversal.rb:99:in `on_class'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/commissioner.rb:33:in `block (2 levels) in <class:Commissioner>'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/ast/traversal.rb:14:in `walk'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/commissioner.rb:44:in `investigate'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/team.rb:124:in `investigate'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/team.rb:112:in `offenses'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cop/team.rb:44:in `inspect_file'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:296:in `inspect_file'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:244:in `block in do_inspection_loop'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:276:in `block in iterate_until_no_changes'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:269:in `loop'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:269:in `iterate_until_no_changes'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:240:in `do_inspection_loop'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:119:in `block in file_offenses'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:143:in `file_offense_cache'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:117:in `file_offenses'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:108:in `process_file'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:87:in `block in each_inspected_file'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:86:in `each'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:86:in `reduce'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:86:in `each_inspected_file'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:73:in `inspect_files'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/runner.rb:39:in `run'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cli/command/execute_runner.rb:21:in `execute_runner'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cli/command/execute_runner.rb:13:in `run'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cli/command.rb:10:in `run'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cli/environment.rb:17:in `run'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cli.rb:65:in `run_command'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cli.rb:72:in `execute_runners'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/lib/rubocop/cli.rb:41:in `run'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/exe/rubocop:13:in `block in <top (required)>'
/Users/maxwoolf/.rvm/rubies/ruby-2.6.6/lib/ruby/2.6.0/benchmark.rb:308:in `realtime'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/gems/rubocop-0.82.0/exe/rubocop:12:in `<top (required)>'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/bin/rubocop:23:in `load'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/bin/rubocop:23:in `<main>'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/bin/ruby_executable_hooks:24:in `eval'
/Users/maxwoolf/.rvm/gems/ruby-2.6.6/bin/ruby_executable_hooks:24:in `<main>'
Edited by Max Woolf