RDoc::RubyGemsHook
(https://github.com/ruby/rdoc/pull/1244)
Rubygems creates an instance of RDoc::RubygemsHook, sets `doc.force = overwrite`, then calls `doc.generate` the document.
RDoc::RubygemsHook needs attribute `:force` just like RDoc::RubyGemsHook.
01bdbcdd4d
(https://github.com/ruby/rdoc/pull/1237)
* Clean up the duplicate definitions and unnecessary print styling
* Hides the navigation toggle when there's enough room to always display the navigation
* Update lib/rdoc/generator/template/darkfish/css/rdoc.css
---------
c6193bf1e2
Co-authored-by: Stan Lo <stan001212@gmail.com>
(https://github.com/ruby/rdoc/pull/1236)
Found this issue when I was debugging the navigation toggle. I noticed
it first in the chrome dev tools, but it was also reproducible on
an iPad Pro.
Symptom:
- On iPad Pro, the navigation section is hidden but there's enough
space to show it. Making the user have to click the hamburger
button to show it but it's not necessary to hide the navigation
section.
- On desktop, the navigation section is shown.
- On mobile, the navigation section is hidden until the hamburger
button is clicked.
Fix:
- The javascript code was matching 1024px instead of 1023px. The media
sections of the css was altering the layout on 1024px. So ipad got
the full desktop layout but the navigation section was hidden.
1794e59755
* Make it loose coupling between RubyGems and RDoc
\### Problems
There are following problems because of tight coupling between RubyGems and RDoc.
1. If there are braking changes in RDoc, RubyGems is also broken.
2. When we maintain RDoc, we have to change RubyGems.
The reason why they are happened is that RubyGems creates documents about a gem with installing it.
Note that RubyGems uses functions of RDoc to create documents.
Specifically,
- Creating documents is executed by `rubygems/lib/rubygems/rdoc.rb`.
- `::RDoc::RubygemsHook` which is defined by RDoc is called by the file.
\### Solution
RubyGems has the plugin system.
If a gem includes `rubygems_plugin.rb`, RubyGems loads it.
RubyGems executes a process defined in it while installing gems, uninstalling gems or other events.
We can use the system to solve the problems.
The root cause is RubyGems directly references the class of RDoc.
We can remove the root cause by making RDoc RubyGems plugin.
Alternatively `rubygems_plugin.rb` creates documents about gems.
\### FAQ
Q1. Do we need to change codes of RubyGems?
A.
No, we don't.
This change keeps compatibility of API used from RubyGems.
Q2. Is it better to delete existing codes related to RDoc in RubyGems?
No, it isn't.
If we change codes of RubyGems,
we can't keep a compatibility.
Example:
If we delete codes that uses `RDoc::RubygemsHook` in `rubygems/lib/rubygems/rdoc.rb`,
documentations are not created with old RDoc.
Q3. When can we delete `rubygems/lib/rubygems/rdoc.rb`?
A.
We can delete it when all users use RDoc including `rubygems_plugin`.
Next ruby version is 3.4.
If it includes the RDoc including `rubygems_plugin`,
we can delete `rubygems/lib/rubygems/rdoc.rb` after ruby 3.3 is EOL.
Q4. Is it a breaking change that Rubygems creates documents with
rubygems_plugin not RDoc::RubygemsHook?
A.
No, it isn't.
If we simply implement this approach,
we move the implementation from `rdoc/lib/rdoc/rubygems_hook.rb` to
`rubygems_plugin.rb`.
This way can be breaking change.
It seems to be fine that we just need to delete `rdoc/rubygems_hook.rb` but it doesn't work.
It generates multiple documents.
`rubygems/lib/rubygems/rdoc.rb` has the following code.
```
begin
require "rdoc/rubygems_hook"
# ...
rescue LoadError
end
```
This code ignores RDoc related processes when `rdoc/rubygems_hook` can't be required.
But, this 'require' is not failed.
This is because Ruby installs Rdoc as a default gem.
So, Rdoc installed as a default gem generates documents and one installed as a normal gem does it too.
If you think that this behavior is accectable,
we can just delete `rdoc/rubygems_hook.rb`.
What do you think about this approach?
In this change, we take another approach to solve the problem that creates multiple documents.
If `Gem.done_installing(&Gem::RDoc.method(:generation_hook))` in `rubygems/rdoc.rb` doesn't create documents,
we can solve the problem.
We have some options.
* We change `rubygems/rdoc.rb` and then don't execute `Gem.done_installing`.
(This is a change for RubyGems.)
* We change `rdoc/rubygems_hook.rb` and then make `generation_hook` a no-op method.
(This is a change for RDoc.)
We choose the latter to avoid changing for RubyGems.
\### Test
\#### Preparation
Install Rdoc which including our changes by executing `rake install`.
❯ rake install
We confirmed that Rdoc which including our changes was installed.
❯ gem list | grep rdoc
rdoc (6.6.0, default: 6.4.0)
\#### Check point
We tested to check compatibility.
How to chack the compatibility?
We tested creating same documents by our RDoc and old RDoc with latest RubyGems.
We used following versions to test.
```
❯ ruby -v
ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [arm64-darwin22]
❯ gem list | grep rdoc
rdoc (default: 6.4.0)
❯ ruby -I rubygems/lib rubygems/exe/gem --version
3.5.14
```
Here is a result of test with old RDoc.
We can see that the document is created correctlly with `Parsing...` and `Done installing...`.
```
❯ ruby -I rubygems/lib rubygems/exe/gem install pkg-config
Successfully installed pkg-config-1.5.6
Parsing documentation for pkg-config-1.5.6
Done installing documentation for pkg-config after 0 seconds
1 gem installed
```
Here is a result of test with our RDoc.
We can see that the document is created correctlly with `Parsing...` and `Done installing...`.
```
❯ ruby -I rubygems/lib rubygems/exe/gem install pkg-config
Successfully installed pkg-config-1.5.6
Parsing documentation for pkg-config-1.5.6
Done installing documentation for pkg-config after 0 seconds
1 gem installed
```
As you can see we got the same results, our RDoc keeps compatibility.
* rename a test file
* Revert "rename a test file"
This reverts commit 70a144bf3fb8f2cc653972e858b5fed3747765d7.
* revert a test class name
* exclude `TestRDocRubyGemsHook` at job of ruby-core
* When `rubygems_plugin.rb` is not found, `test_rdoc_rubygems_hook.rb` is skipped.
* remove unnecessary whitespace
* add comment
* Add support for the case that RDoc is installed as a default gem
* Fix problems
Co-authored-by: mterada1228 <49284339+mterada1228@users.noreply.github.com>
* Simplify
* removed unused blank lines and revert test
* for rerun tests
* add comment for rubygems_plugin.rb
---------
Co-authored-by: Sutou Kouhei <kou@clear-code.com>
Co-authored-by: Sutou Kouhei <kou@cozmixng.org>
If a positional argument is provided, the use_ipv6 keyword
option is ignored:
```ruby
Resolv.new([Resolv::DNS.new], use_ipv6: false)
```
Issue a warning in this case.
Currently, you have to pass a positional hash argument to set
the DNS config. However, after support for the use_ipv6 keyword
argument is removed, you will be able to pass either a positional
hash or keyword arguments. Code that was just specifying the
use_ipv6 keyword optional will still work correctly in that case.
5ff9dda991
Original issue: https://github.com/ruby/rdoc/issues/1128
The problem is caused by the `# :stopdoc:` directive in `bundled_gems.rb`,
which's scope covers the redefinition of `LoadError`.
Since the goal of `# :stopdoc:` is to hide the documentation of `Gem::BUNDLED_GEMS`,
we can use `# :nodoc:` on it instead.
(https://github.com/ruby/irb/pull/1046)
* Load history when starting a direct debug session
When starting a debug session directly with RUBY_DEBUG_IRB_CONSOLE=1 and
`require 'debug'; debugger`, IRB's history wasn't loaded. This commit ensures
history is loaded in this case by calling `load_history` when configuring IRB
for the debugger.
Fixesruby/irb#975
* Update test/irb/test_history.rb
* Update lib/irb/debug.rb
---------
7f851b5353
Co-authored-by: Stan Lo <stan001212@gmail.com>
(https://github.com/ruby/reline/pull/793)
* Undo and redo should restore indentation
Undo and redo should not perform auto indentation. It should not change the indentation. Instead, it should restore previous indentation.
* Rename ivar undoing(undoing or redoing) to restoring
6355a6e0b2