aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Increase Chalk solver max_size back to 4Florian Diebold2019-05-131-1/+1
| | | | | | Reducing it to 2 was just a failed attempt to see whether that would help fix some slow cases; in fact, it can create new slow cases by replacing concrete types by variables.
* Merge #1257bors[bot]2019-05-136-1/+114
|\ | | | | | | | | | | | | | | 1257: Implemented tkn! macro for syntax kinds r=matklad a=pasa Implementation of #1248 Co-authored-by: Sergey Parilin <[email protected]>
| * Implemented T! macro for syntax kindsSergey Parilin2019-05-136-1/+114
| |
* | Merge #1268bors[bot]2019-05-125-38/+15
|\ \ | | | | | | | | | | | | | | | | | | | | | 1268: simplify r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | simplifyAleksey Kladov2019-05-125-34/+12
| | |
| * | simplifyAleksey Kladov2019-05-122-8/+7
|/ /
* | Merge #1266bors[bot]2019-05-124-26/+83
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1266: Chalk integration / method resolution fixes r=matklad a=flodiebold - fix impl blocks with unresolved target trait being treated as inherent impls - add traits from prelude for method resolution, and deduplicate them - blacklist some traits from being considered in where clauses, namely `Send`, `Sync`, `Sized`, and the `Fn` traits. We don't handle these correctly yet for several reasons, and this makes us much less likely to run into cases where Chalk gets very slow (because these usually only happen if there is no solution, and that's more likely to happen for these traits). - when there's an errored where clause, return just that one (since it will be always false anyway). This also makes things easier on Chalk ;) Co-authored-by: Florian Diebold <[email protected]>
| * | Use traits from prelude for method resolutionFlorian Diebold2019-05-123-14/+42
| | |
| * | Blacklist some traits from being considered in where clausesFlorian Diebold2019-05-122-7/+34
| | | | | | | | | | | | | | | | | | | | | For Send/Sync/Sized, we don't handle auto traits correctly yet and because they have a lot of impls, they can easily lead to slowdowns. In the case of Fn/FnMut/FnOnce, we don't parse the special Fn notation correctly yet and don't handle closures yet, so we are very unlikely to find an impl.
| * | Fix impl blocks with unresolved target trait being treated as inherent implsFlorian Diebold2019-05-121-5/+7
|/ /
* | Merge #1265bors[bot]2019-05-122-34/+7
|\ \ | | | | | | | | | | | | | | | | | | | | | 1265: drop obsolete render test subcommand r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | drop obsolete render test subcommandAleksey Kladov2019-05-121-30/+1
| | |
| * | allow to specify path in analysis-statsAleksey Kladov2019-05-122-4/+6
| | |
* | | Merge #1262bors[bot]2019-05-1212-56/+416
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1262: Where clauses and other Chalk improvements r=matklad a=flodiebold This adds support for where clauses to the Chalk integration; it also adds FnDef lowering and partly handles auto traits. One thing I'm not sure about is the error handling -- what do we do if we can't resolve a trait reference in a where clause? For impls, I think it's clear we need to disregard the impl for trait solving. I've solved this for now by introducing an 'unknown trait' that has no impls, so if we encounter an unknown trait we can use that and basically get a where clause that's always false. (The alternative would be somehow not returning the impl to Chalk at all, but we would need to know that we need to do that in `impls_for_trait` already, and we don't resolve anything there.) A bit surprisingly, this has almost no impact on the type inference stats for RA, probably because of missing edge cases. Probably impl Trait support and closure support will do more. Co-authored-by: Florian Diebold <[email protected]>
| * | Add support for inline boundsFlorian Diebold2019-05-112-16/+60
| | | | | | | | | | | | E.g. impl<T: Clone> Foo for T.
| * | Handle auto traits & negative implsFlorian Diebold2019-05-115-7/+47
| | | | | | | | | | | | | | | We don't pass field types to Chalk yet though, so the auto trait inference won't be correct.
| * | Reduce Chalk max_size parameter, add test for slow caseFlorian Diebold2019-05-113-3/+42
| | |
| * | Handle Chalk conversion for FnDefFlorian Diebold2019-05-113-2/+39
| | |
| * | Handle resolution errors in where clausesFlorian Diebold2019-05-112-15/+56
| | | | | | | | | | | | | | | This is slightly hacky, but maybe more elegant than alternative solutions: We just use a hardcoded Chalk trait ID which we special-case to have no impls.
| * | Handle where clauses in trait solvingFlorian Diebold2019-05-116-29/+188
|/ /
* | Merge #1258bors[bot]2019-05-111-76/+69
|\ \ | | | | | | | | | | | | | | | | | | | | | 1258: cargo update r=matklad a=kjeremy Co-authored-by: Jeremy Kolb <[email protected]>
| * | cargo updateJeremy Kolb2019-05-091-76/+69
| | |
* | | Merge #1261bors[bot]2019-05-111-8/+17
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | 1261: add manual installation instructions r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | add manual installation instructionsAleksey Kladov2019-05-111-8/+17
|/ /
* | Merge #1255bors[bot]2019-05-075-22/+28
|\ \ | | | | | | | | | | | | | | | | | | | | | 1255: switch to once_cell from lazy_static r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | switch to once_cell from lazy_staticAleksey Kladov2019-05-075-22/+28
|/ /
* | Merge #1251bors[bot]2019-05-077-14/+45
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1251: Chalk integration improvements r=matklad a=flodiebold A few improvements that came up while working on where clause support: - turn `implements` into a query again to improve performance - allow skipping to a specific function with `analysis-stats`, e.g. `ra_cli analysis-stats --only world_symbols` - deduplicate impls in impls_for_trait -- previously many impls e.g. from std where repeated many times, this should help performance as well... - add a `HirDisplay` implementation for TraitRef (not used here anywhere, but useful for debugging) Co-authored-by: Florian Diebold <[email protected]>
| * | Deduplicate impls in impls_for_traitFlorian Diebold2019-05-071-2/+3
| | | | | | | | | | | | This was duplicating impls in dependencies a lot...
| * | Allow targeting a specific function with analysis-statsFlorian Diebold2019-05-072-4/+12
| | | | | | | | | | | | This can be useful for debugging.
| * | Add a HirDisplay implementation for TraitRefFlorian Diebold2019-05-071-0/+17
| | |
| * | Turn `implements` into a query againFlorian Diebold2019-05-075-8/+13
| |/
* | Merge #1253bors[bot]2019-05-0710-1201/+620
|\ \ | |/ |/| | | | | | | | | | | | | | | | | | | | | | | 1253: Share literal validation logic with compiler r=matklad a=matklad This is neat: the unescape module is literary what compiler is using right now: https://github.com/rust-lang/rust/blob/c6ac57564852cb6e2d0db60f7b46d9eb98d4b449/src/libsyntax/parse/unescape.rs So, yeah, code sharing via copy-paste! Co-authored-by: Aleksey Kladov <[email protected]>
| * share literal validation logic with compilerAleksey Kladov2019-05-0710-1201/+620
|/
* Merge #1163bors[bot]2019-05-0611-246/+269
|\ | | | | | | | | | | | | | | 1163: fill struct fields diagnostic r=matklad a=pasa implementation of #1095 Co-authored-by: Sergey Parilin <[email protected]>
| * removed duplicating fill_struct_fields assistSergey Parilin2019-05-062-228/+0
| |
| * fill struct fields diagnosticSergey Parilin2019-05-069-18/+269
|/
* Merge #1247bors[bot]2019-05-051-2/+1
|\ | | | | | | | | | | | | | | 1247: Remove collect r=matklad a=kjeremy Might help with perf Co-authored-by: Jeremy Kolb <[email protected]>
| * Remove collectJeremy Kolb2019-05-051-2/+1
|/
* Merge #1245bors[bot]2019-05-051-0/+2
|\ | | | | | | | | | | | | | | 1245: Add profiling to diagnostics r=matklad a=marcogroppo Add profiling to `diagnostics()` - see #1244. Co-authored-by: Marco Groppo <[email protected]>
| * Profile diagnostics.Marco Groppo2019-05-051-0/+2
|/
* Merge #1242bors[bot]2019-05-052-0/+55
|\ | | | | | | | | | | | | | | | | | | 1242: Fix missing empty vars in $repeat while macro expansion r=matklad a=edwin0cheng This PR fixes a bug we forget to collect an empty vars in $repeat patterns. Related issues: #1240 Co-authored-by: Edwin Cheng <[email protected]>
| * Fixed missing empty varsEdwin Cheng2019-05-052-0/+55
|/
* Merge #1241bors[bot]2019-05-041-89/+131
|\ | | | | | | | | | | | | | | 1241: :arrow_up: deps r=matklad a=matklad bors r+ Co-authored-by: Aleksey Kladov <[email protected]>
| * :arrow_up: depsAleksey Kladov2019-05-041-89/+131
|/
* Merge #1208bors[bot]2019-05-049-6/+97
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1208: [WIP] Goto for Macro's r=matklad a=Lapz Adds goto definition for macros. Currently only works for macros in the current crate ~~otherwise it panics~~. Proper macro resolution needs to be added for it to resolve macros in other crates. Todo - [X] Allow goto from macro calls - [X] Fix panics - [x] Add tests ![Screen Recording 2019-04-25 at 18 00 24](https://user-images.githubusercontent.com/19998186/56754499-1dd01c00-6785-11e9-9e9a-1e36de70cfa3.gif) Co-authored-by: Lenard Pratt <[email protected]>
| * Added local macro gotoLenard Pratt2019-05-049-6/+97
| |
* | Merge #1216bors[bot]2019-05-0417-280/+1027
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1216: Basic Chalk integration r=matklad a=flodiebold This replaces the ad-hoc `implements` check by Chalk. It doesn't yet any new functionality (e.g. where clauses aren't passed to Chalk yet). The tests that exist actually work, but it needs some refactoring, currently crashes when running analysis on the RA repo, and depends on rust-lang/chalk#216 which isn't merged yet :smile: The main work here is converting stuff back and forth and providing Chalk with the information it needs, and the canonicalization logic. Since canonicalization depends a lot on the inference table, I don't think we can currently reuse the logic from Chalk, so we need to implement it ourselves; it's not actually that complicated anyway ;) I realized that we need a `Ty::Bound` variant separate from `Ty::Param` -- these are two different things, and I think type parameters inside a function actually need to be represented in Chalk as `Placeholder` types. ~~Currently this crashes in the 'real' world because we don't yet do canonicalization when filtering method candidates. Proper canonicalization needs the inference table (to collapse different inference variables that have already been unified), but we need to be able to call the method candidate selection from the completion code... So I'm currently thinking how to best handle that :smile:~~ Co-authored-by: Florian Diebold <[email protected]>
| * | Differentiate Tuple / FnPtr type constructors by cardinalityFlorian Diebold2019-05-045-15/+25
| | | | | | | | | | | | | | | This is necessary because Chalk (reasonably) expects each 'struct' to know how many type parameters it takes.
| * | Simplify subst / subst_bound_vars a bitFlorian Diebold2019-05-041-12/+2
| | |
| * | Handle recursive types in canonicalizationFlorian Diebold2019-05-043-5/+15
| | |