Skip to content

Commit 367cd5c

Browse files
bors[bot]matklad
andauthored
Merge #11168
11168: minor: drop dead code r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
2 parents 6e3d135 + 3836b19 commit 367cd5c

File tree

3 files changed

+18
-37
lines changed

3 files changed

+18
-37
lines changed

crates/hir_expand/src/db.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,8 @@ fn parse_or_expand(db: &dyn AstDatabase, file_id: HirFileId) -> Option<SyntaxNod
215215
match file_id.0 {
216216
HirFileIdRepr::FileId(file_id) => Some(db.parse(file_id).tree().syntax().clone()),
217217
HirFileIdRepr::MacroFile(macro_file) => {
218+
// FIXME: Note how we convert from `Parse` to `SyntaxNode` here,
219+
// forgetting about parse errors.
218220
db.parse_macro_expansion(macro_file).value.map(|(it, _)| it.syntax_node())
219221
}
220222
}

crates/mbe/src/syntax_bridge.rs

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Conversions between [`SyntaxNode`] and [`tt::TokenTree`].
22
33
use rustc_hash::{FxHashMap, FxHashSet};
4-
use stdx::{never, non_empty_vec::NonEmptyVec};
4+
use stdx::non_empty_vec::NonEmptyVec;
55
use syntax::{
66
ast::{self, make::tokens::doc_comment},
77
AstToken, Parse, PreorderWithTokens, SmolStr, SyntaxElement, SyntaxKind,
@@ -66,10 +66,6 @@ pub fn token_tree_to_syntax_node(
6666
parser::Step::Error { msg } => tree_sink.error(msg.to_string()),
6767
}
6868
}
69-
if never!(tree_sink.roots.len() != 1) {
70-
return Err(ExpandError::ConversionError);
71-
}
72-
//FIXME: would be cool to report errors
7369
let (parse, range_map) = tree_sink.finish();
7470
Ok((parse, range_map))
7571
}
@@ -284,7 +280,7 @@ fn convert_tokens<C: TokenConvertor>(conv: &mut C) -> tt::Subtree {
284280
parent.subtree.token_trees.extend(entry.subtree.token_trees);
285281
}
286282

287-
let subtree = stack.into_first().subtree;
283+
let subtree = stack.into_last().subtree;
288284
if let [tt::TokenTree::Subtree(first)] = &*subtree.token_trees {
289285
first.clone()
290286
} else {
@@ -614,10 +610,6 @@ struct TtTreeSink<'a> {
614610
text_pos: TextSize,
615611
inner: SyntaxTreeBuilder,
616612
token_map: TokenMap,
617-
618-
// Number of roots
619-
// Use for detect ill-form tree which is not single root
620-
roots: smallvec::SmallVec<[usize; 1]>,
621613
}
622614

623615
impl<'a> TtTreeSink<'a> {
@@ -628,7 +620,6 @@ impl<'a> TtTreeSink<'a> {
628620
open_delims: FxHashMap::default(),
629621
text_pos: 0.into(),
630622
inner: SyntaxTreeBuilder::default(),
631-
roots: smallvec::SmallVec::new(),
632623
token_map: TokenMap::default(),
633624
}
634625
}
@@ -733,16 +724,10 @@ impl<'a> TtTreeSink<'a> {
733724

734725
fn start_node(&mut self, kind: SyntaxKind) {
735726
self.inner.start_node(kind);
736-
737-
match self.roots.last_mut() {
738-
None | Some(0) => self.roots.push(1),
739-
Some(n) => *n += 1,
740-
};
741727
}
742728

743729
fn finish_node(&mut self) {
744730
self.inner.finish_node();
745-
*self.roots.last_mut().unwrap() -= 1;
746731
}
747732

748733
fn error(&mut self, error: String) {

crates/stdx/src/non_empty_vec.rs

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,39 @@
1-
//! A [`Vec`] that is guaranteed to at least contain one element.
1+
//! See [`NonEmptyVec`].
22
3-
pub struct NonEmptyVec<T>(Vec<T>);
3+
/// A [`Vec`] that is guaranteed to at least contain one element.
4+
pub struct NonEmptyVec<T> {
5+
first: T,
6+
rest: Vec<T>,
7+
}
48

59
impl<T> NonEmptyVec<T> {
610
#[inline]
7-
pub fn new(initial: T) -> Self {
8-
NonEmptyVec(vec![initial])
11+
pub fn new(first: T) -> Self {
12+
NonEmptyVec { first, rest: Vec::new() }
913
}
1014

1115
#[inline]
1216
pub fn last_mut(&mut self) -> &mut T {
13-
match self.0.last_mut() {
14-
Some(it) => it,
15-
None => unreachable!(),
16-
}
17+
self.rest.last_mut().unwrap_or(&mut self.first)
1718
}
1819

1920
#[inline]
2021
pub fn pop(&mut self) -> Option<T> {
21-
if self.0.len() <= 1 {
22-
None
23-
} else {
24-
self.0.pop()
25-
}
22+
self.rest.pop()
2623
}
2724

2825
#[inline]
2926
pub fn push(&mut self, value: T) {
30-
self.0.push(value)
27+
self.rest.push(value)
3128
}
3229

3330
#[inline]
3431
pub fn len(&self) -> usize {
35-
self.0.len()
32+
1 + self.rest.len()
3633
}
3734

3835
#[inline]
39-
pub fn into_first(mut self) -> T {
40-
match self.0.pop() {
41-
Some(it) => it,
42-
None => unreachable!(),
43-
}
36+
pub fn into_last(mut self) -> T {
37+
self.rest.pop().unwrap_or(self.first)
4438
}
4539
}

0 commit comments

Comments
 (0)