Skip to content

Commit

Permalink
doc: Document flavorful variations of paths
Browse files Browse the repository at this point in the history
Closes #4293
  • Loading branch information
alexcrichton committed Apr 8, 2014
1 parent bc234ae commit c83afb9
Showing 1 changed file with 46 additions and 1 deletion.
47 changes: 46 additions & 1 deletion src/doc/rust.md
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ operators](#binary-operator-expressions), or [keywords](#keywords).
## Paths

~~~~ {.notrust .ebnf .gram}
expr_path : ident [ "::" expr_path_tail ] + ;
expr_path : [ "::" ] ident [ "::" expr_path_tail ] + ;
expr_path_tail : '<' type_expr [ ',' type_expr ] + '>'
| expr_path ;
Expand Down Expand Up @@ -475,6 +475,51 @@ let x = id::<int>(10); // Type arguments used in a call expression
# }
~~~~

Paths can be denoted with various leading qualifiers to change the meaning of
how it is resolved:

* Paths starting with `::` are considered to be global paths where the
components of the path start being resolved from the crate root. Each
identifier in the path must resolve to an item.

```rust
mod a {
pub fn foo() {}
}
mod b {
pub fn foo() {
::a::foo(); // call a's foo function
}
}
# fn main() {}
```

* Paths starting with the keyword `super` begin resolution relative to the
parent module. Each further identifier must resolve to an item

```rust
mod a {
pub fn foo() {}
}
mod b {
pub fn foo() {
super::a::foo(); // call a's foo function
}
}
# fn main() {}
```

* Paths starting with the keyword `self` begin resolution relative to the
current module. Each further identifier must resolve to an item.

```rust
fn foo() {}
fn bar() {
self::foo();
}
# fn main() {}
```

# Syntax extensions

A number of minor features of Rust are not central enough to have their own
Expand Down

0 comments on commit c83afb9

Please sign in to comment.