-
Notifications
You must be signed in to change notification settings - Fork 141
Fix methods defined with invalid encoding are not displayed in completion #1101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
8fc5770 to
26a1d04
Compare
26a1d04 to
04d2cf5
Compare
lib/irb/completion.rb
Outdated
| i.encode(Encoding.default_external) | ||
| rescue Encoding::UndefinedConversionError | ||
| warn "Warning: Invalid encoding in method name '#{i}'. can't be converted to the locale #{Encoding.default_external}." unless @encoding_warning_shown | ||
| @encoding_warning_shown = true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed to ignore invalid encoding.
f8ed14a
| i.encode(Encoding.default_external) | ||
| rescue Encoding::UndefinedConversionError |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add this encode and rescue to IRB::TypeCompletor#completion_candidates?
It is the default completor when RUBY_VERSION >= '3.4'
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Applied the same fix to IRB::TypeCompletor#completion_candidates.
4897ccf
|
The CI failures don't seem related. |
tompng
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good 👍

Summary
This PR fixes a crash in IRB's method completion when a completion candidate contains characters that cannot be converted to
Encoding.default_external.(#900)Problem
Currently, if a method or variable name includes characters incompatible with
Encoding.default_external, triggering method completion results in anEncoding::UndefinedConversionError, which crashes the entire IRB session. This leads to a poor user experience, as the session terminates unexpectedly and work can be lost.Solution
Instead of allowing the exception to crash the session, this change catches the encoding error and prints a warning message to stderr. To avoid flooding the console, this warning is displayed only once per session upon the first occurrence of the error.
This approach is preferable because it informs the user about the underlying encoding issue without abruptly ending their workflow.
Behavior Change