@@ -14,12 +14,13 @@ use super::proc_macro::{
14
14
} ;
15
15
16
16
mod token_stream;
17
- pub use token_stream:: * ;
17
+ pub use token_stream:: TokenStream ;
18
+ use token_stream:: TokenStreamBuilder ;
18
19
19
20
mod symbol;
20
21
pub use symbol:: * ;
21
22
22
- use std:: iter:: FromIterator ;
23
+ use std:: { iter:: FromIterator , ops :: Bound } ;
23
24
24
25
type Group = tt:: Subtree ;
25
26
type TokenTree = tt:: TokenTree ;
@@ -76,6 +77,13 @@ impl server::FreeFunctions for RustAnalyzer {
76
77
// https://github.com/rust-lang/rust/pull/71858
77
78
}
78
79
fn track_path ( & mut self , _path : & str ) { }
80
+
81
+ fn literal_from_str (
82
+ & mut self ,
83
+ _s : & str ,
84
+ ) -> Result < bridge:: Literal < Self :: Span , Self :: Symbol > , ( ) > {
85
+ todo ! ( )
86
+ }
79
87
}
80
88
81
89
impl server:: TokenStream for RustAnalyzer {
@@ -92,7 +100,7 @@ impl server::TokenStream for RustAnalyzer {
92
100
}
93
101
fn from_token_tree (
94
102
& mut self ,
95
- tree : bridge:: TokenTree < Self :: TokenStream , Self :: Span , Self :: Ident , Self :: Literal > ,
103
+ tree : bridge:: TokenTree < Self :: TokenStream , Self :: Span , Self :: Symbol > ,
96
104
) -> Self :: TokenStream {
97
105
match tree {
98
106
bridge:: TokenTree :: Group ( group) => {
@@ -107,19 +115,20 @@ impl server::TokenStream for RustAnalyzer {
107
115
Self :: TokenStream :: from_iter ( vec ! [ tree] )
108
116
}
109
117
110
- bridge:: TokenTree :: Ident ( symbol ) => {
111
- todo ! ( "implement " ) ;
118
+ bridge:: TokenTree :: Ident ( _symbol ) => {
119
+ todo ! ( "convert Ident bridge=>TokenStream " ) ;
112
120
// let IdentData(ident) = self.ident_interner.get(index).clone();
113
121
// let ident: tt::Ident = ident;
114
122
// let leaf = tt::Leaf::from(ident);
115
123
// let tree = TokenTree::from(leaf);
116
124
// Self::TokenStream::from_iter(vec![tree])
117
125
}
118
126
119
- bridge:: TokenTree :: Literal ( literal) => {
120
- let leaf = tt:: Leaf :: from ( literal) ;
121
- let tree = TokenTree :: from ( leaf) ;
122
- Self :: TokenStream :: from_iter ( vec ! [ tree] )
127
+ bridge:: TokenTree :: Literal ( _literal) => {
128
+ todo ! ( "convert Literal bridge=>TokenStream" ) ;
129
+ // let leaf = tt::Leaf::from(literal);
130
+ // let tree = TokenTree::from(leaf);
131
+ // Self::TokenStream::from_iter(vec![tree])
123
132
}
124
133
125
134
bridge:: TokenTree :: Punct ( p) => {
@@ -142,7 +151,7 @@ impl server::TokenStream for RustAnalyzer {
142
151
fn concat_trees (
143
152
& mut self ,
144
153
base : Option < Self :: TokenStream > ,
145
- trees : Vec < bridge:: TokenTree < Self :: TokenStream , Self :: Span , Self :: Ident , Self :: Literal > > ,
154
+ trees : Vec < bridge:: TokenTree < Self :: TokenStream , Self :: Span , Self :: Symbol > > ,
146
155
) -> Self :: TokenStream {
147
156
let mut builder = TokenStreamBuilder :: new ( ) ;
148
157
if let Some ( base) = base {
@@ -172,15 +181,18 @@ impl server::TokenStream for RustAnalyzer {
172
181
fn into_trees (
173
182
& mut self ,
174
183
stream : Self :: TokenStream ,
175
- ) -> Vec < bridge:: TokenTree < Self :: TokenStream , Self :: Span , Self :: Ident , Self :: Literal > > {
184
+ ) -> Vec < bridge:: TokenTree < Self :: TokenStream , Self :: Span , Self :: Symbol > > {
176
185
stream
177
186
. into_iter ( )
178
187
. map ( |tree| match tree {
179
- tt:: TokenTree :: Leaf ( tt:: Leaf :: Ident ( ident ) ) => {
180
- todo ! ( "implement " ) ;
188
+ tt:: TokenTree :: Leaf ( tt:: Leaf :: Ident ( _ident ) ) => {
189
+ todo ! ( "convert Ident tt=>bridge " ) ;
181
190
// bridge::TokenTree::Ident(Symbol(self.ident_interner.intern(&IdentData(ident))))
182
191
}
183
- tt:: TokenTree :: Leaf ( tt:: Leaf :: Literal ( lit) ) => bridge:: TokenTree :: Literal ( lit) ,
192
+ tt:: TokenTree :: Leaf ( tt:: Leaf :: Literal ( _lit) ) => {
193
+ todo ! ( "convert Literal tt=>bridge" ) ;
194
+ // bridge::TokenTree::Literal(lit)
195
+ }
184
196
tt:: TokenTree :: Leaf ( tt:: Leaf :: Punct ( punct) ) => {
185
197
bridge:: TokenTree :: Punct ( bridge:: Punct {
186
198
ch : punct. char as u8 ,
@@ -317,6 +329,15 @@ impl server::Span for RustAnalyzer {
317
329
// Just return the first span again, because some macros will unwrap the result.
318
330
Some ( first)
319
331
}
332
+ fn subspan (
333
+ & mut self ,
334
+ span : Self :: Span ,
335
+ _start : Bound < usize > ,
336
+ _end : Bound < usize > ,
337
+ ) -> Option < Self :: Span > {
338
+ // Just return the span again, because some macros will unwrap the result.
339
+ Some ( span)
340
+ }
320
341
fn resolved_at ( & mut self , _span : Self :: Span , _at : Self :: Span ) -> Self :: Span {
321
342
// FIXME handle span
322
343
tt:: TokenId :: unspecified ( )
@@ -343,6 +364,12 @@ impl server::MultiSpan for RustAnalyzer {
343
364
}
344
365
}
345
366
367
+ impl server:: Symbol for RustAnalyzer {
368
+ fn normalize_and_validate_ident ( & mut self , _string : & str ) -> Result < Self :: Symbol , ( ) > {
369
+ todo ! ( )
370
+ }
371
+ }
372
+
346
373
impl server:: Server for RustAnalyzer {
347
374
fn globals ( & mut self ) -> bridge:: ExpnGlobals < Self :: Span > {
348
375
bridge:: ExpnGlobals {
@@ -351,6 +378,14 @@ impl server::Server for RustAnalyzer {
351
378
mixed_site : Span :: unspecified ( ) ,
352
379
}
353
380
}
381
+
382
+ fn intern_symbol ( _ident : & str ) -> Self :: Symbol {
383
+ todo ! ( "intern_symbol" )
384
+ }
385
+
386
+ fn with_symbol_string ( _symbol : & Self :: Symbol , _f : impl FnOnce ( & str ) ) {
387
+ todo ! ( "with_symbol_string" )
388
+ }
354
389
}
355
390
356
391
#[ cfg( test) ]
0 commit comments