Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 00bc060

Browse files
Fix imports, delete removed interfaces
1 parent e009cdc commit 00bc060

File tree

2 files changed

+66
-190
lines changed

2 files changed

+66
-190
lines changed

crates/proc-macro-srv/src/abis/abi_sysroot/ra_server.rs

Lines changed: 32 additions & 190 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@
88
//!
99
//! FIXME: No span and source file information is implemented yet
1010
11-
use super::proc_macro::bridge::{self, server};
11+
use super::proc_macro::{
12+
self,
13+
bridge::{self, server},
14+
};
1215

1316
mod token_stream;
1417
pub use token_stream::*;
1518

16-
use std::ascii;
17-
use std::collections::HashMap;
18-
use std::hash::Hash;
19+
mod symbol;
20+
pub use symbol::*;
21+
1922
use std::iter::FromIterator;
20-
use std::ops::Bound;
2123

2224
type Group = tt::Subtree;
2325
type TokenTree = tt::TokenTree;
@@ -51,42 +53,6 @@ impl Diagnostic {
5153
}
5254
}
5355

54-
// Rustc Server Ident has to be `Copyable`
55-
// We use a stub here for bypassing
56-
#[derive(Hash, Eq, PartialEq, Copy, Clone)]
57-
pub struct IdentId(u32);
58-
59-
#[derive(Clone, Hash, Eq, PartialEq)]
60-
struct IdentData(tt::Ident);
61-
62-
#[derive(Default)]
63-
struct IdentInterner {
64-
idents: HashMap<IdentData, u32>,
65-
ident_data: Vec<IdentData>,
66-
}
67-
68-
impl IdentInterner {
69-
fn intern(&mut self, data: &IdentData) -> u32 {
70-
if let Some(index) = self.idents.get(data) {
71-
return *index;
72-
}
73-
74-
let index = self.idents.len() as u32;
75-
self.ident_data.push(data.clone());
76-
self.idents.insert(data.clone(), index);
77-
index
78-
}
79-
80-
fn get(&self, index: u32) -> &IdentData {
81-
&self.ident_data[index as usize]
82-
}
83-
84-
#[allow(unused)]
85-
fn get_mut(&mut self, index: u32) -> &mut IdentData {
86-
self.ident_data.get_mut(index as usize).expect("Should be consistent")
87-
}
88-
}
89-
9056
pub struct FreeFunctions;
9157

9258
#[derive(Default)]
@@ -141,12 +107,13 @@ impl server::TokenStream for RustAnalyzer {
141107
Self::TokenStream::from_iter(vec![tree])
142108
}
143109

144-
bridge::TokenTree::Ident(IdentId(index)) => {
145-
let IdentData(ident) = self.ident_interner.get(index).clone();
146-
let ident: tt::Ident = ident;
147-
let leaf = tt::Leaf::from(ident);
148-
let tree = TokenTree::from(leaf);
149-
Self::TokenStream::from_iter(vec![tree])
110+
bridge::TokenTree::Ident(symbol) => {
111+
todo!("implement");
112+
// let IdentData(ident) = self.ident_interner.get(index).clone();
113+
// let ident: tt::Ident = ident;
114+
// let leaf = tt::Leaf::from(ident);
115+
// let tree = TokenTree::from(leaf);
116+
// Self::TokenStream::from_iter(vec![tree])
150117
}
151118

152119
bridge::TokenTree::Literal(literal) => {
@@ -210,7 +177,8 @@ impl server::TokenStream for RustAnalyzer {
210177
.into_iter()
211178
.map(|tree| match tree {
212179
tt::TokenTree::Leaf(tt::Leaf::Ident(ident)) => {
213-
bridge::TokenTree::Ident(IdentId(self.ident_interner.intern(&IdentData(ident))))
180+
todo!("implement");
181+
// bridge::TokenTree::Ident(Symbol(self.ident_interner.intern(&IdentData(ident))))
214182
}
215183
tt::TokenTree::Leaf(tt::Leaf::Literal(lit)) => bridge::TokenTree::Literal(lit),
216184
tt::TokenTree::Leaf(tt::Leaf::Punct(punct)) => {
@@ -236,162 +204,36 @@ impl server::TokenStream for RustAnalyzer {
236204
}
237205
}
238206

239-
fn delim_to_internal(d: bridge::Delimiter) -> Option<tt::Delimiter> {
207+
fn delim_to_internal(d: proc_macro::Delimiter) -> Option<tt::Delimiter> {
240208
let kind = match d {
241-
bridge::Delimiter::Parenthesis => tt::DelimiterKind::Parenthesis,
242-
bridge::Delimiter::Brace => tt::DelimiterKind::Brace,
243-
bridge::Delimiter::Bracket => tt::DelimiterKind::Bracket,
244-
bridge::Delimiter::None => return None,
209+
proc_macro::Delimiter::Parenthesis => tt::DelimiterKind::Parenthesis,
210+
proc_macro::Delimiter::Brace => tt::DelimiterKind::Brace,
211+
proc_macro::Delimiter::Bracket => tt::DelimiterKind::Bracket,
212+
proc_macro::Delimiter::None => return None,
245213
};
246214
Some(tt::Delimiter { id: tt::TokenId::unspecified(), kind })
247215
}
248216

249-
fn delim_to_external(d: Option<tt::Delimiter>) -> bridge::Delimiter {
217+
fn delim_to_external(d: Option<tt::Delimiter>) -> proc_macro::Delimiter {
250218
match d.map(|it| it.kind) {
251-
Some(tt::DelimiterKind::Parenthesis) => bridge::Delimiter::Parenthesis,
252-
Some(tt::DelimiterKind::Brace) => bridge::Delimiter::Brace,
253-
Some(tt::DelimiterKind::Bracket) => bridge::Delimiter::Bracket,
254-
None => bridge::Delimiter::None,
219+
Some(tt::DelimiterKind::Parenthesis) => proc_macro::Delimiter::Parenthesis,
220+
Some(tt::DelimiterKind::Brace) => proc_macro::Delimiter::Brace,
221+
Some(tt::DelimiterKind::Bracket) => proc_macro::Delimiter::Bracket,
222+
None => proc_macro::Delimiter::None,
255223
}
256224
}
257225

258-
fn spacing_to_internal(spacing: bridge::Spacing) -> Spacing {
226+
fn spacing_to_internal(spacing: proc_macro::Spacing) -> Spacing {
259227
match spacing {
260-
bridge::Spacing::Alone => Spacing::Alone,
261-
bridge::Spacing::Joint => Spacing::Joint,
228+
proc_macro::Spacing::Alone => Spacing::Alone,
229+
proc_macro::Spacing::Joint => Spacing::Joint,
262230
}
263231
}
264232

265-
fn spacing_to_external(spacing: Spacing) -> bridge::Spacing {
233+
fn spacing_to_external(spacing: Spacing) -> proc_macro::Spacing {
266234
match spacing {
267-
Spacing::Alone => bridge::Spacing::Alone,
268-
Spacing::Joint => bridge::Spacing::Joint,
269-
}
270-
}
271-
272-
impl server::Ident for RustAnalyzer {
273-
fn new(&mut self, string: &str, span: Self::Span, _is_raw: bool) -> Self::Ident {
274-
IdentId(self.ident_interner.intern(&IdentData(tt::Ident { text: string.into(), id: span })))
275-
}
276-
277-
fn span(&mut self, ident: Self::Ident) -> Self::Span {
278-
self.ident_interner.get(ident.0).0.id
279-
}
280-
fn with_span(&mut self, ident: Self::Ident, span: Self::Span) -> Self::Ident {
281-
let data = self.ident_interner.get(ident.0);
282-
let new = IdentData(tt::Ident { id: span, ..data.0.clone() });
283-
IdentId(self.ident_interner.intern(&new))
284-
}
285-
}
286-
287-
impl server::Literal for RustAnalyzer {
288-
fn debug_kind(&mut self, _literal: &Self::Literal) -> String {
289-
// r-a: debug_kind and suffix are unsupported; corresponding client code has been changed to not call these.
290-
// They must still be present to be ABI-compatible and work with upstream proc_macro.
291-
"".to_owned()
292-
}
293-
fn from_str(&mut self, s: &str) -> Result<Self::Literal, ()> {
294-
Ok(Literal { text: s.into(), id: tt::TokenId::unspecified() })
295-
}
296-
fn symbol(&mut self, literal: &Self::Literal) -> String {
297-
literal.text.to_string()
298-
}
299-
fn suffix(&mut self, _literal: &Self::Literal) -> Option<String> {
300-
None
301-
}
302-
303-
fn to_string(&mut self, literal: &Self::Literal) -> String {
304-
literal.to_string()
305-
}
306-
307-
fn integer(&mut self, n: &str) -> Self::Literal {
308-
let n = match n.parse::<i128>() {
309-
Ok(n) => n.to_string(),
310-
Err(_) => n.parse::<u128>().unwrap().to_string(),
311-
};
312-
Literal { text: n.into(), id: tt::TokenId::unspecified() }
313-
}
314-
315-
fn typed_integer(&mut self, n: &str, kind: &str) -> Self::Literal {
316-
macro_rules! def_suffixed_integer {
317-
($kind:ident, $($ty:ty),*) => {
318-
match $kind {
319-
$(
320-
stringify!($ty) => {
321-
let n: $ty = n.parse().unwrap();
322-
format!(concat!("{}", stringify!($ty)), n)
323-
}
324-
)*
325-
_ => unimplemented!("unknown args for typed_integer: n {}, kind {}", n, $kind),
326-
}
327-
}
328-
}
329-
330-
let text = def_suffixed_integer! {kind, u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize};
331-
332-
Literal { text: text.into(), id: tt::TokenId::unspecified() }
333-
}
334-
335-
fn float(&mut self, n: &str) -> Self::Literal {
336-
let n: f64 = n.parse().unwrap();
337-
let mut text = f64::to_string(&n);
338-
if !text.contains('.') {
339-
text += ".0"
340-
}
341-
Literal { text: text.into(), id: tt::TokenId::unspecified() }
342-
}
343-
344-
fn f32(&mut self, n: &str) -> Self::Literal {
345-
let n: f32 = n.parse().unwrap();
346-
let text = format!("{}f32", n);
347-
Literal { text: text.into(), id: tt::TokenId::unspecified() }
348-
}
349-
350-
fn f64(&mut self, n: &str) -> Self::Literal {
351-
let n: f64 = n.parse().unwrap();
352-
let text = format!("{}f64", n);
353-
Literal { text: text.into(), id: tt::TokenId::unspecified() }
354-
}
355-
356-
fn string(&mut self, string: &str) -> Self::Literal {
357-
let mut escaped = String::new();
358-
for ch in string.chars() {
359-
escaped.extend(ch.escape_debug());
360-
}
361-
Literal { text: format!("\"{}\"", escaped).into(), id: tt::TokenId::unspecified() }
362-
}
363-
364-
fn character(&mut self, ch: char) -> Self::Literal {
365-
Literal { text: format!("'{}'", ch).into(), id: tt::TokenId::unspecified() }
366-
}
367-
368-
fn byte_string(&mut self, bytes: &[u8]) -> Self::Literal {
369-
let string = bytes
370-
.iter()
371-
.cloned()
372-
.flat_map(ascii::escape_default)
373-
.map(Into::<char>::into)
374-
.collect::<String>();
375-
376-
Literal { text: format!("b\"{}\"", string).into(), id: tt::TokenId::unspecified() }
377-
}
378-
379-
fn span(&mut self, literal: &Self::Literal) -> Self::Span {
380-
literal.id
381-
}
382-
383-
fn set_span(&mut self, literal: &mut Self::Literal, span: Self::Span) {
384-
literal.id = span;
385-
}
386-
387-
fn subspan(
388-
&mut self,
389-
_literal: &Self::Literal,
390-
_start: Bound<usize>,
391-
_end: Bound<usize>,
392-
) -> Option<Self::Span> {
393-
// FIXME handle span
394-
None
235+
Spacing::Alone => proc_macro::Spacing::Alone,
236+
Spacing::Joint => proc_macro::Spacing::Joint,
395237
}
396238
}
397239

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
use std::collections::HashMap;
2+
use tt::SmolStr;
3+
4+
// Identifier for an interned symbol.
5+
#[derive(Hash, Eq, PartialEq, Copy, Clone)]
6+
pub struct Symbol(u32);
7+
8+
#[derive(Default)]
9+
struct IdentInterner {
10+
idents: HashMap<SmolStr, u32>,
11+
ident_data: Vec<SmolStr>,
12+
}
13+
14+
impl IdentInterner {
15+
fn intern(&mut self, data: &str) -> Symbol {
16+
if let Some(index) = self.idents.get(data) {
17+
return *index;
18+
}
19+
20+
let index = self.idents.len() as u32;
21+
self.ident_data.push(data.clone());
22+
self.idents.insert(data.clone(), index);
23+
index
24+
}
25+
26+
fn get(&self, index: u32) -> &SmolStr {
27+
&self.ident_data[index as usize]
28+
}
29+
30+
#[allow(unused)]
31+
fn get_mut(&mut self, index: u32) -> &mut SmolStr {
32+
self.ident_data.get_mut(index as usize).expect("Should be consistent")
33+
}
34+
}

0 commit comments

Comments
 (0)