mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 20:42:04 +00:00
Merge commit 'ddf105b646
' into sync-from-ra
This commit is contained in:
parent
0816d49d83
commit
e41ab350d6
378 changed files with 14720 additions and 3111 deletions
|
@ -23,6 +23,7 @@ serde.workspace = true
|
|||
serde_json = { workspace = true, features = ["unbounded_depth"] }
|
||||
tracing.workspace = true
|
||||
triomphe.workspace = true
|
||||
rustc-hash.workspace = true
|
||||
memmap2 = "0.5.4"
|
||||
snap = "1.1.0"
|
||||
indexmap = "2.1.0"
|
||||
|
@ -40,4 +41,4 @@ base-db.workspace = true
|
|||
la-arena.workspace = true
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
workspace = true
|
||||
|
|
|
@ -197,7 +197,7 @@ impl ProcMacro {
|
|||
&deserialize_span_data_index_map(&resp.span_data_table),
|
||||
)
|
||||
})),
|
||||
_ => Err(ServerError { message: "unexpected response".to_string(), io: None }),
|
||||
_ => Err(ServerError { message: "unexpected response".to_owned(), io: None }),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -187,7 +187,67 @@ mod tests {
|
|||
file_id: FileId::from_raw(0),
|
||||
ast_id: ErasedFileAstId::from_raw(RawIdx::from(0)),
|
||||
};
|
||||
let mut subtree = Subtree {
|
||||
|
||||
let token_trees = Box::new([
|
||||
TokenTree::Leaf(
|
||||
Ident {
|
||||
text: "struct".into(),
|
||||
span: Span {
|
||||
range: TextRange::at(TextSize::new(0), TextSize::of("struct")),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
}
|
||||
.into(),
|
||||
),
|
||||
TokenTree::Leaf(
|
||||
Ident {
|
||||
text: "Foo".into(),
|
||||
span: Span {
|
||||
range: TextRange::at(TextSize::new(5), TextSize::of("Foo")),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
}
|
||||
.into(),
|
||||
),
|
||||
TokenTree::Leaf(Leaf::Literal(Literal {
|
||||
text: "Foo".into(),
|
||||
|
||||
span: Span {
|
||||
range: TextRange::at(TextSize::new(8), TextSize::of("Foo")),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
})),
|
||||
TokenTree::Leaf(Leaf::Punct(Punct {
|
||||
char: '@',
|
||||
span: Span {
|
||||
range: TextRange::at(TextSize::new(11), TextSize::of('@')),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
spacing: Spacing::Joint,
|
||||
})),
|
||||
TokenTree::Subtree(Subtree {
|
||||
delimiter: Delimiter {
|
||||
open: Span {
|
||||
range: TextRange::at(TextSize::new(12), TextSize::of('{')),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
close: Span {
|
||||
range: TextRange::at(TextSize::new(13), TextSize::of('}')),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
kind: DelimiterKind::Brace,
|
||||
},
|
||||
token_trees: Box::new([]),
|
||||
}),
|
||||
]);
|
||||
|
||||
Subtree {
|
||||
delimiter: Delimiter {
|
||||
open: Span {
|
||||
range: TextRange::empty(TextSize::new(0)),
|
||||
|
@ -201,65 +261,8 @@ mod tests {
|
|||
},
|
||||
kind: DelimiterKind::Invisible,
|
||||
},
|
||||
token_trees: Vec::new(),
|
||||
};
|
||||
subtree.token_trees.push(TokenTree::Leaf(
|
||||
Ident {
|
||||
text: "struct".into(),
|
||||
span: Span {
|
||||
range: TextRange::at(TextSize::new(0), TextSize::of("struct")),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
}
|
||||
.into(),
|
||||
));
|
||||
subtree.token_trees.push(TokenTree::Leaf(
|
||||
Ident {
|
||||
text: "Foo".into(),
|
||||
span: Span {
|
||||
range: TextRange::at(TextSize::new(5), TextSize::of("Foo")),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
}
|
||||
.into(),
|
||||
));
|
||||
subtree.token_trees.push(TokenTree::Leaf(Leaf::Literal(Literal {
|
||||
text: "Foo".into(),
|
||||
|
||||
span: Span {
|
||||
range: TextRange::at(TextSize::new(8), TextSize::of("Foo")),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
})));
|
||||
subtree.token_trees.push(TokenTree::Leaf(Leaf::Punct(Punct {
|
||||
char: '@',
|
||||
span: Span {
|
||||
range: TextRange::at(TextSize::new(11), TextSize::of('@')),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
spacing: Spacing::Joint,
|
||||
})));
|
||||
subtree.token_trees.push(TokenTree::Subtree(Subtree {
|
||||
delimiter: Delimiter {
|
||||
open: Span {
|
||||
range: TextRange::at(TextSize::new(12), TextSize::of('{')),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
close: Span {
|
||||
range: TextRange::at(TextSize::new(13), TextSize::of('}')),
|
||||
anchor,
|
||||
ctx: SyntaxContextId::ROOT,
|
||||
},
|
||||
kind: DelimiterKind::Brace,
|
||||
},
|
||||
token_trees: vec![],
|
||||
}));
|
||||
subtree
|
||||
token_trees,
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -35,10 +35,11 @@
|
|||
//! as we don't have bincode in Cargo.toml yet, lets stick with serde_json for
|
||||
//! the time being.
|
||||
|
||||
use std::collections::{HashMap, VecDeque};
|
||||
use std::collections::VecDeque;
|
||||
|
||||
use indexmap::IndexSet;
|
||||
use la_arena::RawIdx;
|
||||
use rustc_hash::FxHashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use span::{ErasedFileAstId, FileId, Span, SpanAnchor, SyntaxContextId};
|
||||
use text_size::TextRange;
|
||||
|
@ -129,7 +130,7 @@ impl FlatTree {
|
|||
span_data_table: &mut SpanDataIndexMap,
|
||||
) -> FlatTree {
|
||||
let mut w = Writer {
|
||||
string_table: HashMap::new(),
|
||||
string_table: FxHashMap::default(),
|
||||
work: VecDeque::new(),
|
||||
span_data_table,
|
||||
|
||||
|
@ -158,7 +159,7 @@ impl FlatTree {
|
|||
|
||||
pub fn new_raw(subtree: &tt::Subtree<TokenId>, version: u32) -> FlatTree {
|
||||
let mut w = Writer {
|
||||
string_table: HashMap::new(),
|
||||
string_table: FxHashMap::default(),
|
||||
work: VecDeque::new(),
|
||||
span_data_table: &mut (),
|
||||
|
||||
|
@ -340,7 +341,7 @@ impl InternableSpan for Span {
|
|||
|
||||
struct Writer<'a, 'span, S: InternableSpan> {
|
||||
work: VecDeque<(usize, &'a tt::Subtree<S>)>,
|
||||
string_table: HashMap<&'a str, u32>,
|
||||
string_table: FxHashMap<&'a str, u32>,
|
||||
span_data_table: &'span mut S::Table,
|
||||
|
||||
subtree: Vec<SubtreeRepr>,
|
||||
|
@ -370,7 +371,7 @@ impl<'a, 'span, S: InternableSpan> Writer<'a, 'span, S> {
|
|||
|
||||
self.subtree[idx].tt = [first_tt as u32, (first_tt + n_tt) as u32];
|
||||
|
||||
for child in &subtree.token_trees {
|
||||
for child in subtree.token_trees.iter() {
|
||||
let idx_tag = match child {
|
||||
tt::TokenTree::Subtree(it) => {
|
||||
let idx = self.enqueue(it);
|
||||
|
@ -418,7 +419,7 @@ impl<'a, 'span, S: InternableSpan> Writer<'a, 'span, S> {
|
|||
let table = &mut self.text;
|
||||
*self.string_table.entry(text).or_insert_with(|| {
|
||||
let idx = table.len();
|
||||
table.push(text.to_string());
|
||||
table.push(text.to_owned());
|
||||
idx as u32
|
||||
})
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@ impl ProcMacroProcessSrv {
|
|||
|
||||
match response {
|
||||
Response::ApiVersionCheck(version) => Ok(version),
|
||||
_ => Err(ServerError { message: "unexpected response".to_string(), io: None }),
|
||||
_ => Err(ServerError { message: "unexpected response".to_owned(), io: None }),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,7 @@ impl ProcMacroProcessSrv {
|
|||
|
||||
match response {
|
||||
Response::SetConfig(crate::msg::ServerConfig { span_mode }) => Ok(span_mode),
|
||||
_ => Err(ServerError { message: "unexpected response".to_string(), io: None }),
|
||||
_ => Err(ServerError { message: "unexpected response".to_owned(), io: None }),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -104,7 +104,7 @@ impl ProcMacroProcessSrv {
|
|||
|
||||
match response {
|
||||
Response::ListMacros(it) => Ok(it),
|
||||
_ => Err(ServerError { message: "unexpected response".to_string(), io: None }),
|
||||
_ => Err(ServerError { message: "unexpected response".to_owned(), io: None }),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ pub fn read_dylib_info(dylib_path: &AbsPath) -> io::Result<RustCInfo> {
|
|||
let version_part = items.next().ok_or_else(|| err!("no version string"))?;
|
||||
let mut version_parts = version_part.split('-');
|
||||
let version = version_parts.next().ok_or_else(|| err!("no version"))?;
|
||||
let channel = version_parts.next().unwrap_or_default().to_string();
|
||||
let channel = version_parts.next().unwrap_or_default().to_owned();
|
||||
|
||||
let commit = match items.next() {
|
||||
Some(commit) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue