YARD::Rustdoc
YARD plugin for documenting Magnus-based Rust gems. Supports writing class documentation on Struct and Enums, and method documentation on Struct and Enum methods.
Installation
Add this line to your application's Gemfile:
gem "yard-rustdoc"
Load the plugin through --plugin rustdoc
(e.g. in your project's .yardopts
).
See test/samples/example-ext
for full example.
Usage
-
Write YARD-compatible documentation in Rust documentation block (
///
or//!
), and tag them with@yard
. -
Generate Rustdoc as JSON:
cargo +nightly rustdoc -p path/to/extension -- \ -Zunstable-options --output-format json \ --document-private-items
nightly
is required because the JSON format isn't stable yet.
--document-private-items
is included so that you don't have to make everything in the crate public. -
Run YARD on Ruby files and the Rustdoc's JSON:
yard lib path/to/rustdoc.json
Writing documentation
YARD::Rustdoc only targets docblocks starting with @yard
so that you can
still write Rust-style docblocks for non-Ruby parts of your crate.
Examples
The class name will be extracted from Magnus' class =
.
/// @yard
/// High-level documentation for Foo::Bar.
#[magnus(class = "Foo::Bar")]
pub struct Bar { }
The @rename
tag renames the class to Foo::Baz
.
/// @yard
/// @rename Foo::Baz
pub struct InnerName { }
Defines Foo::Bar.new
-- class method because the first argument isn't self
.
impl Bar {
/// @yard
/// @return [Foo::Bar]
fn new() -> Self {}
}
Defines Foo::Bar#baz
and #qux
-- instance method because the method's first
argument is either &self
or rb_self
.
impl Bar {
/// @yard
fn baz(&self) {}
/// @yard
fn qux(rb_self: Value) {}
}
Specifies the method's name and params with @def
. This lets YARD know which params
are required, optional, keyword arguments, etc.
@def
must be a single, valid ruby method definition, without the end
.
impl Bar {
/// @yard
/// @def qux=(val = "")
/// @param val [Object]
fn write_qux(&self, val: Value) {}
}
This will be ignored as it's not tagged with @yard
.
impl Bar {
fn secret {}
}
Tips
YARD's syntax differs from what Rustdoc expects. Linters you might want to disable:
#![allow(rustdoc::broken_intra_doc_links)]
#![allow(rustdoc::invalid_html_tags)]
#![allow(rustdoc::bare_urls)]
Development
Run tests with rake
. The tests use a sample project located in
test/samples/example-ext
. To regenerate its json doc, run rake doc:rustdoc
from that directory. See the test project's Rakefile for details.