Commit message (Collapse) | Author | Age | Files | Lines | ||
---|---|---|---|---|---|---|
... | ||||||
* | Remove dead code | Aleksey Kladov | 2020-02-26 | 2 | -25/+9 | |
| | ||||||
* | Reduce visibility | Aleksey Kladov | 2020-02-26 | 3 | -76/+81 | |
| | ||||||
* | Refactor primary IDE API | Aleksey Kladov | 2020-02-26 | 4 | -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 NameDefinition | Aleksey Kladov | 2020-02-19 | 1 | -1/+28 | |
| | ||||||
* | Update versions | Kirill Bulatov | 2020-02-18 | 1 | -3/+3 | |
| | ||||||
* | More manual clippy fixes | Kirill Bulatov | 2020-02-18 | 1 | -21/+15 | |
| | ||||||
* | Run cargo +nightly fix --clippy -Z unstable-options | Kirill Bulatov | 2020-02-18 | 2 | -8/+7 | |
| | ||||||
* | Merge #3169 | bors[bot] | 2020-02-17 | 2 | -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 completion | adamrk | 2020-02-16 | 2 | -0/+6 | |
| | | ||||||
* | | Introduce AsMacroCall trait | Edwin Cheng | 2020-02-17 | 1 | -10/+6 | |
|/ | ||||||
* | Revert source_analyzer changes | Kirill Bulatov | 2020-02-12 | 2 | -55/+6 | |
| | ||||||
* | Fix post-rebase issues | Kirill Bulatov | 2020-02-12 | 1 | -11/+12 | |
| | ||||||
* | Support trait method call autoimports | Kirill Bulatov | 2020-02-12 | 1 | -1/+5 | |
| | ||||||
* | Trait location draft | Kirill Bulatov | 2020-02-12 | 1 | -11/+7 | |
| | ||||||
* | Resolve methods and functions better | Kirill Bulatov | 2020-02-12 | 1 | -6/+54 | |
| | ||||||
* | Add more hir APIs for associated items | Aleksey Kladov | 2020-02-12 | 2 | -14/+64 | |
| | ||||||
* | Merge #3050 | bors[bot] | 2020-02-09 | 2 | -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]> | |||||
| * | Formatting | Florian Diebold | 2020-02-07 | 1 | -6/+4 | |
| | | ||||||
| * | Fix compilation of other crates | Florian Diebold | 2020-02-07 | 1 | -10/+15 | |
| | | ||||||
| * | wip lower impl trait to type args | Florian Diebold | 2020-02-07 | 1 | -1/+1 | |
| | | ||||||
| * | Add impl trait lowering mode | Florian Diebold | 2020-02-07 | 2 | -8/+9 | |
| | | ||||||
| * | Introduce TyLoweringContext | Florian Diebold | 2020-02-07 | 2 | -6/+14 | |
| | | ||||||
* | | Remove ImportResolver-related stubs | Kirill Bulatov | 2020-02-09 | 1 | -2/+1 | |
|/ | ||||||
* | Remove the leftovers after ImportLocator removal | Kirill Bulatov | 2020-02-06 | 1 | -1/+0 | |
| | ||||||
* | Merge #2982 | bors[bot] | 2020-02-02 | 1 | -1/+2 | |
|\ | | | | | | | | | | | | | | | 2982: Merge imports when auto importing r=flodiebold a=SomeoneToIgnore Co-authored-by: Kirill Bulatov <[email protected]> | |||||
| * | Code review fixes | Kirill Bulatov | 2020-02-02 | 1 | -1/+1 | |
| | | ||||||
| * | Require ModPath for importing | Kirill Bulatov | 2020-02-02 | 1 | -1/+2 | |
| | | ||||||
* | | Auto import functions | Kirill Bulatov | 2020-02-01 | 1 | -6/+11 | |
|/ | ||||||
* | Re-sync queries for memory usage measurnment | Aleksey Kladov | 2020-01-29 | 1 | -9/+13 | |
| | ||||||
* | Code review fixes | Kirill Bulatov | 2020-01-27 | 1 | -3/+2 | |
| | ||||||
* | Adjust the tests | Kirill Bulatov | 2020-01-26 | 1 | -0/+1 | |
| | ||||||
* | Have a better trait interface | Kirill Bulatov | 2020-01-26 | 1 | -1/+2 | |
| | ||||||
* | Initial auto import action implementation | Kirill Bulatov | 2020-01-26 | 1 | -1/+1 | |
| | ||||||
* | Fix comment | Aleksey Kladov | 2020-01-16 | 1 | -3/+1 | |
| | ||||||
* | Correctly discover module containers | Aleksey Kladov | 2020-01-16 | 1 | -11/+15 | |
| | ||||||
* | Create modules via SourceBinder | Aleksey Kladov | 2020-01-16 | 3 | -58/+28 | |
| | ||||||
* | Move module to SourceBinder | Aleksey Kladov | 2020-01-16 | 2 | -34/+48 | |
| | ||||||
* | Cache source for generics | Aleksey Kladov | 2020-01-16 | 1 | -1/+20 | |
| | ||||||
* | Move more stuff to SourceBinder | Aleksey Kladov | 2020-01-16 | 2 | -64/+68 | |
| | ||||||
* | More natural trait setup | Aleksey Kladov | 2020-01-16 | 2 | -22/+44 | |
| | ||||||
* | Removed FromSource | Aleksey Kladov | 2020-01-16 | 1 | -165/+16 | |
| | ||||||
* | Make FromSource private | Aleksey Kladov | 2020-01-16 | 3 | -18/+53 | |
| | ||||||
* | Typos | Aleksey Kladov | 2020-01-15 | 1 | -1/+1 | |
| | ||||||
* | Make syntax highlighting linear | Aleksey Kladov | 2020-01-15 | 1 | -3/+5 | |
| | ||||||
* | Flip generics | Aleksey Kladov | 2020-01-15 | 1 | -12/+12 | |
| | ||||||
* | Store DB in SourceBinder | Aleksey Kladov | 2020-01-15 | 3 | -32/+33 | |
| | ||||||
* | Introduce SourceBinder | Aleksey Kladov | 2020-01-15 | 3 | -99/+215 | |
| | ||||||
* | Don't parse child modules when doing diagnostics | Aleksey Kladov | 2020-01-15 | 1 | -3/+3 | |
| | ||||||
* | Move Type API to type | Aleksey Kladov | 2020-01-14 | 2 | -66/+78 | |
| | ||||||
* | Push resolver further up | Aleksey Kladov | 2020-01-14 | 1 | -2/+16 | |
| |