aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* 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 #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]>
| * Quote the quoted commentEdwin Cheng2019-05-042-2/+2
| |
| * Use explict `escape_default` instead of dbg printEdwin Cheng2019-05-041-1/+1
| |
| * Convert doc comment to attrEdwin Cheng2019-05-042-3/+95
| |
* | Merge #1231bors[bot]2019-05-044-3/+9
|\ \ | |/ |/| | | | | | | | | | | 1231: eagarly clean astd maps r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * eagarly clean astd mapsAleksey Kladov2019-05-044-3/+9
|/
* Merge #1229bors[bot]2019-05-032-13/+61
|\ | | | | | | | | | | | | | | | | | | | | | | 1229: Mark unused mbe variable as `Binding::Empty` r=matklad a=edwin0cheng This PR fixes a regression bug in In #1228, which incorrect expand an empty binding : * Introduce a new Binding type `Binding::Empty`. * Mark all unused binding variables are empty and error out in expansion instead of just by passing. Co-authored-by: Edwin Cheng <[email protected]>
| * Mark unused mbe variable as `Binding::Empty`Edwin Cheng2019-05-032-13/+61
|/
* Merge #1228bors[bot]2019-05-033-1142/+1409
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | 1228: Add inner macro checker in mbe r=matklad a=edwin0cheng This PR do the following things: * Add an inner macro checker for allowing defining mbe in mbe. (It is a adhoc solution, we could eliminate it after we have a better mbe parser) * Move all tests to an tests modules * Filter empty tree while expanding mbe. This is the final PR extracting from #1219 Co-authored-by: Edwin Cheng <[email protected]>
| * By pass unbind $var while mbe expandingEdwin Cheng2019-05-033-7/+39
| |
| * Refactor out tests module and remove empty subtreeEdwin Cheng2019-05-033-1137/+1372
|/
* Merge #1227bors[bot]2019-05-033-1/+8
|\ | | | | | | | | | | | | | | 1227: Add `default_type` method in `TypeParam` Node r=matklad a=edwin0cheng This PR add a `default_type` method in `TypeParam` Node which allow future PR to handle #1099 case. Co-authored-by: Edwin Cheng <[email protected]>
| * Add default type param in TypeParam NodeEdwin Cheng2019-05-033-1/+8
| |
* | Merge #1226bors[bot]2019-05-032-24/+43
|\ \ | |/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1226: Fix Bug in mbe on mismatching bindings count r=matklad a=edwin0cheng This PR do the followings things: 1. Fixed a bug happened in following code by inserting empty bindings before a nested bindings: ``` macro_rules foo! { ($( ($($a:ident)* => $($b:ident))*))* => { ... } } foo!( ( => a) (b => ) ) ``` 2. Fixed a bug which forget to restore `var_expanded`. 3. Some cleanup Co-authored-by: Edwin Cheng <[email protected]>
| * Fixed old incorrect testEdwin Cheng2019-05-021-1/+1
| |
| * Fix typoEdwin Cheng2019-05-021-3/+3
| |
| * Compare text insteadEdwin Cheng2019-05-021-2/+2
| |
| * Add empty bindings and some refactoringEdwin Cheng2019-05-022-22/+41
|/
* Merge #1225bors[bot]2019-05-023-5/+28
|\ | | | | | | | | | | | | | | 1225: Make `vis` matcher optional and fix typo r=matklad a=edwin0cheng Co-authored-by: Edwin Cheng <[email protected]>
| * Make `vis` matcher optional and fix typoEdwin Cheng2019-05-023-5/+28
|/
* Merge #1224bors[bot]2019-05-023-213/+120
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | 1224: Remove unused multchar puncts code and add space between puncts r=matklad a=edwin0cheng After #1213 , parser only need single char punct, this PR do the following things: * Remove code which handles multi char puncts * Remove code which handle traversal backward in `SubtreeSource` , because we cached the result in #1195 * Add space between two consecutive puncts while `tt` to `SyntaxNode` conversion . Note that the spaces should only be added if both puncts are not delimiters. Co-authored-by: Edwin Cheng <[email protected]>
| * Remove unused code in subtree_sourceEdwin Cheng2019-05-021-182/+41
| |
| * FormatingEdwin Cheng2019-05-021-1/+1
| |
| * Remove unused code and add space bewteen ttEdwin Cheng2019-05-022-32/+80
|/
* Merge #1222bors[bot]2019-05-011-1/+9
|\ | | | | | | | | | | | | | | 1222: Skip Dollars when bump raw token r=matklad a=edwin0cheng This PR fixed a bug while parsing token_tree, it should skip all L_DOLLAR AND R_DOLLAR. Co-authored-by: Edwin Cheng <[email protected]>
| * Skip Dollars when bump raw tokenEdwin Cheng2019-05-011-1/+9
| |
* | Merge #1223bors[bot]2019-05-013-0/+135
|\ \ | |/ |/| | | | | | | | | | | 1223: Move guard to arm body assist r=matklad a=unrealhoang This is my attempt at #1206 Co-authored-by: Unreal Hoang <[email protected]>
| * add complex match case and documentationUnreal Hoang2019-05-012-13/+47
| |
| * move guard to arm body assist.Unreal Hoang2019-05-012-0/+101
| |
* | Merge #1220bors[bot]2019-05-013-1/+49
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1220: Add macro pat parsing r=matklad a=edwin0cheng This PR add support to parsing macro call in pattern , e.g : ``` let m!(x) = 0; ``` Co-authored-by: Edwin Cheng <[email protected]>
| * | Add macro pat parsingEdwin Cheng2019-04-303-1/+49
| | |
* | | Merge #1221bors[bot]2019-05-012-33/+44
|\ \ \ | |_|/ |/| | | | | | | | | | | | | | | | | 1221: Use correct FileId when expanding macros in expressions r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | Use correct FileId when expanding macros in expressionsAleksey Kladov2019-05-012-33/+44
|/ /
* | Merge #1217bors[bot]2019-04-301-2/+3
|\ \ | |/ |/| | | | | | | | | | | | | | | 1217: Sidestep two-phase borrow violation r=matklad a=pnkfelix Sidestep two-phase borrow violation signaled by mutable_borrow_reservation_conflict. See rust-lang/rust#59159 for further information/discussion. Co-authored-by: Felix S. Klock II <[email protected]>
| * Sidestep two-phase borrow violation signaled by ↵Felix S. Klock II2019-04-291-2/+3
|/ | | | | | mutable_borrow_reservation_conflict. See rust-lang/rust#59159 for further information/discussion.
* Merge #1213bors[bot]2019-04-289-132/+185
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1213: Make lexer produce only single character puncts r=matklad a=edwin0cheng As discussed in Zulip, this PR change `lexer` to produce only single char punct. * Remove producing `DOTDOTDOT, DOTDOTEQ, DOTDOT, COLONCOLON, EQEQ, FAT_ARROW, NEQ, THIN_ARROW` in lexer. * Add required code in parser to make sure everythings works fine. * Change some tests (Mainly because the `ast::token_tree` is different) Note: i think the use of `COLON` in rust is too overloaded :) Co-authored-by: Edwin Cheng <[email protected]>