1
Fork 0

Rollup merge of #66777 - GuillaumeGomez:tidy-err-codes, r=Mark-Simulacrum

Put back tidy check on error codes

I just realized that the tidy checks were not run anymore on the error code long explanations. This add it back.

cc @Dylan-DPC
r? @Mark-Simulacrum
This commit is contained in:
Tyler Mandry 2019-11-27 15:28:50 -06:00 committed by GitHub
commit 6a1fe67cac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 28 additions and 22 deletions

View file

@ -1,4 +1,5 @@
A constant item was initialized with something that is not a constant expression. A constant item was initialized with something that is not a constant
expression.
Erroneous code example: Erroneous code example:

View file

@ -25,4 +25,3 @@ fn main() {
// expected 0, found 1 // expected 0, found 1
} }
``` ```

View file

@ -26,4 +26,3 @@ left and may require reallocation. This requires ownership of the string
on the left. If something should be added to a string literal, move the on the left. If something should be added to a string literal, move the
literal to the heap by allocating it with `to_owned()` like in literal to the heap by allocating it with `to_owned()` like in
`"Your text".to_owned()`. `"Your text".to_owned()`.

View file

@ -41,4 +41,3 @@ trait Foo {
fn bar<T: Foo>(t: T) {} // ok! fn bar<T: Foo>(t: T) {} // ok!
``` ```

View file

@ -10,4 +10,3 @@ Please specify a valid "kind" value, from one of the following:
* static * static
* dylib * dylib
* framework * framework

View file

@ -21,4 +21,3 @@ The `#[unwind]` attribute should be used as follows:
NB. The default behavior here is "allowed", but this is unspecified NB. The default behavior here is "allowed", but this is unspecified
and likely to change in the future. and likely to change in the future.

View file

@ -5,4 +5,3 @@ Erroneous code example:
```compile_fail,E0635 ```compile_fail,E0635
#![feature(nonexistent_rust_feature)] // error: unknown feature #![feature(nonexistent_rust_feature)] // error: unknown feature
``` ```

View file

@ -7,4 +7,3 @@ Erroneous code example:
#![feature(rust1)] #![feature(rust1)]
#![feature(rust1)] // error: the feature `rust1` has already been declared #![feature(rust1)] // error: the feature `rust1` has already been declared
``` ```

View file

@ -16,4 +16,4 @@ let a = &(String::from("Hello world!")) as *const _; // Ok
let b = 0 as *const i32; // Ok let b = 0 as *const i32; // Ok
let c: *const i32 = 0 as *const _; // Ok let c: *const i32 = 0 as *const _; // Ok
``` ```

View file

@ -27,4 +27,3 @@ closure call itself by capturing a `&Fn()` object or `fn()` pointer
that refers to itself. That is permitting, since the closure would be that refers to itself. That is permitting, since the closure would be
invoking itself via a virtual call, and hence does not directly invoking itself via a virtual call, and hence does not directly
reference its own *type*. reference its own *type*.

View file

@ -1,4 +1,4 @@
`async fn`s are not yet supported in traits in Rust. `async fn`s are not yet supported in traits in Rust.
Erroneous code example: Erroneous code example:
@ -10,7 +10,8 @@ trait T {
} }
``` ```
`async fn`s return an `impl Future`, making the following two examples equivalent: `async fn`s return an `impl Future`, making the following two examples
equivalent:
```edition2018,ignore (example-of-desugaring-equivalence) ```edition2018,ignore (example-of-desugaring-equivalence)
async fn foo() -> User { async fn foo() -> User {
@ -23,8 +24,8 @@ fn foo(&self) -> impl Future<Output = User> + '_ {
``` ```
But when it comes to supporting this in traits, there are [a few implementation But when it comes to supporting this in traits, there are [a few implementation
issues][async-is-hard]. One of them is returning `impl Trait` in traits is not supported, issues][async-is-hard]. One of them is returning `impl Trait` in traits is not
as it would require [Generic Associated Types] to be supported: supported, as it would require [Generic Associated Types] to be supported:
```edition2018,ignore (example-of-desugaring-equivalence) ```edition2018,ignore (example-of-desugaring-equivalence)
impl MyDatabase { impl MyDatabase {
@ -40,13 +41,14 @@ impl MyDatabase {
} }
``` ```
Until these issues are resolved, you can use the [`async-trait` crate], allowing you to use Until these issues are resolved, you can use the [`async-trait` crate], allowing
`async fn` in traits by desugaring to "boxed futures" you to use `async fn` in traits by desugaring to "boxed futures"
(`Pin<Box<dyn Future + Send + 'async>>`). (`Pin<Box<dyn Future + Send + 'async>>`).
Note that using these trait methods will result in a heap allocation per-function-call. This is not Note that using these trait methods will result in a heap allocation
a significant cost for the vast majority of applications, but should be considered when deciding per-function-call. This is not a significant cost for the vast majority of
whether to use this functionality in the public API of a low-level function that is expected to be applications, but should be considered when deciding whether to use this
functionality in the public API of a low-level function that is expected to be
called millions of times a second. called millions of times a second.
You might be interested in visiting the [async book] for further information. You might be interested in visiting the [async book] for further information.

View file

@ -11,7 +11,7 @@ fn temp_address() {
To avoid the error, first bind the temporary to a named local variable. To avoid the error, first bind the temporary to a named local variable.
```ignore ```ignore (not yet implemented)
# #![feature(raw_ref_op)] # #![feature(raw_ref_op)]
fn temp_address() { fn temp_address() {
let val = 2; let val = 2;

View file

@ -141,17 +141,28 @@ pub fn check(path: &Path, bad: &mut bool) {
super::walk(path, &mut super::filter_dirs, &mut |entry, contents| { super::walk(path, &mut super::filter_dirs, &mut |entry, contents| {
let file = entry.path(); let file = entry.path();
let filename = file.file_name().unwrap().to_string_lossy(); let filename = file.file_name().unwrap().to_string_lossy();
let extensions = [".rs", ".py", ".js", ".sh", ".c", ".cpp", ".h"]; let extensions = [".rs", ".py", ".js", ".sh", ".c", ".cpp", ".h", ".md"];
if extensions.iter().all(|e| !filename.ends_with(e)) || if extensions.iter().all(|e| !filename.ends_with(e)) ||
filename.starts_with(".#") { filename.starts_with(".#") {
return return
} }
if filename.ends_with(".md") &&
file.parent()
.unwrap()
.file_name()
.unwrap()
.to_string_lossy() != "error_codes" {
// We don't want to check all ".md" files (almost of of them aren't compliant
// currently), just the long error code explanation ones.
return;
}
if contents.is_empty() { if contents.is_empty() {
tidy_error!(bad, "{}: empty file", file.display()); tidy_error!(bad, "{}: empty file", file.display());
} }
let max_columns = if filename == "error_codes.rs" { let max_columns = if filename == "error_codes.rs" || filename.ends_with(".md") {
ERROR_CODE_COLS ERROR_CODE_COLS
} else { } else {
COLS COLS