diff --git a/lib/docs/filters/rdoc/clean_html.rb b/lib/docs/filters/rdoc/clean_html.rb
index ac836d1948..ff6d76604d 100644
--- a/lib/docs/filters/rdoc/clean_html.rb
+++ b/lib/docs/filters/rdoc/clean_html.rb
@@ -30,12 +30,24 @@ def other
node.remove_attribute 'id'
end
- # Convert "click to toggle source" into a link
+ # (RDoc prior to Ruby 3.4) Convert "click to toggle source" into a link
css('.method-click-advice').each do |node|
node.name = 'a'
node.content = 'Show source'
end
+ # (RDoc for Ruby 3.4+) Add a "Show source" link
+ css('.method-source-toggle').each do |node|
+ link_node = Nokogiri::XML::Node.new('a', doc.document)
+ link_node.content = 'Show source'
+ link_node['class'] = 'method-click-advice'
+
+ node.parent.parent.at_css('.method-heading').add_child(link_node)
+ end
+
+ # (RDoc for Ruby 3.4+) Remove the additional "Source" toggle from the page
+ css('.method-controls').remove
+
# Add class to differentiate Ruby code from C code
css('.method-source-code').each do |node|
node.parent.prepend_child(node)