diff --git a/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb b/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb index 9a6e04f..d1f3ecc 100644 --- a/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb +++ b/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb @@ -4,7 +4,7 @@ module DidYouMean class VariableNameChecker - attr_reader :name, :method_names, :lvar_names, :ivar_names, :cvar_names + attr_reader :name, :method_names, :gvar_names, :lvar_names, :ivar_names, :cvar_names NAMES_TO_EXCLUDE = { 'foo' => [:fork, :for] } NAMES_TO_EXCLUDE.default = [] @@ -67,6 +67,7 @@ class VariableNameChecker def initialize(exception) @name = exception.name.to_s.tr("@", "") + @gvar_names = defined?(Ractor) ? [] : global_variables.select {|g| g[/\$[A-Za-z]/] } @lvar_names = exception.respond_to?(:local_variables) ? exception.local_variables : [] receiver = exception.receiver @@ -78,7 +79,7 @@ def initialize(exception) def corrections @corrections ||= SpellChecker - .new(dictionary: (RB_RESERVED_WORDS + lvar_names + method_names + ivar_names + cvar_names)) + .new(dictionary: (RB_RESERVED_WORDS + gvar_names + lvar_names + method_names + ivar_names + cvar_names)) .correct(name).uniq - NAMES_TO_EXCLUDE[@name] end end diff --git a/test/spell_checking/test_variable_name_check.rb b/test/spell_checking/test_variable_name_check.rb index 0350b62..acde937 100644 --- a/test/spell_checking/test_variable_name_check.rb +++ b/test/spell_checking/test_variable_name_check.rb @@ -51,6 +51,15 @@ def test_corrections_include_method_from_module assert_match "Did you mean? from_module", get_message(error) end + def test_corrections_include_global_variable_name + return if defined?(Ractor) + + error = assert_raise(NameError) { stin } + + assert_correction :$stdin, error.corrections + assert_match "Did you mean? $stdin", get_message(error) + end + def test_corrections_include_local_variable_name if RUBY_ENGINE != "jruby" person = person = nil