Fix pretty-printing for raw identifiers
This commit is contained in:
parent
ab8b961677
commit
a637dd00c8
7 changed files with 19 additions and 12 deletions
|
@ -13,7 +13,7 @@ pub use self::AnnNode::*;
|
||||||
use syntax::abi::Abi;
|
use syntax::abi::Abi;
|
||||||
use syntax::ast;
|
use syntax::ast;
|
||||||
use syntax::codemap::{CodeMap, Spanned};
|
use syntax::codemap::{CodeMap, Spanned};
|
||||||
use syntax::parse::ParseSess;
|
use syntax::parse::{token, ParseSess};
|
||||||
use syntax::parse::lexer::comments;
|
use syntax::parse::lexer::comments;
|
||||||
use syntax::print::pp::{self, Breaks};
|
use syntax::print::pp::{self, Breaks};
|
||||||
use syntax::print::pp::Breaks::{Consistent, Inconsistent};
|
use syntax::print::pp::Breaks::{Consistent, Inconsistent};
|
||||||
|
@ -1561,7 +1561,11 @@ impl<'a> State<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_name(&mut self, name: ast::Name) -> io::Result<()> {
|
pub fn print_name(&mut self, name: ast::Name) -> io::Result<()> {
|
||||||
self.s.word(&name.as_str())?;
|
if token::is_raw_guess(ast::Ident::with_empty_ctxt(name)) {
|
||||||
|
self.s.word(&format!("r#{}", name))?;
|
||||||
|
} else {
|
||||||
|
self.s.word(&name.as_str())?;
|
||||||
|
}
|
||||||
self.ann.post(self, NodeName(&name))
|
self.ann.post(self, NodeName(&name))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -142,6 +142,13 @@ pub fn is_path_segment_keyword(id: ast::Ident) -> bool {
|
||||||
id.name == keywords::DollarCrate.name()
|
id.name == keywords::DollarCrate.name()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We see this identifier in a normal identifier position, like variable name or a type.
|
||||||
|
// How was it written originally? Did it use the raw form? Let's try to guess.
|
||||||
|
pub fn is_raw_guess(ident: ast::Ident) -> bool {
|
||||||
|
ident.name != keywords::Invalid.name() &&
|
||||||
|
is_reserved_ident(ident) && !is_path_segment_keyword(ident)
|
||||||
|
}
|
||||||
|
|
||||||
// Returns true for reserved identifiers used internally for elided lifetimes,
|
// Returns true for reserved identifiers used internally for elided lifetimes,
|
||||||
// unnamed method parameters, crate root module, error recovery etc.
|
// unnamed method parameters, crate root module, error recovery etc.
|
||||||
pub fn is_special_ident(id: ast::Ident) -> bool {
|
pub fn is_special_ident(id: ast::Ident) -> bool {
|
||||||
|
@ -236,7 +243,7 @@ impl Token {
|
||||||
|
|
||||||
/// Recovers a `Token` from an `ast::Ident`. This creates a raw identifier if necessary.
|
/// Recovers a `Token` from an `ast::Ident`. This creates a raw identifier if necessary.
|
||||||
pub fn from_ast_ident(ident: ast::Ident) -> Token {
|
pub fn from_ast_ident(ident: ast::Ident) -> Token {
|
||||||
Ident(ident, is_reserved_ident(ident) && !is_path_segment_keyword(ident))
|
Ident(ident, is_raw_guess(ident))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns `true` if the token starts with '>'.
|
/// Returns `true` if the token starts with '>'.
|
||||||
|
|
|
@ -2373,7 +2373,11 @@ impl<'a> State<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_ident(&mut self, ident: ast::Ident) -> io::Result<()> {
|
pub fn print_ident(&mut self, ident: ast::Ident) -> io::Result<()> {
|
||||||
self.s.word(&ident.name.as_str())?;
|
if token::is_raw_guess(ident) {
|
||||||
|
self.s.word(&format!("r#{}", ident))?;
|
||||||
|
} else {
|
||||||
|
self.s.word(&ident.name.as_str())?;
|
||||||
|
}
|
||||||
self.ann.post(self, NodeIdent(&ident))
|
self.ann.post(self, NodeIdent(&ident))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// ignore-pretty
|
|
||||||
|
|
||||||
#![feature(raw_identifiers)]
|
#![feature(raw_identifiers)]
|
||||||
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// ignore-pretty
|
|
||||||
|
|
||||||
#![feature(raw_identifiers)]
|
#![feature(raw_identifiers)]
|
||||||
|
|
||||||
fn r#fn(r#match: u32) -> u32 {
|
fn r#fn(r#match: u32) -> u32 {
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// ignore-pretty
|
|
||||||
|
|
||||||
#![feature(raw_identifiers)]
|
#![feature(raw_identifiers)]
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq)]
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// ignore-pretty
|
|
||||||
|
|
||||||
#![feature(decl_macro)]
|
#![feature(decl_macro)]
|
||||||
#![feature(raw_identifiers)]
|
#![feature(raw_identifiers)]
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue