Crates.io | clean-macro-docs |
lib.rs | clean-macro-docs |
version | 1.0.2 |
source | src |
created_at | 2021-02-17 12:55:21.85252 |
updated_at | 2021-02-18 12:46:29.405147 |
description | Hide internal rules when documenting `macro_rules!` macros. |
homepage | |
repository | https://github.com/BenjyWiener/clean-macro-docs |
max_upload_size | |
id | 356452 |
size | 31,351 |
macro_rules!
DocsWhen generating docs for macro_rules!
macros, rustdoc
will include every
rule, including internal rules that are only supposed to be called from within
your macro. The clean_docs
attribute will hide your internal rules from
rustdoc
.
#[macro_export]
macro_rules! messy {
(@impl $e:expr) => {
format!("{}", $e)
};
($e:expr) => {
messy!(@impl $e)
};
}
#[clean_docs]
#[macro_export]
macro_rules! clean {
(@impl $e:expr) => {
format!("{}", $e)
};
($e:expr) => {
clean!(@impl $e)
};
}
would be documented as
macro_rules! messy {
(@impl $e:expr) => { ... };
($e:expr) => { ... };
}
macro_rules! clean {
($e:expr) => { ... };
}
The clean!
macro above is transformed into
#[macro_export]
macro_rules! clean {
($e:expr) => {
$crate::__clean!(@impl $e)
};
}
#[macro_export]
macro_rules! __clean {
(@impl $e:expr) => {
format!("{}", $e)
};
}
macro_rules! clean {
(@impl $e:expr) => {
format!("{}", $e)
};
($e:expr) => {
clean!(@impl $e)
};
}
The last, non-macro_export
ed macro is there becuase Rust doesn't allow
macro-expanded macros to be invoked by absolute path (i.e. $crate::__clean
).
The solution is to shadow the macro_export
ed macro with a local version
that doesn't use absolute paths.
You can use these optional arguments to configure clean_macro
.
#[clean_docs(impl = "#internal", internal = "__internal_mac")]
impl
A string representing the "flag" at the begining of an internal rule. Defaults to "@"
.
#[clean_docs(impl = "#internal")]
#[macro_export]
macro_rules! mac {
(#internal $e:expr) => {
format!("{}", $e)
};
($e:expr) => {
mac!(#internal $e)
};
}
internal
A string representing the identifier to use for the internal version of your macro.
By default clean_docs
prepends __
(two underscores) to the main macro's identifier.
#[clean_docs(internal = "__internal_mac")]
#[macro_export]
macro_rules! mac {
(@impl $e:expr) => {
format!("{}", $e)
};
($e:expr) => {
mac!(@impl $e)
};
}