summaryrefslogtreecommitdiff
path: root/lib/irb/completion.rb
AgeCommit message (Collapse)Author
2022-11-17[ruby/irb] Fix https://github.com/ruby/irb/pull/295: Ignore JavaPatrick Plenefisch
package reference objects in JRuby https://github.com/ruby/irb/commit/84d030182d
2022-11-07[ruby/irb] Don't lazily retrieve gem specs for completionStan Lo
There are a few downsides of the current approach: 1. Because gem specs are lazily retrieved, this computation happens in every irb completion test case, which is not necessary. (In tests we don't cache the result of `retrieve_files_to_require_from_load_path`) 2. Gem::Specification.latest_specs is sensible to the content of LOAD_PATH. And when combined with 1, tests fail "randomly" if they try to mutate LOAD_PATH, even though the test subject it's something else. So by pre-computing and storing the gem paths in a constant, it guarantees that the computation only happens once and it doesn't get affected by test cases. One argument could be made against the change is that, it'll store unnecessary data for users that disable autocompletion. But the counter-arguments are: 1. Since autocompletion is enabled by default, this should not be the case for most users. 2. For users with autocompletion enabled, IRB already caches the result of `retrieve_files_to_require_from_load_path` in memory, which should have a similar size of GEM_SPECS. And we currently haven't received any report about problems caused by such memory consumption. https://github.com/ruby/irb/commit/c671d39020
2022-10-08[ruby/irb] Sort constant completion's candidatesst0012
https://github.com/ruby/irb/commit/ee9b33c817
2022-10-08[ruby/irb] Lazily evaluate candidates localsst0012
https://github.com/ruby/irb/commit/19a2fcbd87
2022-10-05[ruby/irb] Fixed sort of variables in completionImir Kiyamov
https://github.com/ruby/irb/commit/5842888255
2022-10-03[ruby/irb] Change to explicit method call in completion ↵osyo-manga
(https://github.com/ruby/irb/pull/369) Ensure that methods are called even when local variables are defined. see: https://github.com/ruby/irb/issues/368 https://github.com/ruby/irb/commit/c34d54b8bb
2022-09-21[ruby/irb] Handle non-String $LOAD_PATH values more carefullyst0012
In addition to String values, $LOAD_PATH can also take objects that respond_to the `to_path` method, like Pathname objects. So `irb` should be able to handle those objects too. And if $LOAD_PATH contains objects that can't be converted into String, `irb` should simply ignore it. https://github.com/ruby/irb/commit/b2f562176b
2021-10-13[ruby/irb] Ignore parenthesis during completionKaíque Kandy Koga
Rename method https://github.com/ruby/irb/commit/619aecb412
2021-09-24[ruby/irb] Revert "Show original string byte sequence to debug"aycabta
This reverts commit b42fe5937ab2a605a198ffb866db5ccda541568d. https://github.com/ruby/irb/commit/b22094a16f
2021-09-24[ruby/irb] Show original string byte sequence to debugaycabta
https://github.com/ruby/irb/commit/7a97bb0e56
2021-09-23Revert "Show original string byte sequence to debug"aycabta
This reverts commit b42fe5937ab2a605a198ffb866db5ccda541568d.
2021-09-23[ruby/irb] Ignore any encoding errors while symbol completionNobuyoshi Nakada
https://github.com/ruby/irb/commit/daa65cded1
2021-09-23Show original string byte sequence to debugaycabta
2021-09-21[ruby/irb] Sort shortest files in each load pathsNobuyoshi Nakada
There are two directories where csv*/**/*.rb exist, lib/ and test/, and depending on the order of tests, test/ may be placed before lib/. In that case, as "shortest" names were not sorted, csv/helper.rb will be the first candidate for "csv". https://github.com/ruby/irb/commit/2af7c6bf71
2021-09-21[ruby/irb] Check if Gem::Specification is definedNobuyoshi Nakada
https://github.com/ruby/irb/commit/005ade74dd
2021-09-11[ruby/irb] Ignore invalid 3 colons in completionaycabta
https://github.com/ruby/irb/commit/5e29e3e39c
2021-09-08[ruby/irb] Show lib name first because it's the most common use caseaycabta
https://github.com/ruby/irb/commit/74d635758b
2021-09-08[ruby/irb] Define absolute_path? by myself for backward compatibilityaycabta
https://github.com/ruby/irb/commit/d9c0dc043e
2021-09-08[ruby/irb] Use gem paths to complete "require"aycabta
https://github.com/ruby/irb/commit/c870b23455
2021-09-04[ruby/irb] Retrieve completed receiver that is a module or class correctlyaycabta
https://github.com/ruby/irb/commit/b2324727e1
2021-09-02[ruby/irb] Detect the variable class to show docaycabta
https://github.com/ruby/irb/commit/33b9bec954
2021-03-30[ruby/irb] Prevent the completion from crashing if rdoc is missingAleksandar Ivanov
There are cases where ruby is installed without rdoc and e.g. lib/irb/cmd/help.rb also handles the LoadError Here is how to replicate the issue: ``` $ docker run -it alpine:3.13.3 sh / # apk add ruby ruby-irb ruby-io-console / # irb irb(main):001:0> Class[TAB][TAB] ``` And you end up with something like: ``` irb(main):001:0> ClassTraceback (most recent call last): 34: from /usr/bin/irb:23:in `<main>' 33: from /usr/bin/irb:23:in `load' 32: from /usr/lib/ruby/gems/2.7.0/gems/irb-1.2.6/exe/irb:11:in `<top (required)>' 31: from /usr/lib/ruby/2.7.0/irb.rb:400:in `start' 30: from /usr/lib/ruby/2.7.0/irb.rb:471:in `run' 29: from /usr/lib/ruby/2.7.0/irb.rb:471:in `catch' 28: from /usr/lib/ruby/2.7.0/irb.rb:472:in `block in run' 27: from /usr/lib/ruby/2.7.0/irb.rb:537:in `eval_input' 26: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:150:in `each_top_level_statement' 25: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:150:in `catch' 24: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:151:in `block in each_top_level_statement' 23: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:151:in `loop' 22: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:154:in `block (2 levels) in each_top_level_statement' 21: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:182:in `lex' 20: from /usr/lib/ruby/2.7.0/irb.rb:518:in `block in eval_input' 19: from /usr/lib/ruby/2.7.0/irb.rb:704:in `signal_status' 18: from /usr/lib/ruby/2.7.0/irb.rb:519:in `block (2 levels) in eval_input' 17: from /usr/lib/ruby/2.7.0/irb/input-method.rb:294:in `gets' 16: from /usr/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline' 15: from /usr/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline' 14: from /usr/lib/ruby/2.7.0/reline.rb:175:in `readmultiline' 13: from /usr/lib/ruby/2.7.0/reline.rb:238:in `inner_readline' 12: from /usr/lib/ruby/2.7.0/reline.rb:238:in `loop' 11: from /usr/lib/ruby/2.7.0/reline.rb:239:in `block in inner_readline' 10: from /usr/lib/ruby/2.7.0/reline.rb:270:in `read_io' 9: from /usr/lib/ruby/2.7.0/reline.rb:270:in `loop' 8: from /usr/lib/ruby/2.7.0/reline.rb:311:in `block in read_io' 7: from /usr/lib/ruby/2.7.0/reline.rb:240:in `block (2 levels) in inner_readline' 6: from /usr/lib/ruby/2.7.0/reline.rb:240:in `each' 5: from /usr/lib/ruby/2.7.0/reline.rb:241:in `block (3 levels) in inner_readline' 4: from /usr/lib/ruby/2.7.0/reline/line_editor.rb:820:in `input_key' 3: from /usr/lib/ruby/2.7.0/reline/line_editor.rb:608:in `complete' 2: from /usr/lib/ruby/2.7.0/irb/completion.rb:269:in `block in <module:InputCompletor>' 1: from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require' /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- rdoc (LoadError) ``` https://github.com/ruby/irb/commit/a2d299c2ac
2021-03-25[ruby/irb] Cache completion files to requireaycabta
https://github.com/ruby/irb/commit/612ebcb311
2021-03-24[ruby/irb] Complete require and require_relativeaycabta
https://github.com/ruby/irb/commit/1c61178b4c
2021-01-08[ruby/irb] do not escape a predicate method for doc namespaceNobuhiro IMAI
* Fixes #88 https://github.com/ruby/irb/commit/d431a30af4
2020-11-05Revert "Prefer #send over #__send__ when it is clear there is no possible ↵NARUSE, Yui
conflict" This reverts commit 4dba0c1a8e3cc08664872e637099c4e7d58d24d3. Matz's comment is "send is not deprecated. __send__ is safer". But "Prefer #send over #__send__" is not reasonable.
2020-11-05Prefer #send over #__send__ when it is clear there is no possible conflictBenoit Daloze
* Reverts part of 3198e7abd70bd2af977f2bb6c967e9df8f91adb0. * If the rule is #send should be deprecated, that should be ruled by matz, there is no such rule currently and gems seem to prefer #send overwhelmingly.
2020-10-27Separate `send` into `public_send` and `__send__`Nobuyoshi Nakada
2020-08-18[ruby/irb] Get rid of loading readline unnecessarilyNobuyoshi Nakada
https://github.com/ruby/irb/commit/420e7d2270
2020-08-18[ruby/irb] Symbol.all_symbols was adopted by Ruby 1.8.0 or lateraycabta
https://github.com/ruby/irb/commit/71ba754e8e
2020-03-26[ruby/irb] Unnamed groups are not captured when named groups are usedNobuyoshi Nakada
https://github.com/ruby/irb/commit/0a641a69b0
2020-03-03Ignore incompatible convert of symbolsKoichi Sasada
2020-03-03Convert incompatible encoding symbol namesaycabta
2020-02-15[ruby/irb] fix reserved words and completion for themNobuhiro IMAI
https://github.com/ruby/irb/commit/6184b227ad
2020-02-12[ruby/irb] Check doc namespace correctlyaycabta
IRB::InputCompletor::PerfectMatchedProc crashes when doc not found because a variable name was incorrect. https://github.com/ruby/irb/commit/889fd4928f
2020-02-02[ruby/irb] Add a new easter egg: dancing rubyYusuke Endoh
https://github.com/ruby/irb/commit/e37dc7e58e
2020-01-20[ruby/irb] Fix compatibility with rails before 5.2Lars Kanis
Rails before 5.2 added Array#append as an alias to Array#<< , so that it expects only one argument. However ruby-2.5 added Array#append as an alias to Array#push which takes any number of arguments. If irb completion is used in `rails c` (for example "IO.<tab>") it fails with: irb/completion.rb:206:in `<<': wrong number of arguments (given 3, expected 1) (ArgumentError) Using Array#push instead of Array#append fixes compatibility. https://github.com/ruby/irb/commit/5b7bbf9c34
2019-11-28Fix regexp to complete complex literalaycabta
IRB completion logic always needed exponential notation for complex literal such as 3e6i but it's bug. I fixed to support complex literal without exponential notation such as 3i.
2019-11-28Remove two removed constantsaycabta
2019-07-20Some keywords, "true", "false", and "nil" should be treated as a variableaycabta
2019-07-19Fix showing doc of "nil.to_s", nil doesn't have #nameaycabta
2019-07-06Fix showing document of ClassName.method_name in IRBaycabta
In IRB, Time.new is split as "Time", ".", and "new". The receiver "Time" is processed by #class method but it means that "Time" changes to "Class". This commit fixes it.
2019-06-10irb: defer requiring rdoc to improve the start up timeNobuyoshi Nakada
2019-05-29Use IO.copy_streamaycabta
2019-05-29Check RUBY_YES_I_AM_NOT_A_NORMAL_USER env to access RubyVM docaycabta
2019-05-29IRB never show RubyVM's docaycabta
2019-05-29Encode completed strings corecctlyaycabta
2019-05-28Remove unused variable from IRB::InputCompletoraycabta
2019-05-27Fix number literal regexp of IRB completionaycabta
2019-05-27Use correctly RI output in IRB completionaycabta