This minor release introduces a new interactive viewer, tui. It also
adds syntax highlighting for code in the documentation and support for
Rust 1.47.0.
In the last patch, we added the termion dependency for the tui viewer.
With this patch, we remove the ansi_term, atty and terminal_size
dependencies and use termion instead.
With this patch, we replace cursive’s default ncurses backend with the
termion backend. This has multiple reasons:
- The ncurses backend has safety issues, see [0].
- ncurses requires a pre-installed library and a C compiler, introducing
additional build dependencies. Termion is implemented in Rust only.
- ncurses does not work on Windows, while termion works in all terminals
that support ANSI escape codes.
Per default, the termion backend does not buffer the output which may
cause flickering [1]. Therefore, we also use the
cursive_buffered_backend that buffers the output and fixes the
flickering problem.
[0] https://github.com/gyscos/cursive/issues/488
[1] https://github.com/gyscos/cursive/issues/142
We’ve moved the HtmlView into a separate crate, so we can replace our
own HtmlView with cursive_markup::MarkupView. We only have to implement
a custom Renderer that applies the syntax highlighting to code snippets.
This patch adds a new viewer, tui, that provides an interactive
interface using cursive. This viewer makes it possible to follow links
to other documentation items and to open external links in a web
browser.
This patch updates the html2text dependency to v0.2.1. This release
fixed the handling of preformatted blocks, allowing us to add syntax
highlighting for code blocks in the next patch.
This patch replaces the direct text formatting with ansi_term with the
text-style crate. This also allows us to directly convert the syntect
annotations to styled strings.
This patch replaces the crossterm dependency with ansi_term, atty and
terminal_size. This allows us for an easier integration with the
text_style crate in an upcoming patch, and it reduces the total number
of dependencies from 166 to 160.
This means that we drop support for non-ANSI terminals, but as this only
affects old versions of cmd.exe/PowerShell, we don’t care about it.
This patch adds the merge dependency to automatically merge the
command-line arguments and the settings from the configuration file.
This means that we no longer have to manually maintain the Args::merge
function.
This patch refactors the test suite:
- Instead of always generating the documentation with the available
rustdoc version, we now store generated documentation for all
supported rustdoc versions in the test/html directory.
- Instead of using one snapshot per test case, we now use one snapshot
per test case and rustdoc version.
Previosuly, we used the u8 values for the ItemType variants used in the
search index as the discriminant. But as the ID used in the search
index is an implementation detail of the index parser, this patch moves
the mapping to the index module.
This patch adds an integration test suite using the insta crate for
snapshot testing. The test suite is tested for all supported Rust
versions and should always succeed for the MSRV (currently 1.40.0) and
the current stable Rust version.
However there are some minor changes in the configuration format between
Rust versions, so tests that don’t work on all supported Rust versions
are marked with the ignore attribute. But even the ignored tests should
work on the stable Rust release.
With this patch, we load defaults for the command-line arguments from
the configuration file located in the user configuration directory
according to the XDG Base Directory Specification.
This patch uses syntect to add syntax highlighting for code snippets in
the rich text output. Currently, this only applies to the examples
printed with the -e/--examples option.
This patch release adds support for documentation generated with Rust
1.45.0 and fixes some minor bugs in the documentation parser. It also
adds the documentation downloaded using rustup to the default sources.
This patch release adds basic logging output and a new `-e`/`--examples`
option to extract only the examples from the documentation. It also
fixes a bug when displaying the documentation for a function.
This patch adds some basic info log messages to make it easier to debug
incompatible rustdoc output. To show the messages, run rusty-man with
the environment variable RUST_LOG=info.
With this patch, we replace the termion dependency with crossterm. This
should make it possible to compile and run rusty-man on other platforms
than Unix.
Previously, our ItemType enum only had three values: Module, Item and
Member. With this patch we import the ItemType variants from librustdoc
(see html/item_type.rs) for better compatibility and easier parsing.
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.
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.
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.