This introduces a new way of identifying items/paths using extension traits with a composable set of functions rather than unique functions for various combinations of starting points and target items. Altogether this is a set of five traits: * `MaybeTypeckRes`: Allows both `LateContext` and `TypeckResults` to be used for type-dependent lookup. The implementation here will avoid ICEs by returning `None` when debug assertions are disabled. With assertions this will assert that we don't silently lookup anything from a different body than the current one and that a definition actually exists. * `HasHirId`: Simply a convenience to allow not typing `.hir_id` at call sites. * `MaybeQPath`: This is the old `MaybePath`. Extension functions for type-dependent path lookups exist here. A lot of these functions aren't used in the current PR, but what they accomplish is done in various places I haven't cleaned up yet. * `MaybeResPath`: Like `MaybeQPath`, but only does non-type-dependent lookup (`QPath::Resolved`). * `MaybeDef`: Extension functions for identifying the current definition and accessing properties. Implemented for several types for convenience. `MaybeDef` is implemented for `Option` to allow chaining methods together. e.g. `cx.ty_based_def(e).opt_parent(cx).opt_impl_ty(cx).is_diag_item(..)` would chaining `and_then` or `if let` on every step. `MaybeQPath` and `MaybeResPath` are also implemented for `Option` for the same reason. `ty_based_def` is just a shorter name for `type_dependent_def`. I'm not really attached to it, but it's nice that it's a little shorter. changelog: none |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||
| README.md | ||