43
43
//! [ts]: https://doc.rust-lang.org/proc_macro/struct.TokenStream.html
44
44
45
45
// Proc-macro2 types in rustdoc of other crates get linked to here.
46
- #![ doc( html_root_url = "https://docs.rs/proc-macro2/0.3.8 " ) ]
46
+ #![ doc( html_root_url = "https://docs.rs/proc-macro2/0.4.0 " ) ]
47
47
#![ cfg_attr( feature = "nightly" , feature( proc_macro) ) ]
48
48
49
49
#[ cfg( feature = "proc-macro" ) ]
50
50
extern crate proc_macro;
51
51
extern crate unicode_xid;
52
52
53
+ use std:: cmp:: Ordering ;
53
54
use std:: fmt;
55
+ use std:: hash:: { Hash , Hasher } ;
54
56
use std:: iter:: FromIterator ;
55
57
use std:: marker;
56
58
use std:: rc:: Rc ;
@@ -284,26 +286,26 @@ impl fmt::Debug for Span {
284
286
#[ derive( Clone ) ]
285
287
pub enum TokenTree {
286
288
Group ( Group ) ,
287
- Term ( Term ) ,
288
- Op ( Op ) ,
289
+ Ident ( Ident ) ,
290
+ Punct ( Punct ) ,
289
291
Literal ( Literal ) ,
290
292
}
291
293
292
294
impl TokenTree {
293
295
pub fn span ( & self ) -> Span {
294
296
match * self {
295
297
TokenTree :: Group ( ref t) => t. span ( ) ,
296
- TokenTree :: Term ( ref t) => t. span ( ) ,
297
- TokenTree :: Op ( ref t) => t. span ( ) ,
298
+ TokenTree :: Ident ( ref t) => t. span ( ) ,
299
+ TokenTree :: Punct ( ref t) => t. span ( ) ,
298
300
TokenTree :: Literal ( ref t) => t. span ( ) ,
299
301
}
300
302
}
301
303
302
304
pub fn set_span ( & mut self , span : Span ) {
303
305
match * self {
304
306
TokenTree :: Group ( ref mut t) => t. set_span ( span) ,
305
- TokenTree :: Term ( ref mut t) => t. set_span ( span) ,
306
- TokenTree :: Op ( ref mut t) => t. set_span ( span) ,
307
+ TokenTree :: Ident ( ref mut t) => t. set_span ( span) ,
308
+ TokenTree :: Punct ( ref mut t) => t. set_span ( span) ,
307
309
TokenTree :: Literal ( ref mut t) => t. set_span ( span) ,
308
310
}
309
311
}
@@ -315,15 +317,15 @@ impl From<Group> for TokenTree {
315
317
}
316
318
}
317
319
318
- impl From < Term > for TokenTree {
319
- fn from ( g : Term ) -> TokenTree {
320
- TokenTree :: Term ( g)
320
+ impl From < Ident > for TokenTree {
321
+ fn from ( g : Ident ) -> TokenTree {
322
+ TokenTree :: Ident ( g)
321
323
}
322
324
}
323
325
324
- impl From < Op > for TokenTree {
325
- fn from ( g : Op ) -> TokenTree {
326
- TokenTree :: Op ( g)
326
+ impl From < Punct > for TokenTree {
327
+ fn from ( g : Punct ) -> TokenTree {
328
+ TokenTree :: Punct ( g)
327
329
}
328
330
}
329
331
@@ -337,8 +339,8 @@ impl fmt::Display for TokenTree {
337
339
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
338
340
match * self {
339
341
TokenTree :: Group ( ref t) => t. fmt ( f) ,
340
- TokenTree :: Term ( ref t) => t. fmt ( f) ,
341
- TokenTree :: Op ( ref t) => t. fmt ( f) ,
342
+ TokenTree :: Ident ( ref t) => t. fmt ( f) ,
343
+ TokenTree :: Punct ( ref t) => t. fmt ( f) ,
342
344
TokenTree :: Literal ( ref t) => t. fmt ( f) ,
343
345
}
344
346
}
@@ -350,8 +352,8 @@ impl fmt::Debug for TokenTree {
350
352
// so don't bother with an extra layer of indirection
351
353
match * self {
352
354
TokenTree :: Group ( ref t) => t. fmt ( f) ,
353
- TokenTree :: Term ( ref t) => t. fmt ( f) ,
354
- TokenTree :: Op ( ref t) => t. fmt ( f) ,
355
+ TokenTree :: Ident ( ref t) => t. fmt ( f) ,
356
+ TokenTree :: Punct ( ref t) => t. fmt ( f) ,
355
357
TokenTree :: Literal ( ref t) => t. fmt ( f) ,
356
358
}
357
359
}
@@ -416,7 +418,7 @@ impl fmt::Debug for Group {
416
418
}
417
419
418
420
#[ derive( Copy , Clone ) ]
419
- pub struct Op {
421
+ pub struct Punct {
420
422
op : char ,
421
423
spacing : Spacing ,
422
424
span : Span ,
@@ -428,16 +430,16 @@ pub enum Spacing {
428
430
Joint ,
429
431
}
430
432
431
- impl Op {
432
- pub fn new ( op : char , spacing : Spacing ) -> Op {
433
- Op {
433
+ impl Punct {
434
+ pub fn new ( op : char , spacing : Spacing ) -> Punct {
435
+ Punct {
434
436
op : op,
435
437
spacing : spacing,
436
438
span : Span :: call_site ( ) ,
437
439
}
438
440
}
439
441
440
- pub fn op ( & self ) -> char {
442
+ pub fn as_char ( & self ) -> char {
441
443
self . op
442
444
}
443
445
@@ -454,15 +456,15 @@ impl Op {
454
456
}
455
457
}
456
458
457
- impl fmt:: Display for Op {
459
+ impl fmt:: Display for Punct {
458
460
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
459
461
self . op . fmt ( f)
460
462
}
461
463
}
462
464
463
- impl fmt:: Debug for Op {
465
+ impl fmt:: Debug for Punct {
464
466
fn fmt ( & self , fmt : & mut fmt:: Formatter ) -> fmt:: Result {
465
- let mut debug = fmt. debug_struct ( "Op " ) ;
467
+ let mut debug = fmt. debug_struct ( "Punct " ) ;
466
468
debug. field ( "op" , & self . op ) ;
467
469
debug. field ( "spacing" , & self . spacing ) ;
468
470
#[ cfg( procmacro2_semver_exempt) ]
@@ -471,26 +473,31 @@ impl fmt::Debug for Op {
471
473
}
472
474
}
473
475
474
- #[ derive( Copy , Clone ) ]
475
- pub struct Term {
476
- inner : imp:: Term ,
476
+ #[ derive( Clone ) ]
477
+ pub struct Ident {
478
+ inner : imp:: Ident ,
477
479
_marker : marker:: PhantomData < Rc < ( ) > > ,
478
480
}
479
481
480
- impl Term {
481
- fn _new ( inner : imp:: Term ) -> Term {
482
- Term {
482
+ impl Ident {
483
+ fn _new ( inner : imp:: Ident ) -> Ident {
484
+ Ident {
483
485
inner : inner,
484
486
_marker : marker:: PhantomData ,
485
487
}
486
488
}
487
489
488
- pub fn new ( string : & str , span : Span ) -> Term {
489
- Term :: _new ( imp:: Term :: new ( string, span. inner ) )
490
+ pub fn new ( string : & str , span : Span ) -> Ident {
491
+ Ident :: _new ( imp:: Ident :: new ( string, span. inner ) )
492
+ }
493
+
494
+ #[ cfg( procmacro2_semver_exempt) ]
495
+ pub fn new_raw ( string : & str , span : Span ) -> Ident {
496
+ Ident :: _new_raw ( string, span)
490
497
}
491
498
492
- pub fn as_str ( & self ) -> & str {
493
- self . inner . as_str ( )
499
+ fn _new_raw ( string : & str , span : Span ) -> Ident {
500
+ Ident :: _new ( imp :: Ident :: new_raw ( string , span . inner ) )
494
501
}
495
502
496
503
pub fn span ( & self ) -> Span {
@@ -502,13 +509,40 @@ impl Term {
502
509
}
503
510
}
504
511
505
- impl fmt:: Display for Term {
512
+ impl PartialEq for Ident {
513
+ fn eq ( & self , other : & Ident ) -> bool {
514
+ self . to_string ( ) == other. to_string ( )
515
+ }
516
+ }
517
+
518
+ impl Eq for Ident {
519
+ }
520
+
521
+ impl PartialOrd for Ident {
522
+ fn partial_cmp ( & self , other : & Ident ) -> Option < Ordering > {
523
+ Some ( self . cmp ( other) )
524
+ }
525
+ }
526
+
527
+ impl Ord for Ident {
528
+ fn cmp ( & self , other : & Ident ) -> Ordering {
529
+ self . to_string ( ) . cmp ( & other. to_string ( ) )
530
+ }
531
+ }
532
+
533
+ impl Hash for Ident {
534
+ fn hash < H : Hasher > ( & self , hasher : & mut H ) {
535
+ self . to_string ( ) . hash ( hasher)
536
+ }
537
+ }
538
+
539
+ impl fmt:: Display for Ident {
506
540
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
507
- self . as_str ( ) . fmt ( f)
541
+ self . inner . fmt ( f)
508
542
}
509
543
}
510
544
511
- impl fmt:: Debug for Term {
545
+ impl fmt:: Debug for Ident {
512
546
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
513
547
self . inner . fmt ( f)
514
548
}
0 commit comments