Class: RuboCop::Cop::Style::SpecialGlobalVars
- Defined in:
- lib/rubocop/cop/style/special_global_vars.rb
Overview
This cop looks for uses of Perl-style global variables.
Constant Summary collapse
- MSG_BOTH =
'Prefer `%s` from the English library, or `%s` over `%s`.'
- MSG_ENGLISH =
'Prefer `%s` from the English library over `%s`.'
- MSG_REGULAR =
'Prefer `%s` over `%s`.'
- PREFERRED_VARS =
{ '$:' => ['$LOAD_PATH'], '$"' => ['$LOADED_FEATURES'], '$0' => ['$PROGRAM_NAME'], '$!' => ['$ERROR_INFO'], '$@' => ['$ERROR_POSITION'], '$;' => ['$FIELD_SEPARATOR', '$FS'], '$,' => ['$OUTPUT_FIELD_SEPARATOR', '$OFS'], '$/' => ['$INPUT_RECORD_SEPARATOR', '$RS'], '$\\' => ['$OUTPUT_RECORD_SEPARATOR', '$ORS'], '$.' => ['$INPUT_LINE_NUMBER', '$NR'], '$_' => ['$LAST_READ_LINE'], '$>' => ['$DEFAULT_OUTPUT'], '$<' => ['$DEFAULT_INPUT'], '$$' => ['$PROCESS_ID', '$PID'], '$?' => ['$CHILD_STATUS'], '$~' => ['$LAST_MATCH_INFO'], '$=' => ['$IGNORECASE'], '$*' => ['$ARGV', 'ARGV'], '$&' => ['$MATCH'], '$`' => ['$PREMATCH'], '$\'' => ['$POSTMATCH'], '$+' => ['$LAST_PAREN_MATCH'] }.symbolize_keys
- NON_ENGLISH_VARS =
Anything not in this set is provided by the English library.
Set.new([ '$LOAD_PATH', '$LOADED_FEATURES', '$PROGRAM_NAME', 'ARGV' ])
Constants included from Util
Util::ASGN_NODES, Util::EQUALS_ASGN_NODES, Util::OPERATOR_METHODS, Util::PROC_NEW_NODE, Util::SHORTHAND_ASGN_NODES
Instance Attribute Summary
Attributes inherited from Cop
#config, #corrections, #offenses, #processed_source
Instance Method Summary collapse
Methods inherited from Cop
#add_offense, all, #autocorrect?, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, cop_name_with_namespace, cop_type, #debug?, #display_cop_names?, inherited, #initialize, #join_force?, lint?, non_rails, qualified_cop_name, rails?, #relevant_file?, #support_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
begins_its_line?, block_length, command?, comment_line?, const_name, first_part_of_call_chain, lambda?, lambda_or_proc?, line_range, numeric_range_size, on_node, operator?, parentheses?, proc?, range_with_surrounding_space, source_range, strip_quotes, within_node?
Methods included from PathUtil
issue_deprecation_warning, match_path?, relative_path
Constructor Details
This class inherits a constructor from RuboCop::Cop::Cop
Instance Method Details
#autocorrect(node) ⇒ Object
73 74 75 76 77 78 79 80 |
# File 'lib/rubocop/cop/style/special_global_vars.rb', line 73 def autocorrect(node) @corrections << lambda do |corrector| global_var, = *node corrector.replace(node.loc.expression, PREFERRED_VARS[global_var].first) end end |
#message(node) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/rubocop/cop/style/special_global_vars.rb', line 51 def (node) global_var, = *node regular, english = PREFERRED_VARS[global_var].partition do |var| NON_ENGLISH_VARS.include? var end # For now, we assume that lists are 2 items or less. Easy grammar! regular_msg = regular.join('` or `') english_msg = english.join('` or `') if regular.length > 0 && english.length > 0 format(MSG_BOTH, english_msg, regular_msg, global_var) elsif regular.length > 0 format(MSG_REGULAR, regular_msg, global_var) elsif english.length > 0 format(MSG_ENGLISH, english_msg, global_var) else fail 'Bug in SpecialGlobalVars - global var w/o preferred vars!' end end |
#on_gvar(node) ⇒ Object
45 46 47 48 49 |
# File 'lib/rubocop/cop/style/special_global_vars.rb', line 45 def on_gvar(node) global_var, = *node add_offense(node, :expression) if PREFERRED_VARS[global_var] end |