aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* 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
| | |
| * | Remove ToChalk implementation for ApplicationTyFlorian Diebold2019-05-041-29/+16
| | |
| * | Make canonicalization API a bit nicerFlorian Diebold2019-05-042-31/+56
| | |
| * | Update ChalkFlorian Diebold2019-05-044-34/+39
| | |
| * | Turn eprintln!s into debug!sFlorian Diebold2019-05-042-8/+12
| | |
| * | Handle Ty::Unknown in Chalk conversionFlorian Diebold2019-05-041-1/+5
| | | | | | | | | | | | Badly, but at least it doesn't crash.
| * | Canonicalize before doing method resolutionFlorian Diebold2019-05-047-133/+165
| | |
| * | Document the peculiarity of the solver query a bitFlorian Diebold2019-05-042-3/+10
| | | | | | | | | | | | | | | Also remove the only remaining mention of chalk outside of the ty::traits module.
| * | Move Chalk conversion code to its own moduleFlorian Diebold2019-05-043-321/+339
| | |
| * | Implement Deref<Target=[Ty]> for SubstsFlorian Diebold2019-05-042-18/+18
| | |
| * | Simplify solution_from_chalkFlorian Diebold2019-05-041-12/+11
| | |
| * | Chalk integrationFlorian Diebold2019-05-0414-147/+798
| | | | | | | | | | | | | | | - add proper canonicalization logic - add conversions from/to Chalk IR
| * | Add Ty::Bound variant for use in Chalk integrationFlorian Diebold2019-05-041-2/+7
| | |
* | | Merge #1239bors[bot]2019-05-041-3/+24
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | 1239: Fix `$true` and `$false` as $var name error r=matklad a=edwin0cheng This PR fixed a bug which cannot use `$true` and `$false` as `$var` name in mbe. Co-authored-by: Edwin Cheng <[email protected]>
| * | Fix `$true` and `$false` as $var name errorEdwin Cheng2019-05-041-3/+24
|/ /
* | Merge #1238bors[bot]2019-05-045-69/+64
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1238: Macro queries r=edwin0cheng a=matklad In https://github.com/rust-analyzer/rust-analyzer/pull/1231, I've added aggressive clean up of `ast_id_to_node` query. The result of this query is a `SyntaxTree`, and we don't want to retain syntax trees in memory unless absolutely necessary. Moreover, `SyntaxTree` has identity equality semantics, meaning that we'll get a diffferent syntax tree for a file after every reparse. That means that `ast_id_to_node` query should not genereally be used in HIR, unless it is behind some kind of salsa firewall, like the `raw` module of name resoulution. However, that PR resulted in the abysmal performance: turns out we were using ast_id_to_node quite heavily in hir when expanding macros! So this PR installs the more incremental-friendly query structure: * converting source to token tree is now a query; changing source without affecting token-trees will now preserve macro expansions * expand macro (tt -> tt) is now a query as well, so we cache macro expansions *before* parsing them into item lists or expressions, which is nice: we can cache expansion without knowing the calling context! r? @edwin0cheng Co-authored-by: Aleksey Kladov <[email protected]>
| * | make macro expansion into a proper queryAleksey Kladov2019-05-043-35/+28
| | |
| * | minor, moveAleksey Kladov2019-05-041-19/+19
| | |
| * | introduce macro_arg intermediate queryAleksey Kladov2019-05-043-25/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, when expanding macros, we look at the source code directly (we invoke ast_id_to_node query via to_node method). This is less then ideal, because it make us re-expand macros after every source change. This commit establishes a salsa-firewall: a query to get macro call's token tree. Unlike the syntax tree, token tree changes only if we actually modify the macro itself.
| * | Revert "eagarly clean astd maps"Aleksey Kladov2019-05-043-3/+3
| | | | | | | | | | | | | | | | | | This reverts commit 6c63a59425e256ce46d058807b64149297231982. This causes massive slowdowns: looks like we accidentally have some source-depndent
* | | Merge #1237bors[bot]2019-05-041-3/+8
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | | | | | | | 1237: Improve $ Handling in mbe parser r=matklad a=edwin0cheng This PR improve the $ handling in mbe parser. In some rare case, the `$` may not be following an `ident` or a `Subtree`. ( For example, a macro_rules inside a macro rules). Related issue: #1236 Co-authored-by: Edwin Cheng <[email protected]>
| * | Add testEdwin Cheng2019-05-041-0/+2
| | |
| * | Error out when parse_subtree is not a subtreeEdwin Cheng2019-05-041-3/+6
|/ /
* | Merge #1235bors[bot]2019-05-041-6/+1
|\ \ | | | | | | | | | | | | | | | | | | | | | 1235: revert eagarly clean astd maps r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | revert eagarly clean astd mapsAleksey Kladov2019-05-041-6/+1
| | | | | | | | | | | | This causes massive slowdown :-(
* | | Merge #1230bors[bot]2019-05-042-3/+95
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | | | | | | | 1230: Desugar doc comments to `#[doc = "...."]` attributes in `syntax node` to tt conversion r=matklad a=edwin0cheng As discussed in [Zulip](https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Fwg-rls-2.2E0/topic/MBE.20discussion/near/164446835), this PR desugar doc comments to `#[doc = "...."]` in `syntax node` to tt conversion. Note that after this PR, all obvious mbe bugs in dogfooding are fixed. (i.e. No parsing or expanding mbe error in `env RUST_LOG=ra_hir=WARN target\release\ra_cli.exe analysis-stats`) 🎉 Co-authored-by: Edwin Cheng <[email protected]>