Skip to content

Commit 7c750ba

Browse files
committed
fix r-a
1 parent a888f39 commit 7c750ba

9 files changed

Lines changed: 116 additions & 157 deletions

File tree

library/proc_macro/src/bridge/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@ use crate::{Delimiter, Level};
1919
/// Higher-order macro describing the server RPC API, allowing automatic
2020
/// generation of type-safe Rust APIs, both client-side and server-side.
2121
///
22-
/// `with_api!(my_macro, MyTokenStream, MySpan, MySymbol)` expands to:
22+
/// `with_api!(my_macro, MySpan, MySymbol)` expands to:
2323
/// ```rust,ignore (pseudo-code)
2424
/// my_macro! {
25-
/// fn ts_clone(stream: &MyTokenStream) -> MyTokenStream;
25+
/// fn normalize(string: &str) -> MySymbol;
2626
/// fn span_debug(span: &MySpan) -> String;
2727
/// // ...
2828
/// }
2929
/// ```
3030
///
31-
/// The second (`TokenStream`), third (`Span`) and fourth (`Symbol`)
31+
/// The second (`Span`) and third (`Symbol`)
3232
/// argument serve to customize the argument/return types that need
3333
/// special handling, to enable several different representations of
3434
/// these types.

library/proc_macro/src/bridge/server.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ impl<S: Server> HandleStore<S> {
1717
}
1818

1919
pub(super) type MarkedTokenStream<S> = bridge::TokenStream<MarkedSpan<S>, MarkedSymbol<S>>;
20-
//bridge::TokenStream<client::Span, client::Symbol>;
2120
pub(super) type MarkedSpan<S> = Marked<<S as Server>::Span, client::Span>;
2221
pub(super) type MarkedSymbol<S> = Marked<<S as Server>::Symbol, client::Symbol>;
2322

src/tools/rust-analyzer/crates/proc-macro-srv/src/bridge.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ use rustc_proc_macro::bridge as pm_bridge;
44

55
pub use pm_bridge::{DelimSpan, Diagnostic, ExpnGlobals, LitKind};
66

7+
pub type TokenStream<S> = pm_bridge::TokenStream<S, intern::Symbol>;
78
pub type TokenTree<S> =
8-
pm_bridge::TokenTree<crate::token_stream::TokenStream<S>, S, intern::Symbol>;
9+
pm_bridge::TokenTree<S, intern::Symbol>;
910
pub type Literal<S> = pm_bridge::Literal<S, intern::Symbol>;
10-
pub type Group<S> = pm_bridge::Group<crate::token_stream::TokenStream<S>, S>;
11+
pub type Group<S> = pm_bridge::Group<S, intern::Symbol>;
1112
pub type Punct<S> = pm_bridge::Punct<S>;
1213
pub type Ident<S> = pm_bridge::Ident<S, intern::Symbol>;

src/tools/rust-analyzer/crates/proc-macro-srv/src/dylib.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
mod proc_macros;
44
mod version;
55

6-
use rustc_proc_macro::bridge;
76
use std::{fmt, fs, io, time::SystemTime};
87
use temp_dir::TempDir;
98

@@ -46,10 +45,7 @@ impl Expander {
4645
call_site: S,
4746
mixed_site: S,
4847
callback: Option<ProcMacroClientHandle<'_>>,
49-
) -> Result<TokenStream<S>, PanicMessage>
50-
where
51-
<S::Server<'a> as bridge::server::Server>::TokenStream: Default,
52-
{
48+
) -> Result<TokenStream<S>, PanicMessage> {
5349
self.inner
5450
.proc_macros
5551
.expand(macro_name, macro_body, attribute, def_site, call_site, mixed_site, callback)

src/tools/rust-analyzer/crates/proc-macro-srv/src/dylib/proc_macros.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,29 +32,29 @@ impl ProcMacros {
3232
let res = client.run(
3333
&bridge::server::SameThread,
3434
S::make_server(call_site, def_site, mixed_site, callback),
35-
macro_body,
35+
macro_body.into_bridge(),
3636
cfg!(debug_assertions),
3737
);
38-
return res.map_err(crate::PanicMessage::from);
38+
return res.map(TokenStream::from_bridge).map_err(crate::PanicMessage::from);
3939
}
4040
bridge::client::ProcMacro::Bang { name, client } if *name == macro_name => {
4141
let res = client.run(
4242
&bridge::server::SameThread,
4343
S::make_server(call_site, def_site, mixed_site, callback),
44-
macro_body,
44+
macro_body.into_bridge(),
4545
cfg!(debug_assertions),
4646
);
47-
return res.map_err(crate::PanicMessage::from);
47+
return res.map(TokenStream::from_bridge).map_err(crate::PanicMessage::from);
4848
}
4949
bridge::client::ProcMacro::Attr { name, client } if *name == macro_name => {
5050
let res = client.run(
5151
&bridge::server::SameThread,
5252
S::make_server(call_site, def_site, mixed_site, callback),
53-
parsed_attributes,
54-
macro_body,
53+
parsed_attributes.into_bridge(),
54+
macro_body.into_bridge(),
5555
cfg!(debug_assertions),
5656
);
57-
return res.map_err(crate::PanicMessage::from);
57+
return res.map(TokenStream::from_bridge).map_err(crate::PanicMessage::from);
5858
}
5959
_ => continue,
6060
}

src/tools/rust-analyzer/crates/proc-macro-srv/src/lib.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ pub use span;
6161

6262
pub use crate::bridge::*;
6363
pub use crate::server_impl::literal_from_str;
64-
pub use crate::token_stream::{TokenStream, TokenStreamIter, literal_to_string};
64+
pub use crate::token_stream::{TokenStream, TokenTree, Group, TokenStreamIter, literal_to_string};
6565

6666
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
6767
pub enum ProcMacroKind {
@@ -233,9 +233,7 @@ impl ProcMacroSrv<'_> {
233233
}
234234

235235
pub trait ProcMacroSrvSpan: Copy + Send + Sync {
236-
type Server<'a>: rustc_proc_macro::bridge::server::Server<
237-
TokenStream = crate::token_stream::TokenStream<Self>,
238-
>;
236+
type Server<'a>: rustc_proc_macro::bridge::server::Server<Span = Self, Symbol = intern::Symbol>;
239237
fn make_server<'a>(
240238
call_site: Self,
241239
def_site: Self,

src/tools/rust-analyzer/crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs

Lines changed: 12 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use span::{FIXUP_ERASED_FILE_AST_ID_MARKER, Span, TextRange, TextSize};
1515

1616
use crate::{
1717
ProcMacroClientHandle,
18-
bridge::{Diagnostic, ExpnGlobals, Literal, TokenTree},
18+
bridge::{Diagnostic, ExpnGlobals, Literal},
1919
server_impl::literal_from_str,
2020
};
2121

@@ -30,8 +30,10 @@ pub struct RaSpanServer<'a> {
3030
pub callback: Option<ProcMacroClientHandle<'a>>,
3131
}
3232

33+
type TokenStream = crate::token_stream::TokenStream<Span>;
34+
type BridgeTokenStream = crate::bridge::TokenStream<Span>;
35+
3336
impl server::Server for RaSpanServer<'_> {
34-
type TokenStream = crate::token_stream::TokenStream<Span>;
3537
type Span = Span;
3638
type Symbol = Symbol;
3739

@@ -70,73 +72,26 @@ impl server::Server for RaSpanServer<'_> {
7072
// FIXME handle diagnostic
7173
}
7274

73-
fn ts_drop(&mut self, stream: Self::TokenStream) {
74-
drop(stream);
75-
}
76-
77-
fn ts_clone(&mut self, stream: &Self::TokenStream) -> Self::TokenStream {
78-
stream.clone()
79-
}
80-
81-
fn ts_is_empty(&mut self, stream: &Self::TokenStream) -> bool {
82-
stream.is_empty()
83-
}
84-
fn ts_from_str(&mut self, src: &str) -> Self::TokenStream {
85-
Self::TokenStream::from_str(src, self.call_site).unwrap_or_else(|e| {
86-
Self::TokenStream::from_str(
75+
fn ts_from_str(&mut self, src: &str) -> BridgeTokenStream {
76+
TokenStream::from_str(src, self.call_site).unwrap_or_else(|e| {
77+
TokenStream::from_str(
8778
&format!("compile_error!(\"failed to parse str to token stream: {e}\")"),
8879
self.call_site,
8980
)
9081
.unwrap()
91-
})
82+
}).into_bridge()
9283
}
93-
fn ts_to_string(&mut self, stream: &Self::TokenStream) -> String {
94-
stream.to_string()
84+
fn ts_to_string(&mut self, stream: BridgeTokenStream) -> String {
85+
TokenStream::from_bridge(stream).to_string()
9586
}
9687

97-
fn ts_from_token_tree(&mut self, tree: TokenTree<Self::Span>) -> Self::TokenStream {
98-
Self::TokenStream::new(vec![tree])
99-
}
100-
101-
fn ts_expand_expr(&mut self, self_: &Self::TokenStream) -> Result<Self::TokenStream, ()> {
88+
fn ts_expand_expr(&mut self, self_: BridgeTokenStream) -> Result<BridgeTokenStream, ()> {
10289
// FIXME: requires db, more importantly this requires name resolution so we would need to
10390
// eagerly expand this proc-macro, but we can't know that this proc-macro is eager until we
10491
// expand it ...
10592
// This calls for some kind of marker that a proc-macro wants to access this eager API,
10693
// otherwise we need to treat every proc-macro eagerly / or not support this.
107-
Ok(self_.clone())
108-
}
109-
110-
fn ts_concat_trees(
111-
&mut self,
112-
base: Option<Self::TokenStream>,
113-
trees: Vec<TokenTree<Self::Span>>,
114-
) -> Self::TokenStream {
115-
match base {
116-
Some(mut base) => {
117-
for tt in trees {
118-
base.push_tree(tt);
119-
}
120-
base
121-
}
122-
None => Self::TokenStream::new(trees),
123-
}
124-
}
125-
126-
fn ts_concat_streams(
127-
&mut self,
128-
base: Option<Self::TokenStream>,
129-
streams: Vec<Self::TokenStream>,
130-
) -> Self::TokenStream {
131-
let mut stream = base.unwrap_or_default();
132-
for s in streams {
133-
stream.push_stream(s);
134-
}
135-
stream
136-
}
137-
138-
fn ts_into_trees(&mut self, stream: Self::TokenStream) -> Vec<TokenTree<Self::Span>> {
139-
(*stream.0).clone()
94+
Ok(self_)
14095
}
14196

14297
fn span_debug(&mut self, span: Self::Span) -> String {

src/tools/rust-analyzer/crates/proc-macro-srv/src/server_impl/token_id.rs

Lines changed: 12 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use rustc_proc_macro::bridge::server;
1010

1111
use crate::{
1212
ProcMacroClientHandle,
13-
bridge::{Diagnostic, ExpnGlobals, Literal, TokenTree},
13+
bridge::{Diagnostic, ExpnGlobals, Literal},
1414
server_impl::literal_from_str,
1515
};
1616

@@ -36,8 +36,10 @@ pub struct SpanIdServer<'a> {
3636
pub callback: Option<ProcMacroClientHandle<'a>>,
3737
}
3838

39+
type TokenStream = crate::token_stream::TokenStream<Span>;
40+
type BridgeTokenStream = crate::bridge::TokenStream<Span>;
41+
3942
impl server::Server for SpanIdServer<'_> {
40-
type TokenStream = crate::token_stream::TokenStream<Span>;
4143
type Span = Span;
4244
type Symbol = Symbol;
4345

@@ -73,67 +75,21 @@ impl server::Server for SpanIdServer<'_> {
7375

7476
fn emit_diagnostic(&mut self, _: Diagnostic<Self::Span>) {}
7577

76-
fn ts_drop(&mut self, stream: Self::TokenStream) {
77-
drop(stream);
78-
}
79-
80-
fn ts_clone(&mut self, stream: &Self::TokenStream) -> Self::TokenStream {
81-
stream.clone()
82-
}
83-
84-
fn ts_is_empty(&mut self, stream: &Self::TokenStream) -> bool {
85-
stream.is_empty()
86-
}
87-
fn ts_from_str(&mut self, src: &str) -> Self::TokenStream {
88-
Self::TokenStream::from_str(src, self.call_site).unwrap_or_else(|e| {
89-
Self::TokenStream::from_str(
78+
fn ts_from_str(&mut self, src: &str) -> BridgeTokenStream {
79+
TokenStream::from_str(src, self.call_site).unwrap_or_else(|e| {
80+
TokenStream::from_str(
9081
&format!("compile_error!(\"failed to parse str to token stream: {e}\")"),
9182
self.call_site,
9283
)
9384
.unwrap()
94-
})
95-
}
96-
fn ts_to_string(&mut self, stream: &Self::TokenStream) -> String {
97-
stream.to_string()
85+
}).into_bridge()
9886
}
99-
fn ts_from_token_tree(&mut self, tree: TokenTree<Self::Span>) -> Self::TokenStream {
100-
Self::TokenStream::new(vec![tree])
101-
}
102-
103-
fn ts_expand_expr(&mut self, self_: &Self::TokenStream) -> Result<Self::TokenStream, ()> {
104-
Ok(self_.clone())
105-
}
106-
107-
fn ts_concat_trees(
108-
&mut self,
109-
base: Option<Self::TokenStream>,
110-
trees: Vec<TokenTree<Self::Span>>,
111-
) -> Self::TokenStream {
112-
match base {
113-
Some(mut base) => {
114-
for tt in trees {
115-
base.push_tree(tt);
116-
}
117-
base
118-
}
119-
None => Self::TokenStream::new(trees),
120-
}
121-
}
122-
123-
fn ts_concat_streams(
124-
&mut self,
125-
base: Option<Self::TokenStream>,
126-
streams: Vec<Self::TokenStream>,
127-
) -> Self::TokenStream {
128-
let mut stream = base.unwrap_or_default();
129-
for s in streams {
130-
stream.push_stream(s);
131-
}
132-
stream
87+
fn ts_to_string(&mut self, stream: BridgeTokenStream) -> String {
88+
TokenStream::from_bridge(stream).to_string()
13389
}
13490

135-
fn ts_into_trees(&mut self, stream: Self::TokenStream) -> Vec<TokenTree<Self::Span>> {
136-
(*stream.0).clone()
91+
fn ts_expand_expr(&mut self, self_: BridgeTokenStream) -> Result<BridgeTokenStream, ()> {
92+
Ok(self_)
13793
}
13894

13995
fn span_debug(&mut self, span: Self::Span) -> String {

0 commit comments

Comments
 (0)