6376: Avoid impls_fnonce to return true when the trait solving is ambiguous r=flodiebold a=GrayJack
This PR should fix#6375
This adds a variation of `method_resolution::implements_trait` called `method_resolution::implements_trait_unique`, that only returns true when the trait solving is unique, and also change `impls_fnonce` to use the later instead.
I also added a test just to be sure.
Co-authored-by: GrayJack <gr41.j4ck@gmail.com>
6351: Organized completions r=popzxc a=popzxc
This PR continues the work on refactoring of the `completions` crate.
In this episode:
- Actual completions methods are encapsulated into `completions` module, so they aren't mixed with the rest of the code.
- Name duplication was removed (`complete_attribute` => `completions::attribute`, `completion_context` => `context`).
- `Completions` structure was moved from `item` module to the `completions`.
- `presentation` module was removed, as it was basically a module with `impl` for `Completions`.
- Code approaches were a bit unified here and there.
Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>
6367: Handle #![cfg] in crate root r=jonas-schievink a=jonas-schievink
Now we correctly skip analysis of winapi on non-Windows platforms.
bors r+ 🤖
Co-authored-by: Jonas Schievink <jonas.schievink@ferrous-systems.com>
6333: Don't interpret type path as part of visibility. r=matklad a=ArifRoktim
This closes#5902.
I only check that the next token isn't equal to `T![:]`, instead of the next two not being equal to `T![::]`. Is that ok?
Co-authored-by: Arif Roktim <arifrroktim@gmail.com>
6350: Make IncorrectDiagnostic match rustc by copying rustc's code. r=popzxc a=ArifRoktim
This closes#6343 and closes#6345.
The old algorithm which used a `DetectedCase` enum, didn't match how rustc thinks of cases. Some inputs can be interpreted as more than 1 case depending on the situation. For example, to rustc:
- `ABCD`: Can be both camel case and upper snake case
- `X86_64`: Can be both camel case and upper snake case
I could've made `detect_case` return a collection of `DetectedCase` and then modified the other code as such, but I think using the same code rustc uses is simpler and a surefire way to achieve the same diagnostics as rustc.
Co-authored-by: Arif Roktim <arifrroktim@gmail.com>
6361: Textmate grammar: angle bracket fix (closes#6323) r=dustypomerleau a=dustypomerleau
Fixes#6323
After tinkering, it became clear that `<` and `>` should really default to the punctuation interpretation in the vast majority of cases. In addition, the breakage is greater when an angle bracket is missed. So, rather than optimizing for a type parameter `meta` scope and considering every possible parent scope and child scope, the easier fix was to narrow the case where `<` and `>` are treated as comparison operators.
Co-authored-by: Dusty Pomerleau <dustypomerleau@users.noreply.github.com>
6357: Don't keep parens around with remove-dbg r=SomeoneToIgnore a=Veykril
Fixes#6355
~~This causes remove-dbg to not keep parentheses when it comes to ranges though due to ranges not having `DOT2` and `DOT2EQ` tokens but having two `DOT` tokens inside of macro invocations.~~
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
6354: Add tracing to main rust-analyzer binary r=flodiebold a=flodiebold
This makes `CHALK_DEBUG` logging work again e.g. when running `analysis-stats`, which is very helpful for debugging.
This change shouldn't regress compile times at all. The reason for that is that chalk-solve already pulls in these crates, and while that's behind a feature (mostly for our benefit, I think) we never actually disabled that feature 😅 So alternatively, we could disable the feature and maybe get an improvement in compile times. In my test I just did to see the impact of that, this PR actually compiled faster than the one just removing tracing though, so it's probably not a big deal.
Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
6353: Get rid of FAKE_PLACEHOLDER r=flodiebold a=flodiebold
The lifetime placeholder can be replaced by the static lifetime, and for array
sizes we should just be using a concrete const.
Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>