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 inherited from Cop
Instance Attribute Summary
Attributes inherited from Cop
#config, #corrections, #offences, #processed_source
Instance Method Summary collapse
Methods inherited from Cop
#add_offence, all, #autocorrect?, #convention, #cop_config, cop_name, #cop_name, cop_type, #debug?, #ignore_node, inherited, #initialize, lint?, non_rails, rails?, style?, #support_autocorrect?, #warning
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 MSG_BOTH.format(english_msg, regular_msg, global_var) elsif regular.length > 0 MSG_REGULAR.format(regular_msg, global_var) elsif english.length > 0 MSG_ENGLISH.format(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 convention(node, :expression) if PREFERRED_VARS[global_var] end |