about summary refs log tree commit diff
diff options
context:
space:
mode:
authorchrysn <chrysn@fsfe.org>2022-10-04 16:55:40 +0200
committerchrysn <chrysn@fsfe.org>2022-10-05 19:29:19 +0200
commit31bc385fa1d46d5affdab32b6e8a1a876b10443f (patch)
tree1b4ecb7318ebcbb472aa0b6d42200530e25be27f
parentead49f0beb7e36007aeed59f862f10f72b889c59 (diff)
downloadrust-31bc385fa1d46d5affdab32b6e8a1a876b10443f.tar.gz
rust-31bc385fa1d46d5affdab32b6e8a1a876b10443f.zip
rustdoc: Document effect of fundamental types
-rw-r--r--src/doc/rustdoc/src/unstable-features.md29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/doc/rustdoc/src/unstable-features.md b/src/doc/rustdoc/src/unstable-features.md
index 32b35007490..c6c05e30090 100644
--- a/src/doc/rustdoc/src/unstable-features.md
+++ b/src/doc/rustdoc/src/unstable-features.md
@@ -197,6 +197,35 @@ To do so, the `#[doc(keyword = "...")]` attribute is used. Example:
 mod empty_mod {}
 ```
 
+## Effects of other nightly features
+
+These nightly-only features are not primarily related to Rustdoc,
+but have convenient effects on the documentation produced.
+
+### `fundamental` types
+
+Annotating a type with `#[fundamental]` primarily influences coherence rules about generic types,
+i.e., they alter whether other crates can provide implementations for that type.
+The unstable book [links to further information][unstable-fundamental].
+
+[unstable-fundamental]: https://doc.rust-lang.org/unstable-book/language-features/fundamental.html
+
+For documentation, this has an additional side effect:
+If a method is implemented on `F<T>` (or `F<&T>`),
+where `F` is a fundamental type,
+then the method is not only documented at the page about `F`,
+but also on the page about `T`.
+In a sense, it makes the type transparent to Rustdoc.
+This is especially convenient for types that work as annotated pointers,
+such as `Pin<&mut T>`,
+as it ensures that methods only implemented through those annotated pointers
+can still be found with the type they act on.
+
+If the `fundamental` feature's effect on coherence is not intended,
+such a type can be marked as fundamental only for purposes of documentation
+by introducing a custom feature and
+limiting the use of `fundamental` to when documentation is built.
+
 ## Unstable command-line arguments
 
 These features are enabled by passing a command-line flag to Rustdoc, but the flags in question are