Skip to content

Rollup of 6 pull requests #30619

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Dec 30, 2015
3 changes: 1 addition & 2 deletions src/doc/book/macros.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion src/libcore/fmt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 `#?`:
///
Expand Down
2 changes: 1 addition & 1 deletion src/libcore/iter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Expand Down
2 changes: 2 additions & 0 deletions src/librustc_metadata/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
});

Expand Down
48 changes: 41 additions & 7 deletions src/librustc_resolve/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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:

```
Expand All @@ -286,12 +286,32 @@ fn foo<T>(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<T>(x: T) {
type MaybeT = Option<T>;
// ...
}
```

or this:

```
fn foo<T>(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<T>(x: T) {
Expand All @@ -302,7 +322,7 @@ fn foo<T>(x: T) {
}
```

or copy over the parameters:
For a generic item, you can copy over the parameters:

```
fn foo<T>(x: T) {
Expand All @@ -313,6 +333,12 @@ fn foo<T>(x: T) {
}
```

```
fn foo<T>(x: T) {
type MaybeT<T> = Option<T>;
}
```

Be sure to copy over any bounds as well:

```
Expand All @@ -324,10 +350,18 @@ fn foo<T: Copy>(x: T) {
}
```

```
fn foo<T: Copy>(x: T) {
struct Foo<T: Copy> {
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<T> Foo<T> {
Expand Down