diff --git a/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs b/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs index 9265cd6b6b79..267668783041 100644 --- a/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs +++ b/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs @@ -14,12 +14,13 @@ use super::proc_macro::{ }; mod token_stream; -pub use token_stream::*; +pub use token_stream::TokenStream; +use token_stream::TokenStreamBuilder; mod symbol; pub use symbol::*; -use std::iter::FromIterator; +use std::{iter::FromIterator, ops::Bound}; type Group = tt::Subtree; type TokenTree = tt::TokenTree; @@ -76,6 +77,13 @@ impl server::FreeFunctions for RustAnalyzer { // https://github.com/rust-lang/rust/pull/71858 } fn track_path(&mut self, _path: &str) {} + + fn literal_from_str( + &mut self, + _s: &str, + ) -> Result, ()> { + todo!() + } } impl server::TokenStream for RustAnalyzer { @@ -92,7 +100,7 @@ impl server::TokenStream for RustAnalyzer { } fn from_token_tree( &mut self, - tree: bridge::TokenTree, + tree: bridge::TokenTree, ) -> Self::TokenStream { match tree { bridge::TokenTree::Group(group) => { @@ -107,8 +115,8 @@ impl server::TokenStream for RustAnalyzer { Self::TokenStream::from_iter(vec![tree]) } - bridge::TokenTree::Ident(symbol) => { - todo!("implement"); + bridge::TokenTree::Ident(_symbol) => { + todo!("convert Ident bridge=>TokenStream"); // let IdentData(ident) = self.ident_interner.get(index).clone(); // let ident: tt::Ident = ident; // let leaf = tt::Leaf::from(ident); @@ -116,10 +124,11 @@ impl server::TokenStream for RustAnalyzer { // Self::TokenStream::from_iter(vec![tree]) } - bridge::TokenTree::Literal(literal) => { - let leaf = tt::Leaf::from(literal); - let tree = TokenTree::from(leaf); - Self::TokenStream::from_iter(vec![tree]) + bridge::TokenTree::Literal(_literal) => { + todo!("convert Literal bridge=>TokenStream"); + // let leaf = tt::Leaf::from(literal); + // let tree = TokenTree::from(leaf); + // Self::TokenStream::from_iter(vec![tree]) } bridge::TokenTree::Punct(p) => { @@ -142,7 +151,7 @@ impl server::TokenStream for RustAnalyzer { fn concat_trees( &mut self, base: Option, - trees: Vec>, + trees: Vec>, ) -> Self::TokenStream { let mut builder = TokenStreamBuilder::new(); if let Some(base) = base { @@ -172,15 +181,18 @@ impl server::TokenStream for RustAnalyzer { fn into_trees( &mut self, stream: Self::TokenStream, - ) -> Vec> { + ) -> Vec> { stream .into_iter() .map(|tree| match tree { - tt::TokenTree::Leaf(tt::Leaf::Ident(ident)) => { - todo!("implement"); + tt::TokenTree::Leaf(tt::Leaf::Ident(_ident)) => { + todo!("convert Ident tt=>bridge"); // bridge::TokenTree::Ident(Symbol(self.ident_interner.intern(&IdentData(ident)))) } - tt::TokenTree::Leaf(tt::Leaf::Literal(lit)) => bridge::TokenTree::Literal(lit), + tt::TokenTree::Leaf(tt::Leaf::Literal(_lit)) => { + todo!("convert Literal tt=>bridge"); + // bridge::TokenTree::Literal(lit) + } tt::TokenTree::Leaf(tt::Leaf::Punct(punct)) => { bridge::TokenTree::Punct(bridge::Punct { ch: punct.char as u8, @@ -317,6 +329,15 @@ impl server::Span for RustAnalyzer { // Just return the first span again, because some macros will unwrap the result. Some(first) } + fn subspan( + &mut self, + span: Self::Span, + _start: Bound, + _end: Bound, + ) -> Option { + // Just return the span again, because some macros will unwrap the result. + Some(span) + } fn resolved_at(&mut self, _span: Self::Span, _at: Self::Span) -> Self::Span { // FIXME handle span tt::TokenId::unspecified() @@ -343,6 +364,12 @@ impl server::MultiSpan for RustAnalyzer { } } +impl server::Symbol for RustAnalyzer { + fn normalize_and_validate_ident(&mut self, _string: &str) -> Result { + todo!() + } +} + impl server::Server for RustAnalyzer { fn globals(&mut self) -> bridge::ExpnGlobals { bridge::ExpnGlobals { @@ -351,6 +378,14 @@ impl server::Server for RustAnalyzer { mixed_site: Span::unspecified(), } } + + fn intern_symbol(_ident: &str) -> Self::Symbol { + todo!("intern_symbol") + } + + fn with_symbol_string(_symbol: &Self::Symbol, _f: impl FnOnce(&str)) { + todo!("with_symbol_string") + } } #[cfg(test)] diff --git a/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server/symbol.rs b/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server/symbol.rs index b97e2aecf331..b045f762b880 100644 --- a/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server/symbol.rs +++ b/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server/symbol.rs @@ -14,13 +14,14 @@ struct IdentInterner { impl IdentInterner { fn intern(&mut self, data: &str) -> Symbol { if let Some(index) = self.idents.get(data) { - return *index; + return Symbol(*index); } let index = self.idents.len() as u32; + let data = SmolStr::from(data); self.ident_data.push(data.clone()); - self.idents.insert(data.clone(), index); - index + self.idents.insert(data, index); + Symbol(index) } fn get(&self, index: u32) -> &SmolStr { diff --git a/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server/token_stream.rs b/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server/token_stream.rs index 9a31f2ebf87c..c8bf2ecdd3d9 100644 --- a/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server/token_stream.rs +++ b/crates/proc-macro-srv/src/abis/abi_sysroot/ra_server/token_stream.rs @@ -163,20 +163,15 @@ pub mod token_stream { } impl TokenStreamBuilder { - fn new() -> TokenStreamBuilder { + pub(super) fn new() -> TokenStreamBuilder { TokenStreamBuilder { acc: TokenStream::new() } } - fn push(&mut self, stream: TokenStream) { + pub(super) fn push(&mut self, stream: TokenStream) { self.acc.extend(stream.into_iter()) } - fn build(self) -> TokenStream { + pub(super) fn build(self) -> TokenStream { self.acc } } - -#[derive(Clone)] -pub struct TokenStreamIter { - trees: std::vec::IntoIter, -}