aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src
Commit message (Collapse)AuthorAgeFilesLines
* Small review improvementsFlorian Diebold2019-09-171-5/+3
|
* Add test for `<T>::Item`Florian Diebold2019-09-171-10/+22
|
* Refactor some moreFlorian Diebold2019-09-174-57/+100
| | | | | | Type-relative paths (`<T>::foo`) also need to work in type context, for example `<T>::Item` is legal. So rather than returning the type ref from the resolver function, just check it before.
* Refactor associated item resolution moreFlorian Diebold2019-09-172-124/+120
| | | | | When resolving an associated item in value namespace, use the `Ty` lowering code for the segments before the last instead of replicating it.
* Refactor a bit to prepare for resolving trait assoc itemsFlorian Diebold2019-09-175-38/+66
|
* Resolve assoc types on type parametersFlorian Diebold2019-09-172-24/+61
| | | | | | E.g. `fn foo<T: Iterator>() -> T::Item`. It seems that rustc does this only for type parameters and only based on their bounds, so we also only consider traits from bounds.
* Adapt some testsFlorian Diebold2019-09-171-12/+12
|
* Merge #1817bors[bot]2019-09-169-144/+227
|\ | | | | | | | | | | | | | | 1817: Support path starting with a type r=matklad a=uHOOCCOOHu The path syntax `<Ty>::foo` Co-authored-by: uHOOCCOOHu <[email protected]>
| * Define known paths and group namesuHOOCCOOHu2019-09-156-49/+63
| |
| * Move store TypeRef of type based path in PathKinduHOOCCOOHu2019-09-153-20/+10
| |
| * Support path starting with a typeuHOOCCOOHu2019-09-157-124/+203
| |
* | Remove `is_unnamed`Dylan MacKenzie2019-09-161-4/+0
| |
* | Gracefully handle `const _` items in `ConstData`Dylan MacKenzie2019-09-162-5/+9
|/
* Add `DotDotPat` to ASTDylan MacKenzie2019-09-151-0/+1
| | | | This is modeled on `PlaceholderPat`.
* Support bare `Trait` without dynFlorian Diebold2019-09-142-12/+11
|
* Upgrade ChalkFlorian Diebold2019-09-143-58/+0
| | | | ... and remove Ty::UnselectedProjection. It'll be handled differently.
* make PerNs non-genericAleksey Kladov2019-09-134-34/+30
|
* Specify desirable namespace when calling resolveAleksey Kladov2019-09-138-408/+458
| | | | That way, we are able to get rid of a number of unreachable statements
* rename AdtDef -> AdtAleksey Kladov2019-09-1211-67/+64
|
* generalize impl_froms to nested enumsAleksey Kladov2019-09-124-58/+26
|
* make various enums "inherit" from AdtDefAleksey Kladov2019-09-1211-98/+132
|
* start cleaning up the resolutionAleksey Kladov2019-09-125-49/+59
| | | | | | | Nameres related types, like `PerNs<Resolution>`, can represent unreasonable situations, like a local in a type namespace. We should clean this up, by requiring that call-site specifies the kind of resolution it expects.
* add macros with local_inner_macros argumentJasperDeSutter2019-09-122-1/+40
|
* Merge #1818bors[bot]2019-09-125-1/+68
|\ | | | | | | | | | | | | | | 1818: Infer box expression r=matklad a=uHOOCCOOHu Infer `box e` to be `std::boxed::Box<T>` where `e: T` Co-authored-by: uHOOCCOOHu <[email protected]>
| * Infer box expressionuHOOCCOOHu2019-09-115-1/+68
| |
* | fix panic when fetching genericsAleksey Kladov2019-09-121-5/+5
|/ | | | due to macro expansion, the root node is not always a file
* Merge #1796bors[bot]2019-09-113-3/+3
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1796: Support completion for macros r=matklad a=uHOOCCOOHu This is based on #1795 , and fixes #1727 Also prettify hover text of macros. Some screenshorts below: Completion in item place. <img width="416" alt="Screenshot_20190910_134056" src="https://user-images.githubusercontent.com/14816024/64587159-fa72da00-d3d0-11e9-86bb-c98f169ec08d.png"> After pressing `tab`. <img width="313" alt="Screenshot_20190910_134111" src="https://user-images.githubusercontent.com/14816024/64587160-fa72da00-d3d0-11e9-9464-21e3f6957bd7.png"> Complete macros from `std`. <img width="588" alt="Screenshot_20190910_134147" src="https://user-images.githubusercontent.com/14816024/64587161-fb0b7080-d3d0-11e9-866e-5161f0d1b546.png"> Hover text. <img width="521" alt="Screenshot_20190910_134242" src="https://user-images.githubusercontent.com/14816024/64587162-fb0b7080-d3d0-11e9-8f09-ad17e3f6702a.png"> Co-authored-by: uHOOCCOOHu <[email protected]>
| * Fix typouHOOCCOOHu2019-09-113-3/+3
| |
* | cleanup expansion to item listAleksey Kladov2019-09-102-2/+4
|/
* Merge #1795bors[bot]2019-09-097-239/+393
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1795: Make macro scope a real name scope and fix some details r=matklad a=uHOOCCOOHu This PR make macro's module scope a real name scope in `PerNs`, instead of handling `Either<PerNs, MacroDef>` everywhere. In `rustc`, the macro scope behave exactly the same as type and value scope. It is valid that macros, types and values having exact the same name, and a `use` statement will import all of them. This happened to module `alloc::vec` and macro `alloc::vec!`. So `Either` is not suitable here. There is a trap that not only does `#[macro_use]` import all `#[macro_export] macro_rules`, but also imports all macros `use`d in the crate root. In other words, it just _imports all macros in the module scope of crate root_. (Visibility of `use` doesn't matter.) And it also happened to `libstd` which has `use alloc_crate::vec;` in crate root to re-export `alloc::vec`, which it both a module and a macro. The current implementation of `#[macro_use] extern crate` doesn't work here, so that is why only macros directly from `libstd` like `dbg!` work, while `vec!` from `liballoc` doesn't. This PR fixes this. Another point is that, after some tests, I figure out that _`macro_rules` does NOT define macro in current module scope at all_. It defines itself in legacy textual scope. And if `#[macro_export]` is given, it also is defined ONLY in module scope of crate root. (Then being `macro_use`d, as mentioned above) (Well, the nightly [Declarative Macro 2.0](https://github.com/rust-lang/rust/issues/39412) simply always define in current module scope only, just like normal items do. But it is not yet supported by us) After this PR, in my test, all non-builtin macros are resolved now. (Hover text for documentation is available) So it fixes #1688 . Since compiler builtin macros are marked as `#[rustc_doc_only_macro]` instead of `#[macro_export]`, we can simply tweak the condition to let it resolved, but it may cause expansion error. Some critical notes are also given in doc-comments. <img width="447" alt="Screenshot_20190909_223859" src="https://user-images.githubusercontent.com/14816024/64540366-ac1ef600-d352-11e9-804f-566ba7559206.png"> Co-authored-by: uHOOCCOOHu <[email protected]>
| * StripuHOOCCOOHu2019-09-092-12/+3
| |
| * Make macro scope a real name scopeuHOOCCOOHu2019-09-098-236/+399
| | | | | | | | Fix some details about module scoping
* | modify testsNiko Matsakis2019-09-091-6/+6
| | | | | | | | | | | | | | | | Some method resolution tests now yield `{unknown}` where they did not before. Other tests now succeed, likely because this is helping the solver steer its efforts.
* | also make "unknown" case non-enumerableNiko Matsakis2019-09-091-1/+1
| |
* | make all traits non-enumerableNiko Matsakis2019-09-091-9/+1
| | | | | | | | | | As discussed on Zulip, this actually matches the present behavior of rustc.
* | document moduleAleksey Kladov2019-09-091-7/+26
| |
* | introduce hir debugging infraAleksey Kladov2019-09-094-3/+90
|/ | | | | | | | | | | | This is to make debugging rust-analyzer easier. The idea is that `dbg!(krate.debug(db))` will print the actual, fuzzy crate name, instead of precise ID. Debug printing infra is a separate thing, to make sure that the actual hir doesn't have access to global information. Do not use `.debug` for `log::` logging: debugging executes queries, and might introduce unneded dependencies to the crate graph
* Fix testuHOOCCOOHu2019-09-081-3/+0
|
* Rename `textual_macro` -> `legacy_macro`uHOOCCOOHu2019-09-084-29/+39
| | | | Add comments
* Revert "Replace with immutable map to avoid heavy cloning"uHOOCCOOHu2019-09-082-8/+2
| | | | | | This reverts commit 2c494eb803c88ef5d23607c3b156fce60c2b8076. See: https://github.com/rust-analyzer/rust-analyzer/pull/1784#issuecomment-529119924
* Replace with immutable map to avoid heavy cloninguHOOCCOOHu2019-09-082-2/+8
|
* Resolve textual scoped macros inside itemuHOOCCOOHu2019-09-084-9/+65
|
* Support textual scoped macrosuHOOCCOOHu2019-09-084-34/+158
|
* cleanup hir db importsAleksey Kladov2019-09-0824-43/+65
|
* don't cycle when processing macros from prelude in preludeAleksey Kladov2019-09-072-2/+33
|
* Fix crash for super trait cyclesFlorian Diebold2019-09-072-18/+39
|
* Fix Chalk environmentsFlorian Diebold2019-09-072-3/+4
| | | | | The clauses need to be wrapped in `FromEnv` clauses for elaboration (i.e. things like inferring `T: Clone` from `T: Copy`) to work correctly.
* Use traits from where clauses for method resolutionFlorian Diebold2019-09-074-21/+44
| | | | | E.g. if we have `T: some::Trait`, we can call methods from that trait without it needing to be in scope.
* Lower `Fn(X, Y) -> Z` pathsFlorian Diebold2019-09-072-12/+48
|
* Lower bounds on trait definition, and resolve assoc types from super traitsFlorian Diebold2019-09-079-38/+100
|