Commit Graph

166 Commits

Author SHA1 Message Date
Robin Krahl
1204e108cf
Send notification mail on build failure 2020-07-19 17:29:17 +02:00
Robin Krahl
646b36708b
Replace “interface” with “viewer” in description
Previously, we called rusty-man a command-line interface for rustdoc
documentation, but “viewer” is a more appropriate term.
2020-07-19 17:24:38 +02:00
Robin Krahl
5a6a8f43ce Add build scripts
This patch adds three build scripts for the sr.ht CI:
- archlinux.yml is the main build script.  It builds the project using
  the latest stable release from rustup and executes the tests, clippy
  and rustfmt.  The build also runs the reuse tool to check compliance
  with the reuse specification and verifies that the last commit is
  signed by me.
- archlinux-msrv.yml builds and tests the project on the MSRV, currently
  Rust 1.40.0.
2020-07-19 17:08:01 +02:00
Robin Krahl
c16d7f7d60 Add support for item members
Previously, we only supported documentation for modules and top-level
items.  With this patch, we also display the documentation for members
of an item, typically methods of a struct or trait.
2020-07-19 16:54:30 +02:00
Robin Krahl
ab1d655d39 Load module documentation
Previously, we could only print documentation for the items listed in
all.html.  With this patch, we also load the documentation for modules
(including crates) from the <module>/index.html file.  Note that items
are preferred over modules if there is documentation for both (e. g.
std::u8 is both a module and a primitive).
2020-07-19 16:52:31 +02:00
Robin Krahl
5d37789837 Ignore BrokenPipe error when piping to pager
If the pager terminates before we wrote everything to stdout, we get a
BrokenPipe error.  We just want to ignore this error but the print*!
macros panic.  Therefore we replace the calls to print*! with calls to
write*! and ignore the BrokenPipe error kind when handling the error.
2020-07-19 16:51:55 +02:00
Robin Krahl
02b3116ecd Adapt text output to terminal size
Previously, we wrapped all lines at 100 characters and just printed to
stdout.  With this patch, we use the pager crate to spawn a pager
(typically less) before printing the text.  Also, we try to use the
terminal size to determine the line length:  The default line length is
still 100 characters but can be reduced to fit the terminal.
2020-07-19 16:04:10 +02:00
Robin Krahl
fdabe11c4a Select default viewer based on TTY
Previosuly, the plain text viewer was the default option.  But for
interactive use, rich text output would be a more sensible default.
With this patch, we check whether we are called from a TTY to choose the
default viewer:  rich for interactive use, text for non-interactive use.
2020-07-19 16:00:26 +02:00
Robin Krahl
96df0924ba Add rich viewer
This patch adds a new viewer with rich text output using html2text’s
from_read_rich function.  We then use termion to format the generated
rich text.
2020-07-19 16:00:20 +02:00
Robin Krahl
7c228e5009 Add custom TextDecorator implementation
html2text’s PlainDecorator that is used to produce plain text prints all
link targets at the end of a block.  While this is generally useful,
listing all local links makes the output hard to read.  JavaScript and
Rust plaground links are generally not very useful in this context.

Therefore we implement a custom TextDecorator that only lists external
links (http or https) and ignores links to the Rust playground.
2020-07-19 15:44:49 +02:00
Robin Krahl
5ce0365c7f Add --viewer option and plain text viewer
This patch adds a new --viewer command line option that lets the user
select a viewer that displays the documentation.  It also adds a default
viewer implementation that uses html2text to generate plain text from
the HTML documentation.

html2text requires the ptr_cast feature and we use the Option::as_deref
method in the viewer implementation, so we have to update the minimum
supported Rust version to 1.40.
2020-07-19 15:44:21 +02:00
Robin Krahl
0309107bc3 Add default source directories
This patch adds typical Rust documentation locations to the sources:
- /usr/share/doc/rust{,-doc}/html for the standard library documentation
- ./target/doc for the documentation generated for the current crate

It also adds the --no-default-sources option that disables this
behavior.
2020-07-19 15:40:11 +02:00
Robin Krahl
6993df9cb6 Extract documentation from HTML files
This patch adds the parser module that uses kuchiki and html5ever to
parse the HTML documentation.

As kuchiki requires std::mem::MaybeUninit, we have to bump the minimum
supported Rust version to 1.36.
2020-07-19 15:40:10 +02:00
Robin Krahl
e6f299635e Implement basic doc item data structures
This patch adds the doc and source module with the basic data structures
for the documentation items:
- A Source loads the documentation items from e. g. the file system.
- The documentation items (modules, traits, etc.) are grouped by crates.

It also adds a simple Source implementation, DirSource, that reads the
data from a local directory.
2020-07-19 15:11:15 +02:00
Robin Krahl
11b6d27b8a Implement command-line interface using structopt
This patch adds the structopt dependency and implements a simple
command-line interface for rusty-man.
2020-07-19 14:11:00 +02:00
Robin Krahl
3967de8bd2 Initial project scaffolding
This patch contains the initial project scaffolding, based on the files
generated by cargo new.
2020-07-19 14:10:54 +02:00