diff --git a/src/doc/book/macros.md b/src/doc/book/macros.md index e4a900a2b1a4f..7c8b74bd6495d 100644 --- a/src/doc/book/macros.md +++ b/src/doc/book/macros.md @@ -611,8 +611,7 @@ to define a single macro that works both inside and outside our library. The function name will expand to either `::increment` or `::mylib::increment`. To keep this system simple and correct, `#[macro_use] extern crate ...` may -only appear at the root of your crate, not inside `mod`. This ensures that -`$crate` is a single identifier. +only appear at the root of your crate, not inside `mod`. # The deep end diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs index 04676c0c9c8b4..628bf654873c7 100644 --- a/src/libcore/fmt/mod.rs +++ b/src/libcore/fmt/mod.rs @@ -356,7 +356,7 @@ impl<'a> Display for Arguments<'a> { /// `Debug` implementations using either `derive` or the debug builder API /// on `Formatter` support pretty printing using the alternate flag: `{:#?}`. /// -/// [debug_struct]: ../std/fmt/struct.Formatter.html#method.debug_struct +/// [debug_struct]: ../../std/fmt/struct.Formatter.html#method.debug_struct /// /// Pretty printing with `#?`: /// diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index f063c6b06767b..526c2e1c6b523 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -604,7 +604,7 @@ pub trait Iterator { /// iterators, returning a tuple where the first element comes from the /// first iterator, and the second element comes from the second iterator. /// - /// In other words, it zips two iterators together, into a single one. 🤐 + /// In other words, it zips two iterators together, into a single one. /// /// When either iterator returns `None`, all further calls to `next()` /// will return `None`. diff --git a/src/librustc_metadata/loader.rs b/src/librustc_metadata/loader.rs index 81788e08c7ef2..d1892b87f8bcc 100644 --- a/src/librustc_metadata/loader.rs +++ b/src/librustc_metadata/loader.rs @@ -664,6 +664,8 @@ impl<'a> Context<'a> { } sess.err(&format!("extern location for {} is of an unknown type: {}", self.crate_name, loc.display())); + sess.help(&format!("file name should be lib*.rlib or {}*.{}", + dylibname.0, dylibname.1)); false }); diff --git a/src/librustc_resolve/diagnostics.rs b/src/librustc_resolve/diagnostics.rs index 85fb5d9ccf9e5..04ab3fe70e9fa 100644 --- a/src/librustc_resolve/diagnostics.rs +++ b/src/librustc_resolve/diagnostics.rs @@ -274,7 +274,7 @@ https://doc.rust-lang.org/reference.html#use-declarations "##, E0401: r##" -Inner functions do not inherit type parameters from the functions they are +Inner items do not inherit type parameters from the functions they are embedded in. For example, this will not compile: ``` @@ -286,12 +286,32 @@ fn foo(x: T) { } ``` -Functions inside functions are basically just like top-level functions, except -that they can only be called from the function they are in. +nor will this: + +``` +fn foo(x: T) { + type MaybeT = Option; + // ... +} +``` + +or this: + +``` +fn foo(x: T) { + struct Foo { + x: T, + } + // ... +} +``` + +Items inside functions are basically just like top-level items, except +that they can only be used from the function they are in. There are a couple of solutions for this. -You can use a closure: +If the item is a function, you may use a closure: ``` fn foo(x: T) { @@ -302,7 +322,7 @@ fn foo(x: T) { } ``` -or copy over the parameters: +For a generic item, you can copy over the parameters: ``` fn foo(x: T) { @@ -313,6 +333,12 @@ fn foo(x: T) { } ``` +``` +fn foo(x: T) { + type MaybeT = Option; +} +``` + Be sure to copy over any bounds as well: ``` @@ -324,10 +350,18 @@ fn foo(x: T) { } ``` +``` +fn foo(x: T) { + struct Foo { + x: T, + } +} +``` + This may require additional type hints in the function body. -In case the function is in an `impl`, defining a private helper function might -be easier: +In case the item is a function inside an `impl`, defining a private helper +function might be easier: ``` impl Foo {