aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_def/src
Commit message (Collapse)AuthorAgeFilesLines
...
* | | Merge #8128bors[bot]2021-03-212-6/+28
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | | | | | | | 8128: Expand legacy-scoped macro during collection r=jonas-schievink a=jonas-schievink Fixes https://github.com/rust-analyzer/rust-analyzer/issues/8120 Co-authored-by: Jonas Schievink <[email protected]>
| * | Expand legacy-scoped macro during collectionJonas Schievink2021-03-212-6/+28
| |/
* | Fix incorrect scoping in while expressionsLukas Wirth2021-03-211-1/+1
| |
* | Track labels in scopesLukas Wirth2021-03-212-11/+52
|/
* Add `AttrsWithOwner` and clean up `source_map`Jonas Schievink2021-03-192-126/+192
|
* Return `Either` from `MacroDefId::ast_id`Jonas Schievink2021-03-191-3/+4
|
* Fix handling of `#![cfg]` in outline module fileJonas Schievink2021-03-192-21/+48
|
* Add builtin macro-like attributesJonas Schievink2021-03-191-2/+5
|
* Rename derive-specific APIsJonas Schievink2021-03-193-8/+8
|
* Merge #8097bors[bot]2021-03-191-1/+1
|\ | | | | | | | | | | | | | | 8097: Parse extended_key_value_attributes r=jonas-schievink a=Veykril Companion PR https://github.com/rust-analyzer/ungrammar/pull/31 Co-authored-by: Lukas Wirth <[email protected]>
| * Parse extended_key_value_attributesLukas Wirth2021-03-191-1/+1
| |
* | Document fields of `ModuleId`Jonas Schievink2021-03-181-1/+5
| |
* | Merge #8083bors[bot]2021-03-181-16/+48
|\ \ | | | | | | | | | | | | | | | | | | | | | 8083: Track source file IDs in source mapping of Attrs r=jonas-schievink a=Veykril Fixes the panics/incorrect injection highlighting of outline module declarations until we figure out a nicer source mapping strategy for attributes. Co-authored-by: Lukas Wirth <[email protected]>
| * | Track source file IDs in source mapping of AttrsLukas Wirth2021-03-181-16/+48
| | |
* | | Add testJonas Schievink2021-03-181-0/+26
| | |
* | | Record custom derive helpers in `DefMap`Jonas Schievink2021-03-183-25/+91
| | | | | | | | | | | | Also clean up proc macro attribute parsing a bit
* | | Store an `AstId` for procedural macrosJonas Schievink2021-03-182-7/+8
| | |
* | | Make MacroDefId's `AstId` mandatory when possibleJonas Schievink2021-03-184-15/+12
| |/ |/|
* | Merge #8082bors[bot]2021-03-182-0/+12
|\ \ | |/ |/| | | | | | | | | | | | | | | | | | | 8082: Proper handle inner recursive macro rules cases r=edwin0cheng a=edwin0cheng Fixes #7645 cc @jonas-schievink bors r+ Co-authored-by: Edwin Cheng <[email protected]>
| * Handle inner recursive macro rules casesEdwin Cheng2021-03-182-0/+12
| |
* | Rename `item_tree` query to `file_item_tree`Jonas Schievink2021-03-185-11/+11
| |
* | Make `ItemTreeId` its own typeJonas Schievink2021-03-187-36/+76
| |
* | Avoid cloning `CfgOptions`Jonas Schievink2021-03-181-2/+3
| |
* | Support `#[cfg]` on all associated itemsJonas Schievink2021-03-181-5/+5
| |
* | Merge #8075bors[bot]2021-03-172-16/+37
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | 8075: Fix `use crate as <name>;` imports r=jonas-schievink a=jonas-schievink Fixes https://github.com/rust-analyzer/rust-analyzer/issues/4644 bors r+ Co-authored-by: Jonas Schievink <[email protected]>
| * | Fix `use crate as <name>;` importsJonas Schievink2021-03-172-16/+37
| | |
* | | Improve diagnostic when including nonexistent fileJonas Schievink2021-03-172-2/+2
|/ /
* | Use first early expansion error during nameresJonas Schievink2021-03-172-1/+20
| |
* | Apply `#[cfg]`s when computing function signaturesJonas Schievink2021-03-172-4/+17
| |
* | ItemTree: lower attributes on fn parametersJonas Schievink2021-03-173-23/+54
| |
* | Merge #8065bors[bot]2021-03-171-49/+56
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | 8065: Better handling of block doc comments r=Veykril a=Veykril Moves doc string processing to `Attrs::docs`, as we need the indent info from all comments before being able to know how much to strip Closes #7774 Co-authored-by: Lukas Wirth <[email protected]>
| * | Fix incorrect newline emission in Attrs::docsLukas Wirth2021-03-171-14/+14
| | |
| * | Better handling of block doc commentsLukas Wirth2021-03-171-38/+45
| | |
* | | Handle `#[cfg]` on call argumentsJonas Schievink2021-03-171-11/+16
|/ /
* | Merge #8059bors[bot]2021-03-171-6/+39
|\ \ | |/ |/| | | | | | | | | | | 8059: Move doc-comment highlight injection from AST to HIR r=matklad,jonas-schievink a=Veykril Fixes #5016 Co-authored-by: Lukas Wirth <[email protected]>
| * Remove quadratic attr source lookupLukas Wirth2021-03-171-0/+25
| |
| * Properly handle doc attributes in doc-comment highlight injectionLukas Wirth2021-03-161-1/+7
| |
| * Fix attribute index assignment in cfg_attr resolutionLukas Wirth2021-03-161-5/+7
| |
| * Move doc-comment highlight injection from AST to HIRLukas Wirth2021-03-161-1/+1
| |
* | Merge #8063bors[bot]2021-03-171-1/+1
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8063: couple clippy::complexity fixes r=matklad a=matthiaskrgr avoid redundant `.into()` calls to convert T into identical T (`let x: String = String::from("hello").into();`) use `if let Some(x)` instead of `.is_some()` + `.unwrap()` don't clone Copy types remove redundant wrapped ?s: `Some(Some(3)?)` can just be `Some(3)` use `.map(|x| y)` instead of `and_then(|x| Some(y)` on `Option`s Co-authored-by: Matthias Krüger <[email protected]>
| * | avoid converting types into themselves via .into() (clippy::useless-conversion)Matthias Krüger2021-03-171-1/+1
| |/ | | | | | | example: let x: String = String::from("hello world").into();
* | Merge #8048bors[bot]2021-03-177-46/+79
|\ \ | |/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8048: Fix missing unresolved macro diagnostic in function body r=edwin0cheng a=brandondong This was an issue I found while working on https://github.com/rust-analyzer/rust-analyzer/pull/7970. **Reproduction:** 1. Call a non-existent macro in a function body. ``` fn main() { foo!(); } ``` 2. No diagnostics are raised. An unresolved-macro-call diagnostic is expected. 3. If the macro call is instead outside of the function body, this works as expected. I believe this worked previously and regressed in https://github.com/rust-analyzer/rust-analyzer/pull/7805. **Behavior prior to https://github.com/rust-analyzer/rust-analyzer/pull/7805:** - The unresolved-macro-call diagnostic did not exist. Instead, a macro-error diagnostic would be raised with the text "could not resolve macro [path]". - This was implemented by adding an error to the error sink (https://github.com/rust-analyzer/rust-analyzer/pull/7805/files#diff-50a326c5ae465bd9b31ee4310186380aa06e4fa1f6b41dbc0aed5bcc656a3cb8L657). - The error was propagated through https://github.com/rust-analyzer/rust-analyzer/blob/1a82af3527e476d52410ff4dfd2fb4c57466abcb/crates/hir_def/src/body.rs#L123 eventually reaching https://github.com/rust-analyzer/rust-analyzer/blob/1a82af3527e476d52410ff4dfd2fb4c57466abcb/crates/hir_def/src/body/lower.rs#L569. **Behavior after:** - Instead of writing to the error sink, an UnresolvedMacro error is now returned (https://github.com/rust-analyzer/rust-analyzer/pull/7805/files#diff-50a326c5ae465bd9b31ee4310186380aa06e4fa1f6b41dbc0aed5bcc656a3cb8R631). - The parent caller throws away the error as its function signature is `Option<MacroCallId>` (https://github.com/rust-analyzer/rust-analyzer/pull/7805/files#diff-50a326c5ae465bd9b31ee4310186380aa06e4fa1f6b41dbc0aed5bcc656a3cb8R604). - We instead now reach the warn condition (https://github.com/rust-analyzer/rust-analyzer/blob/1a82af3527e476d52410ff4dfd2fb4c57466abcb/crates/hir_def/src/body.rs#L124) and no diagnostics are created in https://github.com/rust-analyzer/rust-analyzer/blob/1a82af3527e476d52410ff4dfd2fb4c57466abcb/crates/hir_def/src/body/lower.rs#L575. **Fix:** - Make sure to propagate the UnresolvedMacro error. Report the error using the new unresolved-macro-call diagnostic. Co-authored-by: Brandon <[email protected]>
| * Follow established ErrorEmitted patternBrandon2021-03-172-16/+13
| |
| * Fix missing unresolved macro diagnostic in function bodyBrandon2021-03-167-39/+75
| |
| |
| \
*-. \ Merge #7900 #8000bors[bot]2021-03-165-20/+77
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7900: show function params in completion detail r=matklad a=JoshMcguigan This resolves #7842 by updating the detail for function completions from `-> T` to `fn(T, U) -> V`. I added an expicit unit test for this, `ide_completion::render::fn_detail_includes_args_and_return_type`, which passes. Lots of other unit tests fail (~60 of them) due to this change, although I believe the failures are purely cosmetic (they were testing the exact format of this output). I'm happy to go update those tests, but before I do that I'd like to make sure this is in fact the format we want for the detail? edit - I realized `UPDATE_EXPECT=1 cargo test` automatically updates `expect!` tests. Big :+1: to whoever worked on that! So I'll go ahead and update all these tests soon. But I still would like to confirm `fn(T, U) -> V` is the desired content in the `detail` field. 8000: Use hir formatter for hover text r=matklad a=oxalica Fix #2765 , (should) fix #4665 Co-authored-by: Josh Mcguigan <[email protected]> Co-authored-by: oxalica <[email protected]>
| | * | Use hir formatter moreoxalica2021-03-154-7/+27
| | | |
| | * | Impl HirDisplay for function hover messageoxalica2021-03-151-1/+10
| | | |
| | * | Introduce FunctionQualifier for hir::FunctionDataoxalica2021-03-153-12/+40
| | | |
* | | | Fix macro expansion for statements w/o semicolonEdwin Cheng2021-03-162-47/+63
| |_|/ |/| |
* | | Merge #7970bors[bot]2021-03-153-11/+69
|\ \ \ | |_|/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7970: Fix incorrect diagnostics for failing built in macros r=jonas-schievink a=brandondong **Reproduction:** 1. Use a built in macro in such a way that rust-analyzer fails to expand it. For example: **lib.rs** ``` include!("<valid file but without a .rs extension so it is not indexed by rust-analyzer>"); ``` 2. rust-analyzer highlights the macro call and says the macro itself cannot be resolved even though include! is in the standard library (unresolved-macro-call diagnostic). 3. No macro-error diagnostic is raised. **Root cause for incorrect unresolved-macro-call diagnostic:** 1. collector:collect_macro_call is able to resolve include! in legacy scope but the expansion fails. Therefore, it's pushed into unexpanded_macros to be retried with module scope. 2. include! fails at the resolution step in collector:resolve_macros now that it's using module scope. Therefore, it's retained in unexpanded_macros. 3. Finally, collector:finish tries resolving the remaining unexpanded macros but only with module scope. include! again fails at the resolution step so a diagnostic is created. **Root cause for missing macro-error diagnostic:** 1. In collector:resolve_macros, directive.legacy is None since eager expansion failed in collector:collect_macro_call. The macro_call_as_call_id fails to resolve since we're retrying in module scope. Therefore, collect_macro_expansion is not called for the macro and no macro-error diagnostic is generated. **Fix:** - In collector:collect_macro_call, do not add failing built-in macros to the unexpanded_macros list and immediately raise the macro-error diagnostic. This is in contrast to lazy macros which are resolved in collector::resolve_macros and later expanded in collect_macro_expansion where a macro-error diagnostic may be raised. Co-authored-by: Brandon <[email protected]> Co-authored-by: brandondong <[email protected]>