Adapt todo! documentation to mention displaying custom values

Correct hidden trait in doc test
This commit is contained in:
James Haywood 2023-10-01 23:35:22 -04:00
parent e0d7ed1f45
commit f96cfb533a

View File

@ -719,7 +719,8 @@ macro_rules! unreachable {
/// The difference between `unimplemented!` and [`todo!`] is that while `todo!` /// The difference between `unimplemented!` and [`todo!`] is that while `todo!`
/// conveys an intent of implementing the functionality later and the message is "not yet /// conveys an intent of implementing the functionality later and the message is "not yet
/// implemented", `unimplemented!` makes no such claims. Its message is "not implemented". /// implemented", `unimplemented!` makes no such claims. Its message is "not implemented".
/// Also some IDEs will mark `todo!`s. ///
/// Also, some IDEs will mark `todo!`s.
/// ///
/// # Panics /// # Panics
/// ///
@ -805,50 +806,63 @@ macro_rules! unimplemented {
/// The difference between [`unimplemented!`] and `todo!` is that while `todo!` conveys /// The difference between [`unimplemented!`] and `todo!` is that while `todo!` conveys
/// an intent of implementing the functionality later and the message is "not yet /// an intent of implementing the functionality later and the message is "not yet
/// implemented", `unimplemented!` makes no such claims. Its message is "not implemented". /// implemented", `unimplemented!` makes no such claims. Its message is "not implemented".
/// Also some IDEs will mark `todo!`s. ///
/// Also, some IDEs will mark `todo!`s.
/// ///
/// # Panics /// # Panics
/// ///
/// This will always [`panic!`]. /// This will always [`panic!`] because `todo!` is just a shorthand for `panic!` with a
/// fixed, specific message.
/// ///
/// Like `panic!`, this macro has a second form for displaying custom values.
///
/// # Examples /// # Examples
/// ///
/// Here's an example of some in-progress code. We have a trait `Foo`: /// Here's an example of some in-progress code. We have a trait `Foo`:
/// ///
/// ``` /// ```
/// trait Foo { /// trait Foo {
/// fn bar(&self); /// fn bar(&self) -> u8;
/// fn baz(&self); /// fn baz(&self);
/// fn qux(&self) -> Result<u64, ()>;
/// } /// }
/// ``` /// ```
/// ///
/// We want to implement `Foo` on one of our types, but we also want to work on /// We want to implement `Foo` on one of our types, but we also want to work on
/// just `bar()` first. In order for our code to compile, we need to implement /// just `bar()` first. In order for our code to compile, we need to implement
/// `baz()`, so we can use `todo!`: /// `baz()` and `qux()`, so we can use `todo!`:
/// ///
/// ``` /// ```
/// # trait Foo { /// # trait Foo {
/// # fn bar(&self); /// # fn bar(&self) -> u8;
/// # fn baz(&self); /// # fn baz(&self);
/// # fn qux(&self) -> Result<u64, ()>;
/// # } /// # }
/// struct MyStruct; /// struct MyStruct;
/// ///
/// impl Foo for MyStruct { /// impl Foo for MyStruct {
/// fn bar(&self) { /// fn bar(&self) -> u8 {
/// // implementation goes here /// 1 + 1
/// } /// }
/// ///
/// fn baz(&self) { /// fn baz(&self) {
/// // let's not worry about implementing baz() for now /// // Let's not worry about implementing baz() for now
/// todo!(); /// todo!();
/// } /// }
///
/// fn qux(&self) -> Result<u64, ()> {
/// // We can add a message to todo! to display our omission.
/// // This will display:
/// // "thread 'main' panicked at 'not yet implemented: MyStruct is not yet quxable'".
/// todo!("MyStruct is not yet quxable");
/// }
/// } /// }
/// ///
/// fn main() { /// fn main() {
/// let s = MyStruct; /// let s = MyStruct;
/// s.bar(); /// s.bar();
/// ///
/// // we aren't even using baz(), so this is fine. /// // We aren't even using baz() or qux(), so this is fine.
/// } /// }
/// ``` /// ```
#[macro_export] #[macro_export]