aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src
Commit message (Collapse)AuthorAgeFilesLines
...
* | Merge #3513bors[bot]2020-03-091-1/+34
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3513: Completion in macros r=matklad a=flodiebold I experimented a bit with completion in macros. It's kind of working, but there are a lot of rough edges. - I'm trying to expand the macro call with the inserted fake token. This requires some hacky additions on the HIR level to be able to do "hypothetical" expansions. There should probably be a nicer API for this, if we want to do it this way. I'm not sure whether it's worth it, because we still can't do a lot if the original macro call didn't expand in nearly the same way. E.g. if we have something like `println!("", x<|>)` the expansions will look the same and everything is fine; but in that case we could maybe have achieved the same result in a simpler way. If we have something like `m!(<|>)` where `m!()` doesn't even expand or expands to something very different, we don't really know what to do anyway. - Relatedly, there are a lot of cases where this doesn't work because either the original call or the hypothetical call doesn't expand. E.g. if we have `m!(x.<|>)` the original token tree doesn't parse as an expression; if we have `m!(match x { <|> })` the hypothetical token tree doesn't parse. It would be nice if we could have better error recovery in these cases. Co-authored-by: Florian Diebold <[email protected]>
| * | Move hypothetical expansion to hir_expandFlorian Diebold2020-03-081-21/+3
| | |
| * | Try to complete within macrosFlorian Diebold2020-03-071-2/+53
| |/
* | Handle visibility for assoc item path completion as wellFlorian Diebold2020-03-081-8/+40
| |
* | Handle visibility for path completion (not in all cases yet)Florian Diebold2020-03-081-1/+11
| |
* | Handle visibility in method call completionFlorian Diebold2020-03-071-0/+8
|/
* Normalize waiting queries namesAleksey Kladov2020-03-061-5/+5
|
* Don't reuse the Chalk solverFlorian Diebold2020-03-061-2/+1
| | | | | This slows down analysis-stats a bit (~5% in my measurement), but improves incremental checking a lot because we can reuse trait solve results.
* Source map returns a resultAleksey Kladov2020-03-061-2/+2
| | | | cc #2236
* Move PathResolutionAleksey Kladov2020-03-053-19/+18
|
* Remove dead codeAleksey Kladov2020-03-051-7/+1
|
* Minor cleanupAleksey Kladov2020-03-041-16/+14
|
* Remove old find refs infraAleksey Kladov2020-03-042-41/+2
|
* Refactor reference search a bitAleksey Kladov2020-03-031-1/+11
|
* More principled approach for gotodef for field shorhandAleksey Kladov2020-03-022-10/+24
| | | | | Callers can now decide for themselves if they should prefer field or local definition. By default, it's the local.
* Rename ast::ImplBlock -> ast::ImplDefAleksey Kladov2020-02-297-30/+30
|
* Handle tuple fields as wellAleksey Kladov2020-02-292-1/+7
|
* MinorAleksey Kladov2020-02-292-5/+4
|
* Simplify SourceBinderAleksey Kladov2020-02-296-349/+321
|
* Small cleanupAleksey Kladov2020-02-291-9/+15
|
* Reduce visibilityAleksey Kladov2020-02-282-3/+3
|
* Merge #3367bors[bot]2020-02-282-7/+32
|\ | | | | | | | | | | | | | | | | | | | | 3367: Fix highlighting of const patterns r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| * Fix highlighting of const patternsAleksey Kladov2020-02-282-7/+32
| |
* | Simpilfy origin_range logicEdwin Cheng2020-02-281-38/+27
|/
* Use text_range::extend_toEdwin Cheng2020-02-271-10/+3
|
* Skip trival token in original_rangeEdwin Cheng2020-02-261-5/+7
|
* Remove duplicate commentEdwin Cheng2020-02-261-1/+0
|
* Add recursive support in original_rangeEdwin Cheng2020-02-261-14/+37
|
* Remove dead codeAleksey Kladov2020-02-262-25/+9
|
* Reduce visibilityAleksey Kladov2020-02-263-76/+81
|
* Refactor primary IDE APIAleksey Kladov2020-02-264-215/+480
| | | | | | | | | | This introduces the new type -- Semantics. Semantics maps SyntaxNodes to various semantic info, such as type, name resolution or macro expansions. To do so, Semantics maintains a HashMap which maps every node it saw to the file from which the node originated. This is enough to get all the necessary hir bits just from syntax.
* Don't store deriveable Module info in NameDefinitionAleksey Kladov2020-02-191-1/+28
|
* More manual clippy fixesKirill Bulatov2020-02-181-21/+15
|
* Run cargo +nightly fix --clippy -Z unstable-optionsKirill Bulatov2020-02-182-8/+7
|
* Merge #3169bors[bot]2020-02-172-0/+6
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3169: Show record field names in Enum completion r=flodiebold a=adamrk Adresses https://github.com/rust-analyzer/rust-analyzer/issues/2947. Previously the details shown when autocompleting an Enum variant would look like the variant was a tuple even if it was a record: ![2020-02-16-15:59:32_crop](https://user-images.githubusercontent.com/16367467/74607233-64f21980-50d7-11ea-99db-e973e29c71d7.png) This change will show the names of the fields for a record and use curly braces instead of parentheses: ![2020-02-16-15:33:00_crop](https://user-images.githubusercontent.com/16367467/74607251-8ce17d00-50d7-11ea-9d4d-38d198a4aec0.png) This required exposing the type `adt::StructKind` from `ra_hir` and adding a function ``` kind(self, db: &impl HirDatabase) -> StructKind ``` in the `impl` of `EnumVariant`. There was also a previously existing function `is_unit(self, db: &impl HirDatabase) -> bool` for `EnumVariant` which I removed because it seemed redundant after adding `kind`. Co-authored-by: adamrk <[email protected]>
| * show names for record fields in enum completionadamrk2020-02-162-0/+6
| |
* | Introduce AsMacroCall traitEdwin Cheng2020-02-171-10/+6
|/
* Revert source_analyzer changesKirill Bulatov2020-02-122-55/+6
|
* Fix post-rebase issuesKirill Bulatov2020-02-121-11/+12
|
* Support trait method call autoimportsKirill Bulatov2020-02-121-1/+5
|
* Trait location draftKirill Bulatov2020-02-121-11/+7
|
* Resolve methods and functions betterKirill Bulatov2020-02-121-6/+54
|
* Add more hir APIs for associated itemsAleksey Kladov2020-02-122-14/+64
|
* Merge #3050bors[bot]2020-02-092-12/+24
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3050: Refactor type parameters, implement argument position impl trait r=matklad a=flodiebold I wanted to implement APIT by lowering to type parameters because we need to do that anyway for correctness and don't need Chalk support for it; this grew into some more wide-ranging refactoring of how type parameters are handled :sweat_smile: - use Ty::Bound instead of Ty::Param to represent polymorphism, and explicitly count binders. This gets us closer to Chalk's way of doing things, and means that we now only use Param as a placeholder for an unknown type, e.g. within a generic function. I.e. we're never using Param in a situation where we want to substitute it, and the method to do that is gone; `subst` now always works on bound variables. (This changes how the types of generic functions print; previously, you'd get something like `fn identity<i32>(T) -> T`, but now we display the substituted signature `fn identity<i32>(i32) -> i32`, which I think makes more sense.) - once we do this, it's more natural to represent `Param` by a globally unique ID; the use of indices was mostly to make substituting easier. This also means we fix the bug where `Param` loses its name when going through Chalk. - I would actually like to rename `Param` to `Placeholder` to better reflect its use and get closer to Chalk, but I'll leave that to a follow-up. - introduce a context for type lowering, to allow lowering `impl Trait` to different things depending on where we are. And since we have that, we can also lower type parameters directly to variables instead of placeholders. Also, we'll be able to use this later to collect diagnostics. - implement argument position impl trait by lowering it to type parameters. I've realized that this is necessary to correctly implement it; e.g. consider `fn foo(impl Display) -> impl Something`. It's observable that the return type of e.g. `foo(1u32)` unifies with itself, but doesn't unify with e.g. `foo(1i32)`; so the return type needs to be parameterized by the argument type. This fixes a few bugs as well: - type parameters 'losing' their name when they go through Chalk, as mentioned above (i.e. getting `[missing name]` somewhere) - impl trait not being considered as implementing the super traits (very noticeable for the `db` in RA) - the fact that argument impl trait was only turned into variables when the function got called caused type mismatches when the function was used as a value (fixes a few type mismatches in RA) The one thing I'm not so happy with here is how we're lowering `impl Trait` types to variables; since `TypeRef`s don't have an identity currently, we just count how many of them we have seen while going through the function signature. That's quite fragile though, since we have to do it while desugaring generics and while lowering the type signature, and in the exact same order in both cases. We could consider either giving only `TypeRef::ImplTrait` a local id, or maybe just giving all `TypeRef`s an identity after all (we talked about this before)... Follow-up tasks: - handle return position impl trait; we basically need to create a variable and some trait obligations for that variable - rename `Param` to `Placeholder` Co-authored-by: Florian Diebold <[email protected]> Co-authored-by: Florian Diebold <[email protected]>
| * FormattingFlorian Diebold2020-02-071-6/+4
| |
| * Fix compilation of other cratesFlorian Diebold2020-02-071-10/+15
| |
| * wip lower impl trait to type argsFlorian Diebold2020-02-071-1/+1
| |
| * Add impl trait lowering modeFlorian Diebold2020-02-072-8/+9
| |
| * Introduce TyLoweringContextFlorian Diebold2020-02-072-6/+14
| |
* | Remove ImportResolver-related stubsKirill Bulatov2020-02-091-2/+1
|/