aboutsummaryrefslogtreecommitdiff
path: root/crates
Commit message (Collapse)AuthorAgeFilesLines
* Merge #9364bors[bot]2021-06-214-97/+157
|\ | | | | | | | | | | | | | | 9364: Split hover actions config into its own config struct r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <[email protected]>
| * Collapse documentation and markdown config settings into an enumLukas Wirth2021-06-213-39/+70
| |
| * Split hover actions config into its own config structLukas Wirth2021-06-214-81/+110
| |
* | Merge #9363bors[bot]2021-06-211-4/+10
|\ \ | |/ |/| | | | | | | | | | | | | | | 9363: Set explicit target directory to avoid cargo deadlock r=jonas-schievink a=oxalica Fix #9360 r? @jonas-schievink Co-authored-by: oxalica <[email protected]>
| * Set explicit target directory to avoid cargo deadlockoxalica2021-06-211-4/+10
| |
* | Merge #9362bors[bot]2021-06-211-1/+1
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | 9362: feature: massively improve performance for large files r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| * | feature: massively improve performance for large filesAleksey Kladov2021-06-211-1/+1
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This story begins in #8384, where we added a smart test for our syntax highting, which run the algorithm on synthetic files of varying length in order to guesstimate if the complexity is O(N^2) or O(N)-ish. The test turned out to be pretty effective, and flagged #9031 as a change that makes syntax highlighting accidentally quadratic. There was much rejoicing, for the time being. Then, lnicola asked an ominous question[1]: "Are we sure that the time is linear right now?" Of course it turned out that our sophisticated non-linearity detector *was* broken, and that our syntax highlighting *was* quadratic. Investigating that, many brave hearts dug deeper and deeper into the guts of rust-analyzer, only to get lost in a maze of traits delegating to traits delegating to macros. Eventually, matklad managed to peel off all layers of abstraction one by one, until almost nothing was left. In fact, the issue was discovered in the very foundation of the rust-analyzer -- in the syntax trees. Worse, it was not a new problem, but rather a well-know, well-understood and event (almost) well-fixed (!) performance bug. The problem lies within `SyntaxNodePtr` type -- a light-weight "address" of a node in a syntax tree [3]. Such pointers are used by rust-analyzer all other the place to record relationships between IR nodes and the original syntax. Internally, the pointer to a syntax node is represented by node's range. To "dereference" the pointer, you traverse the syntax tree from the root, looking for the node with the right range. The inner loop of this search is finding a node's child whose range contains the specified range. This inner loop was implemented by naive linear search over all the children. For wide trees, dereferencing a single `SyntaxNodePtr` was linear. The problem with wide trees though is that they contain a lot of nodes! And dereferencing pointers to all the nodes is quadratic in the size of the file! The solution to this problem is to speed up the children search -- rather than doing a linear lookup, we can use binary search to locate the child with the desired interval. Doing this optimization was one of the motivations (or rather, side effects) of #6857. That's why `rowan` grew the useful `child_or_token_at_range` method which does exactly this binary search. But looks like we've never actually switch to this method? Oups. Lesson learned: do not leave broken windows in the fundamental infra. Otherwise, you'll have to repeatedly re-investigate the issue, by digging from the top of the Everest down to the foundation! [1]: https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frust-analyzer/topic/.60syntax_highlighting_not_quadratic.60.20failure/near/240811501 [2]: https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frust-analyzer/topic/Syntax.20highlighting.20is.20quadratic [3]: https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frust-analyzer/topic/Syntax.20highlighting.20is.20quadratic/near/243412392
* | Move features into potential_cfg_optionsJamie Cunliffe2021-06-216-38/+32
| |
* | Improve completion of cfg attributesJamie Cunliffe2021-06-218-0/+185
|/ | | | | | | | | | | | The completion of cfg will look at the enabled cfg keys when performing completion. It will also look crate features when completing a feature cfg option. A fixed list of known values for some cfg options are provided. For unknown keys it will look at the enabled values for that cfg key, which means that completion will only show enabled options for those.
* Merge #9165bors[bot]2021-06-2119-80/+66
|\ | | | | | | | | | | | | | | 9165: Apply some clippy suggestions r=matklad a=clemenswasser Co-authored-by: Clemens Wasser <[email protected]>
| * Apply some clippy suggestionsClemens Wasser2021-06-2119-80/+66
| |
* | Merge #9264bors[bot]2021-06-214-105/+112
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | 9264: feat: Make documentation on hover configurable r=Veykril a=Veykril This also implements deprecation support for config options as this renames `hoverActions_linksInHover` to `hover_linksInHover`. Fixes #9232 Co-authored-by: Lukas Wirth <[email protected]>
| * | Remove deprecation support in configLukas Wirth2021-06-211-39/+13
| | |
| * | typoLukas Wirth2021-06-141-1/+1
| | |
| * | Add configuration deprecationLukas Wirth2021-06-141-10/+39
| | |
| * | Don't ignore hover documentation setting for keyword hoversLukas Wirth2021-06-141-2/+4
| | |
| * | Make documentation on hover configurableLukas Wirth2021-06-144-103/+105
| | |
* | | Merge #9314bors[bot]2021-06-211-6/+20
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 9314: Fix extract_function with await r=sasurau4 a=sasurau4 Fix #9287 Co-authored-by: Daiki Ihara <[email protected]>
| * | | Fix var nameDaiki Ihara2021-06-211-7/+7
| | | |
| * | | Fix pointed outDaiki Ihara2021-06-211-5/+16
| | | |
| * | | Fix extract_function with awaitDaiki Ihara2021-06-211-2/+5
| | | |
* | | | Merge #9227bors[bot]2021-06-215-49/+115
|\ \ \ \ | |_|_|/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 9227: Add a config setting to disable the 'test' cfg in specified crates r=matklad a=lf- If you are opening libcore from rust-lang/rust as opposed to e.g. goto definition from some other crate which would use the sysroot instance of libcore, a `#![cfg(not(test))]` would previously have made all the code excluded from the module tree, breaking the editor experience. Core does not need to ever be edited with `#[cfg(test)]` enabled, as the tests are in another crate. This PR puts in a slight hack that checks for the crate name "core" and turns off `#[cfg(test)]` for that crate. Fixes #9203 Fixes #9226 Co-authored-by: Jade <[email protected]>
| * | | Implement a config override for the default #[cfg(test)] in cargo cratesJade2021-06-195-55/+93
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes crates which vanish when the 'test' cfg atom is set. Fix #7243. Fix #9203. Fix #7225.
| * | | Fix libcore not being included in rust-lang/rust module treeJade2021-06-192-2/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If you are opening libcore from rust-lang/rust as opposed to e.g. goto definition from some other crate which would use the sysroot instance of libcore, a `#![cfg(not(test))]` would previously have made all the code excluded from the module tree, breaking the editor experience. This puts in a slight hack that checks for the crate name "core" and turns off `#[cfg(test)]`.
* | | | Update sysroot cratesJonas Schievink2021-06-211-6/+5
| | | |
* | | | Merge #9356bors[bot]2021-06-2110-677/+557
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 9356: internal: Move out and regroup more completion tests r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <[email protected]>
| * | | | Various keyword completion fixesLukas Wirth2021-06-214-16/+22
| | | | |
| * | | | Move out completion type position testsLukas Wirth2021-06-215-206/+198
| | | | |
| * | | | Move out completion pattern testsLukas Wirth2021-06-215-467/+349
| | | | |
* | | | | Don't insert `}` when typing `{` in stringJonas Schievink2021-06-211-3/+33
| |_|/ / |/| | |
* | | | Fix `benchmark_include_macro`Florian Diebold2021-06-201-1/+1
| | | |
* | | | More cleanups, use `check` for `display_source_code` testsFlorian Diebold2021-06-202-85/+67
| | | |
* | | | Clean up coercion testsFlorian Diebold2021-06-201-552/+117
| | | |
* | | | test_utils: Make overlapping annotations possibleFlorian Diebold2021-06-201-6/+44
| | | |
* | | | Unify check_mismatches and check_typesFlorian Diebold2021-06-209-380/+353
| | | |
* | | | Add coverage mark for block local implsFlorian Diebold2021-06-201-1/+4
| | | |
* | | | fix: don't add duplicate `&` during completionAleksey Kladov2021-06-202-68/+72
| | | |
* | | | Merge #9344bors[bot]2021-06-201-24/+22
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 9344: fix: rename works when invoked on a reference r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| * | | | fix: rename works when invoked on a referenceAleksey Kladov2021-06-201-24/+22
| | | | |
* | | | | Merge #9328bors[bot]2021-06-201-1/+1
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 9328: internal: Update deps r=lnicola a=kjeremy Co-authored-by: kjeremy <[email protected]>
| * | | | | Update testkjeremy2021-06-181-1/+1
| | | | | |
* | | | | | Cleanup insert_use testsLukas Wirth2021-06-193-91/+78
| |_|/ / / |/| | | |
* | | | | Merge #9338bors[bot]2021-06-191-6/+1
|\ \ \ \ \ | |_|_|/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 9338: minor: use minicore r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| * | | | minor: use minicoreAleksey Kladov2021-06-191-6/+1
| | | | |
* | | | | Don't insert imports outside of cfg attributed itemsLukas Wirth2021-06-184-32/+118
| | | | |
* | | | | Merge #9334bors[bot]2021-06-1812-17/+89
|\ \ \ \ \ | |/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 9334: feat: Allow to disable import insertion on single path glob imports r=Veykril a=Veykril On by default as I feel like this is something the majority would prefer. Closes #8490 Co-authored-by: Lukas Wirth <[email protected]>
| * | | | Allow to disable import insertion on single path glob importsLukas Wirth2021-06-1812-17/+89
| | | | |
* | | | | minor: use minicoreAleksey Kladov2021-06-184-36/+18
| | | | |
* | | | | minor: use minicoreAleksey Kladov2021-06-182-69/+43
| | | | |
* | | | | minor: use minicoreAleksey Kladov2021-06-183-27/+10
| | | | |