aboutsummaryrefslogtreecommitdiff
path: root/crates/hir/src/code_model.rs
Commit message (Collapse)AuthorAgeFilesLines
...
*-. Merge #6130 #6135bors[bot]2020-10-121-1/+23
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 6130: Items case quick fix (snake_case / UPPER_SNAKE_CASE / CamelCase) r=matklad a=popzxc Resolves #4598. After a third try, it finally works. Boy, it appeared tougher than it seemed. Initially I thought like "Ha, `rustc` already tells us where idents are named incorrectly. It shouldn't be that hard, should it?". Well, the problems with the information provided by `rustc` appeared shortly: - `rustc` warnings are `flycheck` warnings, which are slightly aside from our diagnostics with fixes. When we map flycheck diagnostic to LSP, we can convert it into a fix, but only if it's marked as `Applicability::MachineApplicable`. Name case fix is marked `Applicability::MaybeIncorrect`, and for a reason: it only suggest to rename symbol under cursor, without tracking any references. - Warning spawned by `rustc` are identified by string labels rather than enum. It means that if one day the diagnostic will be renamed in `rustc`, `rust-analyzer` code will still compile, but won't find the required diagnostic by name anymore. If by chance this will happen when some unlucky guy will decide to create their first pull request, they'll be confused by suddenly failing tests (likely) not related to their changes. - Even if we'll try to build fixes atop of `rustc` warnings, we'll have to do it in the `rust_analyzer::diagnostics::to_proto` module, which is far less convenient for that matter than `ide` crate. That's why I decided that it's worth a separate `rust-analyzer` diagnostic, which will implement `DiagnosticWithFix` trait. After that, I discovered that currently `hir_ty::diagnostics` only check `DefWithBody` types, like function bodies. I had to add support for diagnostics which look at any `ModuleDef`. And of course, since I'd added a lot of new functionality, it required extensive testing. That explains why the diff is so big for a (looking) relatively small feature. I hope that this PR doesn't only add a small feature, but also creates a base for building another features. ## Example: ![case_quick_fix](https://user-images.githubusercontent.com/12111581/95008475-e07ee780-0622-11eb-9978-62a9ea0e7782.gif) P.S. My eyes were bleeding when I had to write the code for the example... 6135: when generating new function, focus on return type instead of body r=matklad a=bnjjj I made a little change when we use the assist to generate a new function, instead of focusing on the function body, it will focus on return type Co-authored-by: Igor Aleksanov <[email protected]> Co-authored-by: Benjamin Coenen <[email protected]>
| * | Apply case check diagnostic to impl itemsIgor Aleksanov2020-10-121-1/+2
| | |
| * | Add fix for incorrect case diagnosticIgor Aleksanov2020-10-121-25/+15
| | |
| * | Create basic support for names case checks and implement function name case ↵Igor Aleksanov2020-10-121-0/+31
| | | | | | | | | | | | check
* | | Merge #6195bors[bot]2020-10-121-1/+5
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 6195: Shorten iterators in associated params r=matklad a=SomeoneToIgnore Applies the same iterator-shortening logic to the iterator associated types, recursively. Before: ![image](https://user-images.githubusercontent.com/2690773/95662735-e6ecf200-0b41-11eb-8e54-28493ad4e644.png) After: <img width="1192" alt="image" src="https://user-images.githubusercontent.com/2690773/95662894-e9038080-0b42-11eb-897d-527571ccac58.png"> Co-authored-by: Kirill Bulatov <[email protected]>
| * | Also replace the associated types with iterKirill Bulatov2020-10-101-1/+5
| |/
* | Remove methodowner & fix formattingZac Pullar-Strecker2020-10-081-38/+1
| |
* | Rebase fixesZac Pullar-Strecker2020-10-081-1/+1
| |
* | Change Option::Some bug to a fixme noteZac Pullar-Strecker2020-10-081-0/+1
| | | | | | | | IMO this is too much work to be worth fixing at the moment.
* | Differentiate method/tymethod by determining 'defaultness'Zac Pullar-Strecker2020-10-081-1/+8
| | | | | | | | | | | | | | | | | | Currently a method only has defaultness if it is a provided trait method, but this will change when specialisation is available and may need to become a concept known to hir. I opted to go for a 'fewest changes' approach given specialisation is still under development.
* | Code reorganisation and field supportZac Pullar-Strecker2020-10-081-1/+47
|/
* Shorten type hints for std::iter IteratorsLukas Wirth2020-10-061-2/+35
|
* Merge #6124bors[bot]2020-10-061-3/+3
|\ | | | | | | | | | | | | | | | | | | | | | | 6124: Better normalized crate name usage r=jonas-schievink a=SomeoneToIgnore Closes https://github.com/rust-analyzer/rust-analyzer/issues/5343 Closes https://github.com/rust-analyzer/rust-analyzer/issues/5932 Uses normalized name for code snippets (to be able to test the fix), hover messages and documentation rewrite links (are there any tests for those?). Also renamed the field to better resemble the semantics. Co-authored-by: Kirill Bulatov <[email protected]>
| * Properly name the fieldKirill Bulatov2020-10-021-2/+2
| |
| * Fix the hover dash issuesKirill Bulatov2020-10-021-2/+2
| |
* | Make ImportPrefix a configuration optionLukas Wirth2020-10-051-1/+2
| |
* | Make find_path_prefixed configurableLukas Wirth2020-10-051-1/+2
|/
* Minor clippy performance suggestionskjeremy2020-09-301-1/+1
|
* Don't unnecessarily unnest imports for import insertionLukas Wirth2020-09-251-0/+10
|
* Merge #5846bors[bot]2020-09-241-5/+31
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 5846: Add references to fn args during completion r=matklad a=adamrk When completing a function call, if there is an argument taken as a ref or mut ref which matches the name and type of a variable in scope, we will insert a `&` or `&mut` when filling in the function arguments. This addresses https://github.com/rust-analyzer/rust-analyzer/issues/5449. E.g. ```rust fn foo(x: &i32) {} fn main() { let x = 5; foo # completing foo here generates `foo(&x)` now instead of `foo(x)` } ``` Co-authored-by: adamrk <[email protected]>
| * Remove exposing unificationadamrk2020-09-021-6/+0
| |
| * Add back Param structadamrk2020-09-011-2/+12
| |
| * Add references to fn args during completionadamrk2020-08-301-6/+28
| |
* | Rename `CustomDerive` to `ProcMacro`Jonas Schievink2020-09-181-2/+2
| | | | | | | | | | It handles fn-like macros too, and will handle attribute macros in the future
* | Fix type walking about type of async blockoxalica2020-09-111-0/+5
| |
* | Implement async blocksoxalica2020-09-101-0/+2
|/
* Tease apart orthogonal concerns in markdown link rewritingAleksey Kladov2020-08-261-0/+10
| | | | | | | | | | | | `hir` should know nothing about URLs, markdown and html. It should only be able to: * resolve stringy path from documentation * generate canonical stringy path for a def In contrast, link rewriting should not care about semantics of paths and names resolution, and should be concern only with text mangling bits.
* Remove AttrDefAleksey Kladov2020-08-251-5/+5
|
* Move attrs from code_module to a separate moduleAleksey Kladov2020-08-251-121/+2
|
* Use the same abstraction for attrs and docsAleksey Kladov2020-08-251-8/+3
| | | | | Doc comments *are* attributes, so there's no reason to have two crates here.
* Changes from reviewZac Pullar-Strecker2020-08-251-10/+8
|
* Renames, comments, and dead code removalZac Pullar-Strecker2020-08-241-18/+1
|
* Merge remote-tracking branch 'upstream/master' into 503-hover-doc-linksZac Pullar-Strecker2020-08-241-2/+120
|
* Better API factoring around self access modesAleksey Kladov2020-08-191-1/+11
|
* Introduce hir::ParamAleksey Kladov2020-08-191-2/+11
| | | | | We generally shouldn't expose TypeRef out of hir. So, let's just use a placehoder here.
* Add SelfParam to code_modelAleksey Kladov2020-08-191-15/+38
|
* Mark mutating functions with `mutable` modifier, and owning functions with ↵Paul Daniel Faria2020-08-161-0/+15
| | | | `consuming`.
* Don't expose hir::Path out of hirAleksey Kladov2020-08-151-6/+3
| | | | | | | | | | | | | | Conjecture: it's impossible to use hir::Path *correctly* from an IDE. I am not entirely sure about this, and we might need to add it back at some point, but I have to arguments that convince me that we probably won't: * `hir::Path` has to know about hygiene, which an IDE can't set up properly. * `hir::Path` lacks identity, but you actually have to know identity to resolve it correctly
* Make hygiene private to hirAleksey Kladov2020-08-131-0/+7
|
* Rename ra_hir -> hirAleksey Kladov2020-08-131-0/+1712