Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-srv/src/server_impl/token_id.rs')
| -rw-r--r-- | crates/proc-macro-srv/src/server_impl/token_id.rs | 111 |
1 files changed, 54 insertions, 57 deletions
diff --git a/crates/proc-macro-srv/src/server_impl/token_id.rs b/crates/proc-macro-srv/src/server_impl/token_id.rs index 5ac263b9d5..70484c4dc2 100644 --- a/crates/proc-macro-srv/src/server_impl/token_id.rs +++ b/crates/proc-macro-srv/src/server_impl/token_id.rs @@ -6,9 +6,10 @@ use std::{ }; use intern::Symbol; -use proc_macro::bridge::server; +use rustc_proc_macro::bridge::server; use crate::{ + ProcMacroClientHandle, bridge::{Diagnostic, ExpnGlobals, Literal, TokenTree}, server_impl::literal_from_str, }; @@ -24,9 +25,7 @@ impl std::fmt::Debug for SpanId { type Span = SpanId; -pub struct FreeFunctions; - -pub struct SpanIdServer { +pub struct SpanIdServer<'a> { // FIXME: Report this back to the caller to track as dependencies pub tracked_env_vars: HashMap<Box<str>, Option<Box<str>>>, // FIXME: Report this back to the caller to track as dependencies @@ -34,16 +33,30 @@ pub struct SpanIdServer { pub call_site: Span, pub def_site: Span, pub mixed_site: Span, + pub callback: Option<ProcMacroClientHandle<'a>>, } -impl server::Types for SpanIdServer { - type FreeFunctions = FreeFunctions; +impl server::Server for SpanIdServer<'_> { type TokenStream = crate::token_stream::TokenStream<Span>; type Span = Span; type Symbol = Symbol; -} -impl server::FreeFunctions for SpanIdServer { + fn globals(&mut self) -> ExpnGlobals<Self::Span> { + ExpnGlobals { + def_site: self.def_site, + call_site: self.call_site, + mixed_site: self.mixed_site, + } + } + + fn intern_symbol(ident: &str) -> Self::Symbol { + Symbol::intern(ident) + } + + fn with_symbol_string(symbol: &Self::Symbol, f: impl FnOnce(&str)) { + f(symbol.as_str()) + } + fn injected_env_var(&mut self, _: &str) -> Option<std::string::String> { None } @@ -59,13 +72,19 @@ impl server::FreeFunctions for SpanIdServer { } fn emit_diagnostic(&mut self, _: Diagnostic<Self::Span>) {} -} -impl server::TokenStream for SpanIdServer { - fn is_empty(&mut self, stream: &Self::TokenStream) -> bool { + fn ts_drop(&mut self, stream: Self::TokenStream) { + drop(stream); + } + + fn ts_clone(&mut self, stream: &Self::TokenStream) -> Self::TokenStream { + stream.clone() + } + + fn ts_is_empty(&mut self, stream: &Self::TokenStream) -> bool { stream.is_empty() } - fn from_str(&mut self, src: &str) -> Self::TokenStream { + fn ts_from_str(&mut self, src: &str) -> Self::TokenStream { Self::TokenStream::from_str(src, self.call_site).unwrap_or_else(|e| { Self::TokenStream::from_str( &format!("compile_error!(\"failed to parse str to token stream: {e}\")"), @@ -74,18 +93,18 @@ impl server::TokenStream for SpanIdServer { .unwrap() }) } - fn to_string(&mut self, stream: &Self::TokenStream) -> String { + fn ts_to_string(&mut self, stream: &Self::TokenStream) -> String { stream.to_string() } - fn from_token_tree(&mut self, tree: TokenTree<Self::Span>) -> Self::TokenStream { + fn ts_from_token_tree(&mut self, tree: TokenTree<Self::Span>) -> Self::TokenStream { Self::TokenStream::new(vec![tree]) } - fn expand_expr(&mut self, self_: &Self::TokenStream) -> Result<Self::TokenStream, ()> { + fn ts_expand_expr(&mut self, self_: &Self::TokenStream) -> Result<Self::TokenStream, ()> { Ok(self_.clone()) } - fn concat_trees( + fn ts_concat_trees( &mut self, base: Option<Self::TokenStream>, trees: Vec<TokenTree<Self::Span>>, @@ -101,7 +120,7 @@ impl server::TokenStream for SpanIdServer { } } - fn concat_streams( + fn ts_concat_streams( &mut self, base: Option<Self::TokenStream>, streams: Vec<Self::TokenStream>, @@ -113,49 +132,47 @@ impl server::TokenStream for SpanIdServer { stream } - fn into_trees(&mut self, stream: Self::TokenStream) -> Vec<TokenTree<Self::Span>> { + fn ts_into_trees(&mut self, stream: Self::TokenStream) -> Vec<TokenTree<Self::Span>> { (*stream.0).clone() } -} -impl server::Span for SpanIdServer { - fn debug(&mut self, span: Self::Span) -> String { + fn span_debug(&mut self, span: Self::Span) -> String { format!("{:?}", span.0) } - fn file(&mut self, _span: Self::Span) -> String { + fn span_file(&mut self, _span: Self::Span) -> String { String::new() } - fn local_file(&mut self, _span: Self::Span) -> Option<String> { + fn span_local_file(&mut self, _span: Self::Span) -> Option<String> { None } - fn save_span(&mut self, _span: Self::Span) -> usize { + fn span_save_span(&mut self, _span: Self::Span) -> usize { 0 } - fn recover_proc_macro_span(&mut self, _id: usize) -> Self::Span { + fn span_recover_proc_macro_span(&mut self, _id: usize) -> Self::Span { self.call_site } /// Recent feature, not yet in the proc_macro /// /// See PR: /// https://github.com/rust-lang/rust/pull/55780 - fn source_text(&mut self, _span: Self::Span) -> Option<String> { + fn span_source_text(&mut self, _span: Self::Span) -> Option<String> { None } - fn parent(&mut self, _span: Self::Span) -> Option<Self::Span> { + fn span_parent(&mut self, _span: Self::Span) -> Option<Self::Span> { None } - fn source(&mut self, span: Self::Span) -> Self::Span { + fn span_source(&mut self, span: Self::Span) -> Self::Span { span } - fn byte_range(&mut self, _span: Self::Span) -> Range<usize> { + fn span_byte_range(&mut self, _span: Self::Span) -> Range<usize> { Range { start: 0, end: 0 } } - fn join(&mut self, first: Self::Span, _second: Self::Span) -> Option<Self::Span> { + fn span_join(&mut self, first: Self::Span, _second: Self::Span) -> Option<Self::Span> { // Just return the first span again, because some macros will unwrap the result. Some(first) } - fn subspan( + fn span_subspan( &mut self, span: Self::Span, _start: Bound<usize>, @@ -164,48 +181,28 @@ impl server::Span for SpanIdServer { // 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 { + fn span_resolved_at(&mut self, _span: Self::Span, _at: Self::Span) -> Self::Span { self.call_site } - fn end(&mut self, _self_: Self::Span) -> Self::Span { + fn span_end(&mut self, _self_: Self::Span) -> Self::Span { self.call_site } - fn start(&mut self, _self_: Self::Span) -> Self::Span { + fn span_start(&mut self, _self_: Self::Span) -> Self::Span { self.call_site } - fn line(&mut self, _span: Self::Span) -> usize { + fn span_line(&mut self, _span: Self::Span) -> usize { 1 } - fn column(&mut self, _span: Self::Span) -> usize { + fn span_column(&mut self, _span: Self::Span) -> usize { 1 } -} -impl server::Symbol for SpanIdServer { - fn normalize_and_validate_ident(&mut self, string: &str) -> Result<Self::Symbol, ()> { + fn symbol_normalize_and_validate_ident(&mut self, string: &str) -> Result<Self::Symbol, ()> { // FIXME: nfc-normalize and validate idents Ok(<Self as server::Server>::intern_symbol(string)) } } - -impl server::Server for SpanIdServer { - fn globals(&mut self) -> ExpnGlobals<Self::Span> { - ExpnGlobals { - def_site: self.def_site, - call_site: self.call_site, - mixed_site: self.mixed_site, - } - } - - fn intern_symbol(ident: &str) -> Self::Symbol { - Symbol::intern(ident) - } - - fn with_symbol_string(symbol: &Self::Symbol, f: impl FnOnce(&str)) { - f(symbol.as_str()) - } -} |