aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Initial Visual Studio Code unit testsRyan Cumming2019-06-2611-61/+765
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As promised in #1439 this is an initial attempt at unit testing the VSCode extension. There are two separate parts to this: getting the test framework working and unit testing the code in #1439. The test framework nearly intact from the VSCode extension generator. The main thing missing was `test/index.ts` which acts as an entry point for Mocha. This was simply copied back in. I also needed to open the test VSCode instance inside a workspace as our file URI generation depends on a workspace being open. There are two ways to run the test framework: 1. Opening the extension's source in VSCode, pressing F5 and selecting the "Extensions Test" debug target. 2. Closing all copies of VSCode and running `npm test`. This is started from the command line but actually opens a temporary VSCode window to host the tests. This doesn't attempt to wire this up to CI. That requires running a headless X11 server which is a bit daunting. I'll assess the difficulty of that in a follow-up branch. This PR is at least helpful for local development without having to induce errors on a Rust project. For the actual tests this uses snapshots of `rustc` output from a real Rust project captured from the command line. Except for extracting the `message` object and reformatting they're copied verbatim into fixture JSON files. Only four different types of diagnostics are tested but they represent the main combinations of code actions and related information possible. They can be considered the happy path tests; as we encounter corner-cases we can introduce new tests fixtures.
* Merge #1444bors[bot]2019-06-263-52/+51
|\ | | | | | | | | | | | | | | 1444: move ra_prof dep where it belongs r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * move ra_prof dep where it belongsAleksey Kladov2019-06-263-52/+51
|/
* Merge #1442bors[bot]2019-06-264-0/+90
|\ | | | | | | | | | | | | | | 1442: add cpuprofile to ra_prof r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * add cpuprofile to ra_profAleksey Kladov2019-06-264-0/+90
|/ | | | | | | | | Now, one can use `let _p = ra_prof::cpu_profiler()` to capture profile of a block of code. This is not an out of the box experience, as that relies on gperfools See the docs on https://github.com/AtheMathmo/cpuprofiler for more!
* Merge #1432bors[bot]2019-06-251-2/+57
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1432: Make fill_match_arm work with trivial arm r=matklad a=ironyman Addresses this issue https://github.com/rust-analyzer/rust-analyzer/issues/1399 One minor issue I noticed is that complete_postfix creates an arm like this ``` match E::X { <|>_ => {}, } ``` but fill_match_arms creates arms like this ``` E::X => (), ``` Co-authored-by: ironyman <[email protected]> Co-authored-by: Changyu Li <[email protected]>
| * Review 1Changyu Li2019-06-251-16/+19
| |
| * fill_match_arm works with trivial armironyman2019-06-241-2/+54
| |
* | Merge #1439bors[bot]2019-06-252-54/+358
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1439: Rich mapping of cargo watch output r=matklad a=etaoins Currently we depend on the ASCII rendering string that `rustc` provides to populate Visual Studio Code's diagnostic. This has a number of shortcomings: 1. It's not a very good use of space in the error list 2. We can't jump to secondary spans (e.g. where a called function is defined) 3. We can't use Code Actions aka Quick Fix This moves all of the low-level parsing and mapping to a `rust_diagnostics.ts`. This uses some heuristics to map Rust diagnostics to VsCode: 1. As before, the Rust diagnostic message and primary span is used for the root diagnostic. However, we now just use the message instead of the rendered version. 2. Every secondary span is converted to "related information". This shows as child in the error list and can be jumped to. 3. Every child diagnostic is categorised in to three buckets: 1. If they have no span they're treated as another line of the root messages 2. If they have replacement text they're treated as a Code Action 3. If they have a span but no replacement text they're treated as related information (same as secondary spans). Co-authored-by: Ryan Cumming <[email protected]>
| * | Tweak isUnusedOrUnnecessaryRyan Cumming2019-06-251-2/+8
| | | | | | | | | | | | | | | | | | | | | The first cut was a bit rough with the blanket `unused_*` rule. This trigger for things like `unused_mut` where the code is used but it's suboptimal. It's misleading to grey out the code in those cases. Instead, use an explicit list of things known to be dead code.
| * | Fix comparison of Code Action edit lengthsRyan Cumming2019-06-251-1/+1
| | | | | | | | | | | | | | | This happened to work because we always produce a single edit but this is obviously dubious.
| * | Rich mapping of cargo watch outputRyan Cumming2019-06-252-54/+352
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently we depend on the ASCII rendering string that `rustc` provides to populate Visual Studio Code's diagnostic. This has a number of shortcomings: 1. It's not a very good use of space in the error list 2. We can't jump to secondary spans (e.g. where a called function is defined) 3. We can't use Code Actions aka Quick Fix This moves all of the low-level parsing and mapping to a `rust_diagnostics.ts`. This uses some heuristics to map Rust diagnostics to VsCode: 1. As before, the Rust diagnostic message and primary span is used for the root diagnostic. However, we now just use the message instead of the rendered version. 2. Every secondary span is converted to "related information". This shows as child in the error list and can be jumped to. 3. Every child diagnostic is categorised in to three buckets: 1. If they have no span they're treated as another line of the root messages 2. If they have replacement text they're treated as a Code Action 3. If they have a span but no replacement text they're treated as related information (same as secondary spans).
* | | Merge #1436bors[bot]2019-06-251-25/+38
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | 1436: Method resolution for slices r=sinkuu a=sinkuu `impl<T> [T]` is separately defined in `core` and `alloc`, so I changed `def_crate` function in `method_resolution.rs` to return multiple crates. Co-authored-by: Shotaro Yamada <[email protected]>
| * | Add commentShotaro Yamada2019-06-251-6/+8
| | |
| * | Method resolution for slicesShotaro Yamada2019-06-241-25/+36
|/ /
* | Merge #1434bors[bot]2019-06-244-14/+38
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | 1434: Introduce cargo-watch.check-command option for Code extension r=matklad a=alekseysidorov By this option you can replace `check` command in `cargo watch` by the something else like `clippy`. Co-authored-by: Aleksei Sidorov <[email protected]> Co-authored-by: Aleksey Sidorov <[email protected]>
| * | Fix code after "apply suggestions"Aleksei Sidorov2019-06-244-15/+21
| | |
| * | Apply suggestions from code reviewAleksey Sidorov2019-06-242-4/+4
| | | | | | | | | Co-Authored-By: Aleksey Kladov <[email protected]>
| * | Fix tslintsAleksei Sidorov2019-06-242-5/+3
| | |
| * | Introduce cargo-watch.check-commandAleksei Sidorov2019-06-244-7/+27
| |/
* | Merge #1429bors[bot]2019-06-242-1/+10
|\ \ | | | | | | | | | | | | | | | | | | | | | 1429: Add box postfix completion r=matklad a=kanru Co-authored-by: Kan-Ru Chen <[email protected]>
| * | Add box postfix completionKan-Ru Chen2019-06-232-1/+10
| |/
* | Merge #1415bors[bot]2019-06-245-1/+149
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | 1415: fix: specialization r=matklad a=csmoe Closes #1402 r? @matklad Co-authored-by: csmoe <[email protected]>
| * | fix: specialization(with blindly parsing)csmoe2019-06-195-1/+149
| | | | | | | | | | | | Change-Id: Ic5d2767e8781568d76d4d0013cd6081e95ae8a95
* | | Merge #1433bors[bot]2019-06-242-1/+16
|\ \ \ | |_|/ |/| | | | | | | | | | | | | | | | | 1433: Add SourceRoot::is_library, in preparation for salsa's durability r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | Add SourceRoot::is_library, in preparation for salsa's durabilityAleksey Kladov2019-06-242-1/+16
|/ /
* | Merge #1421bors[bot]2019-06-206-23/+30
|\ \ | | | | | | | | | | | | | | | | | | | | | 1421: Bump cargo_metadata, ena, flexi_logger r=matklad a=kjeremy Co-authored-by: kjeremy <[email protected]>
| * | Bump cargo_metadata, ena, flexi_loggerkjeremy2019-06-206-23/+30
|/ /
* | Merge #1420bors[bot]2019-06-201-3/+6
|\ \ | | | | | | | | | | | | | | | | | | | | | 1420: don' collect macros r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | don' collect macrosAleksey Kladov2019-06-201-3/+6
|/ /
* | Merge #1419bors[bot]2019-06-193-17/+38
|\ \ | | | | | | | | | | | | | | | | | | | | | 1419: Add firewall query to lang items r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | Add firewall query to lang itemsAleksey Kladov2019-06-193-17/+38
| | | | | | | | | | | | | | | With an intermediate query, changing one module won't cause reparsing of all modules
* | | Merge #1414bors[bot]2019-06-198-6/+97
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | | | | 1414: fix: box_syntax/pattern r=matklad a=csmoe Closes #1412 r? @matklad Co-authored-by: csmoe <[email protected]>
| * | fix: box_patterncsmoe2019-06-199-11/+94
| | | | | | | | | | | | Change-Id: I45a856d74fb616d3bce33050f9e69d327186bd59
| * | fix: box_syntax(#1412)csmoe2019-06-182-0/+8
| | | | | | | | | | | | Change-Id: I6e20e0163fa545de37226c1561b3b7103615626c
* | | Merge #1418bors[bot]2019-06-1910-70/+66
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1418: rename XSignature -> XData r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | | rename XSignature -> XDataAleksey Kladov2019-06-1810-70/+66
| |/ /
* | | Merge #1417bors[bot]2019-06-191-89/+89
|\ \ \ | |_|/ |/| | | | | | | | | | | | | | | | | 1417: :arrow_up: ra_vfs r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | :arrow_up: ra_vfsAleksey Kladov2019-06-191-89/+89
|/ /
* | Merge #1413bors[bot]2019-06-181-0/+21
|\ \ | |/ |/| | | | | | | | | | | 1413: More details on how to set up coc r=matklad a=mark-i-m I spent ~1 hour trying to figure this out. It's all pretty simple stuff, but very annoying... Co-authored-by: Who? Me?! <[email protected]>
| * More details on how to set up cocWho? Me?!2019-06-181-0/+21
|/
* Merge #1409bors[bot]2019-06-165-24/+19
|\ | | | | | | | | | | | | | | | | | | | | | | 1409: The Fall down of failures r=matklad a=mominul :grin: Replaced all the uses of `failure` crate with `std::error::Error`. Closes #1400 Depends on rust-analyzer/teraron#1 Co-authored-by: Muhammad Mominul Huque <[email protected]>
| * Update teraron versionMuhammad Mominul Huque2019-06-162-5/+5
| |
| * Fall down of failuresMuhammad Mominul Huque2019-06-155-24/+19
| |
* | Merge #1411bors[bot]2019-06-169-81/+245
|\ \ | | | | | | | | | | | | | | | | | | | | | 1411: add analysis-bench to benchmark incremental analysis r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | add analysis-bench to benchmark incremental analysisAleksey Kladov2019-06-169-81/+245
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Can be used like this: ``` $ cargo run --release -p ra_cli -- \ analysis-bench ../chalk/ \ --complete ../chalk/chalk-engine/src/logic.rs:94:0 loading: 225.970093ms from scratch: 8.492373325s no change: 445.265µs trivial change: 95.631242ms ``` Or like this: ``` $ cargo run --release -p ra_cli -- \ analysis-bench ../chalk/ \ --highlight ../chalk/chalk-engine/src/logic.rs loading: 209.873484ms from scratch: 9.504916942s no change: 7.731119ms trivial change: 124.984039ms ``` "from scratch" includes initial analysis of the relevant bits of the project "no change" just asks the same question for the second time. It measures overhead on assembling the answer outside of salsa. "trivial change" doesn't do an actual salsa change, it just advances the revision. This test how fast is salsa at validating things.
* | Merge #1408bors[bot]2019-06-1619-70/+454
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | 1408: Associated type basics & Deref support r=matklad a=flodiebold This adds the necessary Chalk integration to handle associated types and uses it to implement support for `Deref` in the `*` operator and autoderef; so e.g. dot completions through an `Arc` work now. It doesn't yet implement resolution of associated types in paths, though. Also, there's a big FIXME about handling variables in the solution we get from Chalk correctly. Co-authored-by: Florian Diebold <[email protected]>
| * | Add test for autoderef infinite recursionFlorian Diebold2019-06-161-0/+25
| | |
| * | Simplifications / cleanup from reviewFlorian Diebold2019-06-167-38/+31
| | |
| * | Some more cleanupFlorian Diebold2019-06-151-4/+4
| | |