Class: RuboCop::Cop::Style::GlobalVars
- Defined in:
- lib/rubocop/cop/style/global_vars.rb
Overview
Looks for uses of global variables. Global variables introduce shared mutable state that makes code harder to test, debug, and reason about, since any part of the program can read or modify them.
It does not report offenses for built-in global variables. Built-in global variables are allowed by default. Additionally users can allow additional variables via the AllowedVariables option.
Note that backreferences like $1, $2, etc are not global variables.
Constant Summary collapse
- MSG =
'Do not introduce global variables.'- BUILT_IN_VARS =
built-in global variables and their English aliases www.zenspider.com/ruby/quickref.html
%w[ $: $LOAD_PATH $" $LOADED_FEATURES $0 $PROGRAM_NAME $! $ERROR_INFO $@ $ERROR_POSITION $; $FS $FIELD_SEPARATOR $, $OFS $OUTPUT_FIELD_SEPARATOR $/ $RS $INPUT_RECORD_SEPARATOR $\\ $ORS $OUTPUT_RECORD_SEPARATOR $. $NR $INPUT_LINE_NUMBER $_ $LAST_READ_LINE $> $DEFAULT_OUTPUT $< $DEFAULT_INPUT $$ $PID $PROCESS_ID $? $CHILD_STATUS $~ $LAST_MATCH_INFO $= $IGNORECASE $* $ARGV $& $MATCH $` $PREMATCH $' $POSTMATCH $+ $LAST_PAREN_MATCH $stdin $stdout $stderr $DEBUG $FILENAME $VERBOSE $SAFE $-0 $-a $-d $-F $-i $-I $-l $-p $-v $-w $CLASSPATH $JRUBY_VERSION $JRUBY_REVISION $ENV_JAVA ].map(&:to_sym)
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- #allowed_var?(global_var) ⇒ Boolean
- #check(node) ⇒ Object
- #on_gvar(node) ⇒ Object
- #on_gvasgn(node) ⇒ Object
- #user_vars ⇒ Object
Methods inherited from Base
#active_support_extensions_enabled?, #add_global_offense, #add_offense, #always_autocorrect?, autocorrect_incompatible_with, badge, #begin_investigation, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #contextual_autocorrect?, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, support_autocorrect?, support_multiple_source?, #target_gem_version, #target_rails_version, #target_ruby_version
Methods included from ExcludeLimit
cop_dir_for, #exclude_limit, read_limits
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
Constructor Details
This class inherits a constructor from RuboCop::Cop::Base
Instance Method Details
#allowed_var?(global_var) ⇒ Boolean
63 64 65 |
# File 'lib/rubocop/cop/style/global_vars.rb', line 63 def allowed_var?(global_var) BUILT_IN_VARS.include?(global_var) || user_vars.include?(global_var) end |
#check(node) ⇒ Object
75 76 77 |
# File 'lib/rubocop/cop/style/global_vars.rb', line 75 def check(node) add_offense(node.loc.name) unless allowed_var?(node.name) end |
#on_gvar(node) ⇒ Object
67 68 69 |
# File 'lib/rubocop/cop/style/global_vars.rb', line 67 def on_gvar(node) check(node) end |
#on_gvasgn(node) ⇒ Object
71 72 73 |
# File 'lib/rubocop/cop/style/global_vars.rb', line 71 def on_gvasgn(node) check(node) end |
#user_vars ⇒ Object
59 60 61 |
# File 'lib/rubocop/cop/style/global_vars.rb', line 59 def user_vars @user_vars ||= cop_config['AllowedVariables'].map(&:to_sym).freeze end |