Skip to content

Commit

Permalink
Unrolled build for rust-lang#116611
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#116611 - mejrs:diagnostic_namespace, r=ehuss

Document `diagnostic_namespace` feature

This adds it to the rust unstable book.

FWIW: I couldn't find a way to serve the book locally (please send help), so I can't check that this renders correctly.

cc `@weiznich`
  • Loading branch information
rust-timer authored Oct 11, 2023
2 parents dcf89f4 + ba02a99 commit 54af23b
Showing 1 changed file with 84 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# `diagnostic_namespace`

The tracking issue for this feature is: [#111996]

[#111996]: https://github.com/rust-lang/rust/issues/111996

------------------------

The `diagnostic_namespace` feature permits customization of compilation errors.

## diagnostic::on_unimplemented

With [#114452] support for `diagnostic::on_unimplemented` was added.

When used on a trait declaration, the following options are available:

* `message` to customize the primary error message
* `note` to add a customized note message to an error message
* `label` to customize the label part of the error message

The attribute will hint to the compiler to use these in error messages:
```rust
// some library
#![feature(diagnostic_namespace)]

#[diagnostic::on_unimplemented(
message = "cannot insert element",
label = "cannot be put into a table",
note = "see <link> for more information about the Table api"
)]
pub trait Element {
// ...
}
```

```rust,compile_fail,E0277
# #![feature(diagnostic_namespace)]
#
# #[diagnostic::on_unimplemented(
# message = "cannot insert element",
# label = "cannot be put into a table",
# note = "see <link> for more information about the Table api"
# )]
# pub trait Element {
# // ...
# }
# struct Table;
# impl Table {
# fn insert<T: Element>(&self, element: T) {
# // ..
# }
# }
# fn main() {
# let table = Table;
# let element = ();
// user code
table.insert(element);
# }
```

```text
error[E0277]: cannot insert element
--> src/main.rs:24:18
|
24 | table.insert(element);
| ------ ^^^^^^^ cannot be put into a table
| |
| required by a bound introduced by this call
|
= help: the trait `Element` is not implemented for `<type>`
= note: see <link> for more information about the Table api
note: required by a bound in `Table::insert`
--> src/main.rs:15:18
|
15 | fn insert<T: Element>(&self, element: T) {
| ^^^^^^^ required by this bound in `Table::insert`
For more information about this error, try `rustc --explain E0277`.
```

See [RFC 3368] for more information.

[#114452]: https://github.com/rust-lang/rust/pull/114452
[RFC 3368]: https://github.com/rust-lang/rfcs/blob/master/text/3368-diagnostic-attribute-namespace.md

0 comments on commit 54af23b

Please sign in to comment.