Commit Graph

22425 Commits

Author SHA1 Message Date
bors
a64c12097f Auto merge of #12492 - bjorn3:proc_macro_abi_1_63, r=lnicola
feat: Add proc macro ABI for rustc 1.63

Fixes https://github.com/rust-lang/rust-analyzer/issues/12489

This bumps the MSRV to 1.61 due to usage of function pointers and `impl Trait` in const functions.

<details>

<summary>Diff from upstream proc_macro as of rust-lang/rust@e45d9973b2 (misses lib.rs as it got renamed to mod.rs)</summary>

```diff
diff -u --recursive ../rust/library/proc_macro/src/bridge/client.rs crates/proc-macro-srv/src/abis/abi_1_63/proc_macro/bridge/client.rs
--- ../rust/library/proc_macro/src/bridge/client.rs     2022-06-08 13:14:57.763123238 +0000
+++ crates/proc-macro-srv/src/abis/abi_1_63/proc_macro/bridge/client.rs 2022-06-08 13:33:23.378430287 +0000
`@@` -430,27 +430,27 `@@`
     buf
 }

-impl Client<crate::TokenStream, crate::TokenStream> {
-    pub const fn expand1(f: impl Fn(crate::TokenStream) -> crate::TokenStream + Copy) -> Self {
+impl Client<super::super::TokenStream, super::super::TokenStream> {
+    pub const fn expand1(f: impl Fn(super::super::TokenStream) -> super::super::TokenStream + Copy) -> Self {
         Client {
             get_handle_counters: HandleCounters::get,
             run: super::selfless_reify::reify_to_extern_c_fn_hrt_bridge(move |bridge| {
-                run_client(bridge, |input| f(crate::TokenStream(input)).0)
+                run_client(bridge, |input| f(super::super::TokenStream(input)).0)
             }),
             _marker: PhantomData,
         }
     }
 }

-impl Client<(crate::TokenStream, crate::TokenStream), crate::TokenStream> {
+impl Client<(super::super::TokenStream, super::super::TokenStream), super::super::TokenStream> {
     pub const fn expand2(
-        f: impl Fn(crate::TokenStream, crate::TokenStream) -> crate::TokenStream + Copy,
+        f: impl Fn(super::super::TokenStream, super::super::TokenStream) -> super::super::TokenStream + Copy,
     ) -> Self {
         Client {
             get_handle_counters: HandleCounters::get,
             run: super::selfless_reify::reify_to_extern_c_fn_hrt_bridge(move |bridge| {
                 run_client(bridge, |(input, input2)| {
-                    f(crate::TokenStream(input), crate::TokenStream(input2)).0
+                    f(super::super::TokenStream(input), super::super::TokenStream(input2)).0
                 })
             }),
             _marker: PhantomData,
`@@` -464,17 +464,17 `@@`
     CustomDerive {
         trait_name: &'static str,
         attributes: &'static [&'static str],
-        client: Client<crate::TokenStream, crate::TokenStream>,
+        client: Client<super::super::TokenStream, super::super::TokenStream>,
     },

     Attr {
         name: &'static str,
-        client: Client<(crate::TokenStream, crate::TokenStream), crate::TokenStream>,
+        client: Client<(super::super::TokenStream, super::super::TokenStream), super::super::TokenStream>,
     },

     Bang {
         name: &'static str,
-        client: Client<crate::TokenStream, crate::TokenStream>,
+        client: Client<super::super::TokenStream, super::super::TokenStream>,
     },
 }

`@@` -490,21 +490,21 `@@`
     pub const fn custom_derive(
         trait_name: &'static str,
         attributes: &'static [&'static str],
-        expand: impl Fn(crate::TokenStream) -> crate::TokenStream + Copy,
+        expand: impl Fn(super::super::TokenStream) -> super::super::TokenStream + Copy,
     ) -> Self {
         ProcMacro::CustomDerive { trait_name, attributes, client: Client::expand1(expand) }
     }

     pub const fn attr(
         name: &'static str,
-        expand: impl Fn(crate::TokenStream, crate::TokenStream) -> crate::TokenStream + Copy,
+        expand: impl Fn(super::super::TokenStream, super::super::TokenStream) -> super::super::TokenStream + Copy,
     ) -> Self {
         ProcMacro::Attr { name, client: Client::expand2(expand) }
     }

     pub const fn bang(
         name: &'static str,
-        expand: impl Fn(crate::TokenStream) -> crate::TokenStream + Copy,
+        expand: impl Fn(super::super::TokenStream) -> super::super::TokenStream + Copy,
     ) -> Self {
         ProcMacro::Bang { name, client: Client::expand1(expand) }
     }
diff -u --recursive ../rust/library/proc_macro/src/bridge/mod.rs crates/proc-macro-srv/src/abis/abi_1_63/proc_macro/bridge/mod.rs
--- ../rust/library/proc_macro/src/bridge/mod.rs        2022-06-08 13:14:57.763123238 +0000
+++ crates/proc-macro-srv/src/abis/abi_1_63/proc_macro/bridge/mod.rs    2022-06-08 13:33:39.694243060 +0000
`@@` -8,7 +8,7 `@@`

 #![deny(unsafe_code)]

-use crate::{Delimiter, Level, LineColumn, Spacing};
+pub use super::{Delimiter, Level, LineColumn, Spacing};
 use std::fmt;
 use std:#️⃣:Hash;
 use std::marker;
diff '--color=always' -u --recursive ../rust/library/proc_macro/src/bridge/server.rs crates/proc-macro-srv/src/abis/abi_1_63/proc_macro/bridge/server.rs
--- ../rust/library/proc_macro/src/bridge/server.rs     2022-06-08 13:14:57.763123238 +0000
+++ crates/proc-macro-srv/src/abis/abi_1_63/proc_macro/bridge/server.rs 2022-06-08 13:33:54.306075391 +0000
`@@` -274,7 +274,7 `@@`
     Result::decode(&mut &buf[..], &mut dispatcher.handle_store)
 }

-impl client::Client<crate::TokenStream, crate::TokenStream> {
+impl client::Client<super::super::TokenStream, super::super::TokenStream> {
     pub fn run<S: Server>(
         &self,
         strategy: &impl ExecutionStrategy,
`@@` -295,7 +295,7 `@@`
     }
 }

-impl client::Client<(crate::TokenStream, crate::TokenStream), crate::TokenStream> {
+impl client::Client<(super::super::TokenStream, super::super::TokenStream), super::super::TokenStream> {
     pub fn run<S: Server>(
         &self,
         strategy: &impl ExecutionStrategy,
diff -u --recursive ../rust/library/proc_macro/src/diagnostic.rs crates/proc-macro-srv/src/abis/abi_1_63/proc_macro/diagnostic.rs
--- ../rust/library/proc_macro/src/diagnostic.rs        2022-05-11 10:07:59.099909725 +0000
+++ crates/proc-macro-srv/src/abis/abi_1_63/proc_macro/diagnostic.rs    2022-06-08 13:35:01.169308145 +0000
`@@` -1,7 +1,6 `@@`
-use crate::Span;
+use super::Span;

 /// An enum representing a diagnostic level.
-#[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
 #[derive(Copy, Clone, Debug)]
 #[non_exhaustive]
 pub enum Level {
`@@` -16,27 +15,23 `@@`
 }

 /// Trait implemented by types that can be converted into a set of `Span`s.
-#[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
 pub trait MultiSpan {
     /// Converts `self` into a `Vec<Span>`.
     fn into_spans(self) -> Vec<Span>;
 }

-#[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
 impl MultiSpan for Span {
     fn into_spans(self) -> Vec<Span> {
         vec![self]
     }
 }

-#[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
 impl MultiSpan for Vec<Span> {
     fn into_spans(self) -> Vec<Span> {
         self
     }
 }

-#[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
 impl<'a> MultiSpan for &'a [Span] {
     fn into_spans(self) -> Vec<Span> {
         self.to_vec()
`@@` -45,7 +40,6 `@@`

 /// A structure representing a diagnostic message and associated children
 /// messages.
-#[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
 #[derive(Clone, Debug)]
 pub struct Diagnostic {
     level: Level,
`@@` -56,7 +50,6 `@@`

 macro_rules! diagnostic_child_methods {
     ($spanned:ident, $regular:ident, $level:expr) => {
-        #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
         #[doc = concat!("Adds a new child diagnostics message to `self` with the [`",
                         stringify!($level), "`] level, and the given `spans` and `message`.")]
         pub fn $spanned<S, T>(mut self, spans: S, message: T) -> Diagnostic
`@@` -68,7 +61,6 `@@`
             self
         }

-        #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
         #[doc = concat!("Adds a new child diagnostic message to `self` with the [`",
                         stringify!($level), "`] level, and the given `message`.")]
         pub fn $regular<T: Into<String>>(mut self, message: T) -> Diagnostic {
`@@` -80,10 +72,8 `@@`

 /// Iterator over the children diagnostics of a `Diagnostic`.
 #[derive(Debug, Clone)]
-#[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
 pub struct Children<'a>(std::slice::Iter<'a, Diagnostic>);

-#[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
 impl<'a> Iterator for Children<'a> {
     type Item = &'a Diagnostic;

`@@` -92,17 +82,14 `@@`
     }
 }

-#[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
 impl Diagnostic {
     /// Creates a new diagnostic with the given `level` and `message`.
-    #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
     pub fn new<T: Into<String>>(level: Level, message: T) -> Diagnostic {
         Diagnostic { level, message: message.into(), spans: vec![], children: vec![] }
     }

     /// Creates a new diagnostic with the given `level` and `message` pointing to
     /// the given set of `spans`.
-    #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
     pub fn spanned<S, T>(spans: S, level: Level, message: T) -> Diagnostic
     where
         S: MultiSpan,
`@@` -117,59 +104,51 `@@`
     diagnostic_child_methods!(span_help, help, Level::Help);

     /// Returns the diagnostic `level` for `self`.
-    #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
     pub fn level(&self) -> Level {
         self.level
     }

     /// Sets the level in `self` to `level`.
-    #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
     pub fn set_level(&mut self, level: Level) {
         self.level = level;
     }

     /// Returns the message in `self`.
-    #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
     pub fn message(&self) -> &str {
         &self.message
     }

     /// Sets the message in `self` to `message`.
-    #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
     pub fn set_message<T: Into<String>>(&mut self, message: T) {
         self.message = message.into();
     }

     /// Returns the `Span`s in `self`.
-    #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
     pub fn spans(&self) -> &[Span] {
         &self.spans
     }

     /// Sets the `Span`s in `self` to `spans`.
-    #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
     pub fn set_spans<S: MultiSpan>(&mut self, spans: S) {
         self.spans = spans.into_spans();
     }

     /// Returns an iterator over the children diagnostics of `self`.
-    #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
     pub fn children(&self) -> Children<'_> {
         Children(self.children.iter())
     }

     /// Emit the diagnostic.
-    #[unstable(feature = "proc_macro_diagnostic", issue = "54140")]
     pub fn emit(self) {
-        fn to_internal(spans: Vec<Span>) -> crate::bridge::client::MultiSpan {
-            let mut multi_span = crate::bridge::client::MultiSpan::new();
+        fn to_internal(spans: Vec<Span>) -> super::bridge::client::MultiSpan {
+            let mut multi_span = super::bridge::client::MultiSpan::new();
             for span in spans {
                 multi_span.push(span.0);
             }
             multi_span
         }

-        let mut diag = crate::bridge::client::Diagnostic::new(
+        let mut diag = super::bridge::client::Diagnostic::new(
             self.level,
             &self.message[..],
             to_internal(self.spans),
Only in ../rust/library/proc_macro/src/: lib.rs
Only in crates/proc-macro-srv/src/abis/abi_1_63/proc_macro/: mod.rs
diff -u --recursive ../rust/library/proc_macro/src/quote.rs crates/proc-macro-srv/src/abis/abi_1_63/proc_macro/quote.rs
--- ../rust/library/proc_macro/src/quote.rs     2022-05-11 10:22:36.097429479 +0000
+++ crates/proc-macro-srv/src/abis/abi_1_63/proc_macro/quote.rs 2022-06-08 13:35:08.737221303 +0000
`@@` -4,7 +4,7 `@@`
 //! This quasiquoter uses macros 2.0 hygiene to reliably access
 //! items from `proc_macro`, to build a `proc_macro::TokenStream`.

-use crate::{Delimiter, Group, Ident, Literal, Punct, Spacing, Span, TokenStream, TokenTree};
+use super::{Delimiter, Group, Ident, Literal, Punct, Spacing, Span, TokenStream, TokenTree};

 macro_rules! quote_tt {
     (($($t:tt)*)) => { Group::new(Delimiter::Parenthesis, quote!($($t)*)) };
`@@` -59,10 +59,9 `@@`
 /// This is the actual implementation of the `quote!()` proc macro.
 ///
 /// It is loaded by the compiler in `register_builtin_macros`.
-#[unstable(feature = "proc_macro_quote", issue = "54722")]
 pub fn quote(stream: TokenStream) -> TokenStream {
     if stream.is_empty() {
-        return quote!(crate::TokenStream::new());
+        return quote!(super::TokenStream::new());
     }
     let proc_macro_crate = quote!(crate);
     let mut after_dollar = false;
`@@` -73,7 +72,7 `@@`
                 after_dollar = false;
                 match tree {
                     TokenTree::Ident(_) => {
-                        return Some(quote!(Into::<crate::TokenStream>::into(
+                        return Some(quote!(Into::<super::TokenStream>::into(
                         Clone::clone(&(@ tree))),));
                     }
                     TokenTree::Punct(ref tt) if tt.as_char() == '$' => {}
`@@` -86,33 +85,33 `@@`
                 }
             }

-            Some(quote!(crate::TokenStream::from((@ match tree {
-                TokenTree::Punct(tt) => quote!(crate::TokenTree::Punct(crate::Punct::new(
+            Some(quote!(super::TokenStream::from((@ match tree {
+                TokenTree::Punct(tt) => quote!(super::TokenTree::Punct(super::Punct::new(
                     (@ TokenTree::from(Literal::character(tt.as_char()))),
                     (@ match tt.spacing() {
-                        Spacing::Alone => quote!(crate::Spacing::Alone),
-                        Spacing::Joint => quote!(crate::Spacing::Joint),
+                        Spacing::Alone => quote!(super::Spacing::Alone),
+                        Spacing::Joint => quote!(super::Spacing::Joint),
                     }),
                 ))),
-                TokenTree::Group(tt) => quote!(crate::TokenTree::Group(crate::Group::new(
+                TokenTree::Group(tt) => quote!(super::TokenTree::Group(super::Group::new(
                     (@ match tt.delimiter() {
-                        Delimiter::Parenthesis => quote!(crate::Delimiter::Parenthesis),
-                        Delimiter::Brace => quote!(crate::Delimiter::Brace),
-                        Delimiter::Bracket => quote!(crate::Delimiter::Bracket),
-                        Delimiter::None => quote!(crate::Delimiter::None),
+                        Delimiter::Parenthesis => quote!(super::Delimiter::Parenthesis),
+                        Delimiter::Brace => quote!(super::Delimiter::Brace),
+                        Delimiter::Bracket => quote!(super::Delimiter::Bracket),
+                        Delimiter::None => quote!(super::Delimiter::None),
                     }),
                     (@ quote(tt.stream())),
                 ))),
-                TokenTree::Ident(tt) => quote!(crate::TokenTree::Ident(crate::Ident::new(
+                TokenTree::Ident(tt) => quote!(super::TokenTree::Ident(super::Ident::new(
                     (@ TokenTree::from(Literal::string(&tt.to_string()))),
                     (@ quote_span(proc_macro_crate.clone(), tt.span())),
                 ))),
-                TokenTree::Literal(tt) => quote!(crate::TokenTree::Literal({
+                TokenTree::Literal(tt) => quote!(super::TokenTree::Literal({
                     let mut iter = (@ TokenTree::from(Literal::string(&tt.to_string())))
-                        .parse::<crate::TokenStream>()
+                        .parse::<super::TokenStream>()
                         .unwrap()
                         .into_iter();
-                    if let (Some(crate::TokenTree::Literal(mut lit)), None) =
+                    if let (Some(super::TokenTree::Literal(mut lit)), None) =
                         (iter.next(), iter.next())
                     {
                         lit.set_span((@ quote_span(proc_macro_crate.clone(), tt.span())));
`@@` -129,12 +128,11 `@@`
         panic!("unexpected trailing `$` in `quote!`");
     }

-    quote!([(@ tokens)].iter().cloned().collect::<crate::TokenStream>())
+    quote!([(@ tokens)].iter().cloned().collect::<super::TokenStream>())
 }

 /// Quote a `Span` into a `TokenStream`.
 /// This is needed to implement a custom quoter.
-#[unstable(feature = "proc_macro_quote", issue = "54722")]
 pub fn quote_span(proc_macro_crate: TokenStream, span: Span) -> TokenStream {
     let id = span.save_span();
     quote!((@ proc_macro_crate ) ::Span::recover_proc_macro_span((@ TokenTree::from(Literal::usize_unsuffixed(id)))))
```

</details>
2022-06-08 14:34:40 +00:00
bjorn3
f9e1ff6846 Add doc comment 2022-06-08 14:31:36 +00:00
bjorn3
c6827e2f47 Rustfmt 2022-06-08 14:22:17 +00:00
bjorn3
a07b3103b1 Add proc macro ABI for rustc 1.63 2022-06-08 13:41:10 +00:00
yue4u
55bc693356 fix: show non-std enum in a fresh use tree completion 2022-06-08 20:55:16 +09:00
bors
66a842124b Auto merge of #12480 - KOLANICH-tools:unneeded_destr_assignment, r=jonas-schievink
Remove the unneeded destructuring assignment

in `run` in `project-model/src/build_scripts.rs`
2022-06-07 10:46:56 +00:00
KOLANICH
b3d2012659 Remove the unneeded destructuring assignment in run in project-model/src/build_scripts.rs 2022-06-06 14:02:34 +03:00
Hasan Ali
213fe5755c Add restartServerOnConfigChange setting 2022-06-06 08:51:50 +01:00
Hasan Ali
92241d65ae Restart server automatically on settings changes 2022-06-05 21:36:42 +01:00
bors
ad6810e90b Auto merge of #12475 - Veykril:trait-impl-completion, r=Veykril
fix: Fix trait impl completions using wrong insert position

Fixes https://github.com/rust-lang/rust-analyzer/issues/12474
2022-06-05 18:29:59 +00:00
Lukas Wirth
0be31d945e fix: Fix trait impl completions using wrong insert position 2022-06-05 20:29:36 +02:00
yue4u
11693dad88 fix: avoid adding enum parens in use 2022-06-06 01:34:01 +09:00
bors
995a17fbd9 Auto merge of #12472 - Veykril:output-ch, r=Veykril
internal: Keep output channels across restarts

cc https://github.com/rust-lang/rust-analyzer/pull/12470
2022-06-05 12:20:21 +00:00
Lukas Wirth
1127d2508f internal: Keep output channels across restarts 2022-06-05 14:20:06 +02:00
bors
d471d92259 Auto merge of #12471 - Veykril:reload-restart, r=Veykril
fix: Restart the server instead of reloading the window when config changes

 cc https://github.com/rust-lang/rust-analyzer/issues/12469#event-6743447147
2022-06-05 11:35:09 +00:00
Lukas Wirth
2a8ea089bf fix: Restart the server instead of reloading the window when config changes 2022-06-05 13:29:08 +02:00
bors
6667061841 Auto merge of #12470 - Veykril:output-ch, r=Veykril
fix: Cleanup output channels when restarting server

Fixes https://github.com/rust-lang/rust-analyzer/issues/12469
2022-06-05 11:25:02 +00:00
Lukas Wirth
fd298b3994 fix: Cleanup output channels when restarting server 2022-06-05 13:24:39 +02:00
bors
6d3396a492 Auto merge of #12466 - lnicola:worker-thread-stack, r=lnicola
Increase worker thread stack and name them

CC #11370
2022-06-05 07:59:42 +00:00
bors
815b43429d Auto merge of #12468 - Veykril:cancelled-diags, r=Veykril
minor: Don't log cancelled diagnostics

Since we retry requests now we can actually hit this legitimately
2022-06-04 23:40:05 +00:00
Lukas Wirth
d38b7b88c6 minor: Don't log cancelled diagnostics 2022-06-05 01:38:46 +02:00
bors
02c6c19152 Auto merge of #12467 - Veykril:assist-fix, r=Veykril
fix: Fix match to if let assist for wildcard pats
2022-06-04 23:02:50 +00:00
Lukas Wirth
fbffe73612 fix: Fix match to if let assist for wildcard pats 2022-06-05 01:02:24 +02:00
Laurențiu Nicola
0b9cd8a468 Increase worker thread stack and name them 2022-06-04 20:48:51 +03:00
bors
044b6ddca9 Auto merge of #12465 - Veykril:buildscripts, r=Veykril
internal: Only record build script outputs when the output has been changed

Follow up to https://github.com/rust-lang/rust-analyzer/pull/12457
2022-06-04 13:05:36 +00:00
Lukas Wirth
62fede212a Only record build script outputs when the output has been changed 2022-06-04 15:04:56 +02:00
harpsword
061c5ef075 feat: fix inline variable produce mismatched type
wrap reference for RefExpr initializer
2022-06-04 17:07:28 +08:00
bors
312913a640 Auto merge of #12461 - Veykril:completions, r=Veykril
Move trait_impl completion analysis into CompletionContext
2022-06-03 18:49:37 +00:00
Lukas Wirth
a2a74bf278 Remove some of the unnecessary helpfer functions from CompletionContext 2022-06-03 20:49:25 +02:00
Lukas Wirth
a0c1816e3a Simplify 2022-06-03 19:55:30 +02:00
Lukas Wirth
98c0578f15 Move trait_impl completion analysis into CompletionContext 2022-06-03 19:49:02 +02:00
bors
d06d0f8774 Auto merge of #12459 - Veykril:completions, r=Veykril
internal: Clean up keyword completion handling

https://github.com/rust-lang/rust-analyzer/issues/12144
2022-06-03 15:20:30 +00:00
bors
d0a7ad4a7f Auto merge of #12457 - Veykril:logging, r=Veykril
internal: Don't log default build script outputs
2022-06-03 15:11:02 +00:00
bors
43d9c3f649 Auto merge of #12460 - Veykril:move-guard, r=Veykril
minor: Reduce move-guard trigger range
2022-06-03 15:00:26 +00:00
Lukas Wirth
b34e27d25e minor: Reduce move-guard trigger range 2022-06-03 17:00:03 +02:00
Lukas Wirth
d0e3114441 internal: Don't log default build script outputs 2022-06-03 16:46:16 +02:00
Lukas Wirth
2a60b8452e Deduplicate 2022-06-03 16:33:37 +02:00
Lukas Wirth
522f66545f Remove prev-sibling completion machinery 2022-06-03 16:25:37 +02:00
Lukas Wirth
6550a241fb More precise where keyword completions 2022-06-03 16:11:26 +02:00
Lukas Wirth
c522669f00 Remove dead code 2022-06-03 15:46:17 +02:00
Lukas Wirth
c5dcc77b40 Fix visibility mods not being completed for field defs 2022-06-03 15:42:28 +02:00
Lukas Wirth
519ac81b57 internal: Move most remaining keyword completions to item list completions 2022-06-03 15:15:21 +02:00
bors
58b6d46d5a Auto merge of #12333 - nolanderc:order-import-assist, r=Veykril
Order auto-imports by relevance

Fixes #10337.

Basically we sort the imports according to how "far away" the imported item is from where we want to import it to. This change makes it so that imports from the current crate are sorted before any third-party crates. Additionally, we make an exception for builtin crates (`std`, `core`, etc.) so that they are sorted before any third-party crates.

There are probably other heuristics that should be added to improve the experience (such as preferring imports that are common elsewhere in the same crate, and ranking crates depending on the dependency graph). However, I think this is a first good step.

PS. This is my first time contributing here, so please be gentle if I have missed something obvious :-)
2022-06-03 07:49:59 +00:00
bors
ea15e1000f Auto merge of #12452 - iDawer:assist.merge_selected_imports, r=Veykril
feature: `Merge imports` assist can merge multiple selected imports.

The selected imports have to have a common prefix in paths.

Select imports or use trees to merge:
```rust
$0use std::fmt::Display;
use std::fmt::Debug;
use std::fmt::Write;$0
```
Apply `Merge imports`:
```rust
use std::fmt::{Display, Debug, Write};
```

Closes #12426
2022-06-03 07:40:34 +00:00
bors
29fae10345 Auto merge of #12451 - TimNN:double-dollar, r=Veykril
feat: Support `$$` in macros.

The implementation mirrors what `rustc` currently does [1]. Part of #11952.

\[1]: 0595ea1d12/compiler/rustc_expand/src/mbe/quoted.rs (L230-L241)
2022-06-03 07:23:48 +00:00
bors
d1968a38b9 Auto merge of #12456 - lnicola:thread-names, r=lnicola
internal: Shorten main thread names

Linux effectively has a 15 byte limit, which resulted in `rust-analyzer s` and `rust-analyzer p`. That's still unambiguous, but probably not obvious.
2022-06-03 04:28:07 +00:00
Laurențiu Nicola
7066b8e0ca Shorten main thread name 2022-06-03 07:27:48 +03:00
bitgaoshu
1a97ab34db fix: #12441 False-positive type-mismatch error with generic future 2022-06-03 10:47:41 +08:00
Tim Neumann
40bfb29e50 feat: Support $$ in macros.
The implementation mirrors what `rustc` currently does [1]. Part of #11952.

[1]: 0595ea1d12/compiler/rustc_expand/src/mbe/quoted.rs (L230-L241)
2022-06-02 21:48:28 +02:00
iDawer
ea8899a445 Allow merging of multiple selected imports.
The selected imports have to have a common prefix in paths.

Before
```rust
$0use std::fmt::Display;
use std::fmt::Debug;$0
```
After
```rust
use std::fmt::{Display, Debug};
```
2022-06-02 23:15:55 +05:00