From 73f1a0e2a822e1b88b0237b007fad046bc144c85 Mon Sep 17 00:00:00 2001 From: spamguy Date: Mon, 13 Jul 2026 13:43:49 -0700 Subject: [PATCH 1/2] Implement Tokio scraper. --- assets/stylesheets/application.css.scss | 1 + assets/stylesheets/pages/_tokio.scss | 10 +++++++ lib/docs/filters/tokio/clean_html.rb | 32 ++++++++++++++++++++++ lib/docs/filters/tokio/entries.rb | 35 ++++++++++++++++++++++++ lib/docs/scrapers/tokio.rb | 31 +++++++++++++++++++++ public/icons/docs/tokio/16.png | Bin 0 -> 1126 bytes public/icons/docs/tokio/16@2x.png | Bin 0 -> 833 bytes public/icons/docs/tokio/SOURCE | 1 + 8 files changed, 110 insertions(+) create mode 100644 assets/stylesheets/pages/_tokio.scss create mode 100644 lib/docs/filters/tokio/clean_html.rb create mode 100644 lib/docs/filters/tokio/entries.rb create mode 100644 lib/docs/scrapers/tokio.rb create mode 100644 public/icons/docs/tokio/16.png create mode 100644 public/icons/docs/tokio/16@2x.png create mode 100644 public/icons/docs/tokio/SOURCE diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index 5dd9f6c99b..13630eea4b 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -126,6 +126,7 @@ @use 'pages/tcl_tk'; @use 'pages/tensorflow'; @use 'pages/terraform'; +@use 'pages/tokio'; @use 'pages/typescript'; @use 'pages/underscore'; @use 'pages/vue'; diff --git a/assets/stylesheets/pages/_tokio.scss b/assets/stylesheets/pages/_tokio.scss new file mode 100644 index 0000000000..6c9f50dba4 --- /dev/null +++ b/assets/stylesheets/pages/_tokio.scss @@ -0,0 +1,10 @@ +@use 'pages/simple'; + +._tokio { + @extend %simple; + + .stab { + @extend %note; + @extend %note-orange; + } +} diff --git a/lib/docs/filters/tokio/clean_html.rb b/lib/docs/filters/tokio/clean_html.rb new file mode 100644 index 0000000000..d7a88fde0f --- /dev/null +++ b/lib/docs/filters/tokio/clean_html.rb @@ -0,0 +1,32 @@ +module Docs + class Tokio + class CleanHtmlFilter < Filter + def call + css('.main-heading h1').each do |node| + node.parent.replace(node) + end + + doc.css( + 'a.doc-anchor', + 'a.anchor', + 'a.src', + 'button#copy-path', + '.rustdoc-breadcrumbs', + '.sub-heading' + ).remove + + doc.css('pre.rust').each do |code| + code['data-language'] = 'rust' + end + + # Get rid of toggles hiding useful info. + doc.css('details').each do |node| + node.name = 'div' + end + doc.css('summary.hideme').remove + + doc + end + end + end +end diff --git a/lib/docs/filters/tokio/entries.rb b/lib/docs/filters/tokio/entries.rb new file mode 100644 index 0000000000..3d7814f7b7 --- /dev/null +++ b/lib/docs/filters/tokio/entries.rb @@ -0,0 +1,35 @@ +module Docs + class Tokio + class EntriesFilter < Docs::EntriesFilter + def get_name + namespace = at_css('.rustdoc-breadcrumbs').inner_text + header = at_css('h1 > span').inner_text + "#{namespace}::#{header}" + end + + def get_type + header = at_css('h1').inner_text + + if header.include?('Attribute Macro') + 'Attribute Macros' + elsif header.include?('Macro') + 'Macros' + elsif header.include?('Module') + 'Modules' + elsif header.include?('Struct') + 'Structs' + elsif header.include?('Function') + 'Functions' + elsif header.include?('Enum') + 'Enums' + elsif header.include?('Trait') + 'Traits' + elsif header.include?('Type') + 'Types' + else + 'Other' + end + end + end + end +end diff --git a/lib/docs/scrapers/tokio.rb b/lib/docs/scrapers/tokio.rb new file mode 100644 index 0000000000..6cf56d019e --- /dev/null +++ b/lib/docs/scrapers/tokio.rb @@ -0,0 +1,31 @@ +module Docs + class Tokio < UrlScraper + self.name = 'Tokio' + self.type = 'tokio' + self.root_path = 'index.html' + self.links = { + home: 'https://tokio.rs/', + code: 'https://github.com/tokio-rs/tokio' + } + + html_filters.push 'tokio/entries', 'tokio/clean_html' + + options[:rate_limit] = 50 + options[:container] = 'section.content' + options[:skip_patterns] = [/\/next|\/\d\.\d*/, /rabbitmq\//] + options[:attribution] = <<-HTML + MIT License
+ Copyright © Tokio Contributors + HTML + + version do + self.release = '1.53.1' + self.base_url = "https://docs.rs/tokio/#{self.release}/tokio/" + end + + def get_latest_version(opts) + doc = fetch_doc('https://docs.rs/tokio/latest/tokio/index.html', opts) + doc.at_css('h2 > .version').content.strip + end + end +end diff --git a/public/icons/docs/tokio/16.png b/public/icons/docs/tokio/16.png new file mode 100644 index 0000000000000000000000000000000000000000..830b4021d5e255f004b5843aa5b8124d1cd5bb7c GIT binary patch literal 1126 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|7Ntgbruq6Z zXaU(A3~Y=-49p-UK*+!-#lQ+?GcbfPO2gT4j2ciiOh7e;3_y}W5Qx*-GZ|Q*>MMXW z2uJ}j&?E?5US6)3nU`IhoLG>mmtT|)6lY$*h_G(~6I{Q*0%imosE)zo%xWhf#aZAH zSIVqsvERGyU$H2-vFNJL45ua8x7ey(0(N`6wRUPW#JNEd@mg%yyQn_7~nP?4LH zS8P>bs{~eI1!RMS^_3LBN=mYAl_Got6rA&mQWebf4D<|??6?#Z6l{u8(yW49+@RWl zJX@uVl9B=|eSMI3%8fxD(KocTwA42+(l;{F1**_3uFNY*tkBIXR)!b?Gsh*hIJqdZ zpd>RtPXT0ZVp4u-iLH_n$Rap^xU(cP4PjGWG1OZ?59)(t^bPe4^s#9JdKT_J6kQdG z1rSYOUqLLh0U2fGUzC{&bS}tIc7`@!<59#AjEak-A-MLkx3){7#DR~JYD-V< zUGpT!WupN1^ra%-M5=#s=zZi}laidgUS!%nhMN%@U9Cc%Csdu@{rg{hZ}G((+pn{q z&n!PzZ9m!T=tRDqQ*Gp4`J7m`WZr^2zPEw%n?5|Xe$xEGf%zx%-Nw@70vEGIb|)Fk zR5s@X^xt%_VZXL*ZKObJq1Vz$j4^$iC89N)c~3dVx}Qs8Kc>D&*J4uZ>6Px{eTA)# zKXx~lCdpoxXkfmh{B~3AiJS6)Es;8h5B|9ux-W^f_(t=2sr}KN`;X1P*Yez8>g9~w z+57);rc3bZ<{iD6_pw3Mp(-5ojGA1a0| z6wm!|;Mqqe|2-m;B@WtcD{Ssz*4TMW?3FLiLZ8y5a{k%gQ~OG7Kk)QCI#4AlyP_@q zTRQ8#{nc-eu>J|RIxTt5`LEwMhq+Hg0_V%;AM^JKKY6|$l$|_X{an^LB{Ts5Q!RPj literal 0 HcmV?d00001 diff --git a/public/icons/docs/tokio/16@2x.png b/public/icons/docs/tokio/16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f593b8573d35e0c303d0ff3326b77af416a91a24 GIT binary patch literal 833 zcmV-H1HSx;P)rjPwGtZ2pbAy|yRvHUSMUxi!fKDGmi=p-f^bkAa}L3akdzWf;uJcGZm zx<+>zr)%VEF@>jQ>_8$sj59Uzl~`FLKZm_p+?ft6zzuAu$X8b*g9-eJc|&s`5%0xM z71>c7Ev*C2Jwd<2LrUU=AkC`fT0-9C#7;+ull1u>Qddxx4`%*WS+QV+_k; zj7uL1LI{V_MLtlH{er8wmP0y7A!-_NX4d&futfe5JfF)uNCZZ44?9~hyA&BPHna%% ze;Phav6pLbuO!{4hLwiu3sFx|biPp(p*Qg@{>AZxnOPx9;Xa|h6n}@W(ws{3OMHYM zO1Nq%9v#GiaYZxQt%=B^MpLODz+C*HQYF#F9gGij1ejeTJB#;9>uN*tE-scM*2L8} z3u27-%j*!rI=qArnrswBZ5}qaah1m)Y1qS&7~@nEAZ^q`FN82Fi#4+dZBl&i=Tzi% zO=$<0u`P=`WAlIuc)Lc|)Ru3-Z+K!D4!ox5fa)$~(~n8O&oa8>ew%l21+O>g$29+% zZItnU(9eOla0#89^Q^J|9{bub{ch?t?20iy$hy(f#~#HOvT^(em;SQlsZg!u00000 LNkvXXu0mjfwv&Gz literal 0 HcmV?d00001 diff --git a/public/icons/docs/tokio/SOURCE b/public/icons/docs/tokio/SOURCE new file mode 100644 index 0000000000..e09093716f --- /dev/null +++ b/public/icons/docs/tokio/SOURCE @@ -0,0 +1 @@ +https://upload.wikimedia.org/wikipedia/commons/6/60/Tokio_logo.svg From 035b4a1c4302fa474776de61d20e303034ff985b Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Mon, 27 Jul 2026 20:57:04 +0200 Subject: [PATCH 2/2] tokio: add news entry --- assets/javascripts/news.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index 5f3d303b5d..ab349bc8a5 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,4 +1,8 @@ [ + [ + "2026-07-27", + "New documentation: Tokio" + ], [ "2026-07-09", "New documentation: MapLibre GL JS"