use std::borrow::Cow;
-use rustc_ast_pretty::pprust;
-use rustc_span::{sym, BytePos, ExpnId, Span, Symbol, SyntaxContext};
-use rustc_target::spec::abi;
-use syntax::ast::{
+use rustc_ast::ast::{
self, Attribute, CrateSugar, MetaItem, MetaItemKind, NestedMetaItem, NodeId, Path, Visibility,
VisibilityKind,
};
-use syntax::ptr;
+use rustc_ast::ptr;
+use rustc_ast_pretty::pprust;
+use rustc_span::{sym, symbol, BytePos, ExpnId, Span, Symbol, SyntaxContext};
use unicode_width::UnicodeWidthStr;
use crate::comment::{filter_normal_code, CharClasses, FullCodeCharKind, LineClasses};
Symbol::intern("rustfmt::skip")
}
-pub(crate) fn rewrite_ident<'a>(context: &'a RewriteContext<'_>, ident: ast::Ident) -> &'a str {
+pub(crate) fn rewrite_ident<'a>(context: &'a RewriteContext<'_>, ident: symbol::Ident) -> &'a str {
context.snippet(ident.span)
}
}
pub(crate) fn is_same_visibility(a: &Visibility, b: &Visibility) -> bool {
- match (&a.node, &b.node) {
+ match (&a.kind, &b.kind) {
(
VisibilityKind::Restricted { path: p, .. },
VisibilityKind::Restricted { path: q, .. },
- ) => pprust::path_to_string(p) == pprust::path_to_string(q),
+ ) => pprust::path_to_string(&p) == pprust::path_to_string(&q),
(VisibilityKind::Public, VisibilityKind::Public)
| (VisibilityKind::Inherited, VisibilityKind::Inherited)
| (
context: &RewriteContext<'_>,
vis: &Visibility,
) -> Cow<'static, str> {
- match vis.node {
+ match vis.kind {
VisibilityKind::Public => Cow::from("pub "),
VisibilityKind::Inherited => Cow::from(""),
VisibilityKind::Crate(CrateSugar::PubCrate) => Cow::from("pub(crate) "),
}
}
+#[inline]
+pub(crate) fn format_constness_right(constness: ast::Const) -> &'static str {
+ match constness {
+ ast::Const::Yes(..) => " const",
+ ast::Const::No => "",
+ }
+}
+
#[inline]
pub(crate) fn format_defaultness(defaultness: ast::Defaultness) -> &'static str {
match defaultness {
is_mod: bool,
) -> Cow<'static, str> {
let abi = match ext {
- ast::Extern::None => abi::Abi::Rust,
- ast::Extern::Implicit => abi::Abi::C,
- ast::Extern::Explicit(abi) => {
- abi::lookup(&abi.symbol_unescaped.as_str()).unwrap_or(abi::Abi::Rust)
- }
+ ast::Extern::None => "Rust".to_owned(),
+ ast::Extern::Implicit => "C".to_owned(),
+ ast::Extern::Explicit(abi) => abi.symbol_unescaped.to_string(),
};
- if abi == abi::Abi::Rust && !is_mod {
+ if abi == "Rust" && !is_mod {
Cow::from("")
- } else if abi == abi::Abi::C && !explicit_abi {
+ } else if abi == "C" && !explicit_abi {
Cow::from("extern ")
} else {
- Cow::from(format!("extern {} ", abi))
+ Cow::from(format!(r#"extern "{}" "#, abi))
}
}
#[inline]
-// Transform `Vec<syntax::ptr::P<T>>` into `Vec<&T>`
+// Transform `Vec<rustc_ast::ptr::P<T>>` into `Vec<&T>`
pub(crate) fn ptr_vec_to_ref_vec<T>(vec: &[ptr::P<T>]) -> Vec<&T> {
vec.iter().map(|x| &**x).collect::<Vec<_>>()
}
|| path_str == &*depr_skip_annotation().as_str()
}
MetaItemKind::List(ref l) => {
- meta_item.check_name(sym::cfg_attr) && l.len() == 2 && is_skip_nested(&l[1])
+ meta_item.has_name(sym::cfg_attr) && l.len() == 2 && is_skip_nested(&l[1])
}
_ => false,
}
#[inline]
pub(crate) fn semicolon_for_expr(context: &RewriteContext<'_>, expr: &ast::Expr) -> bool {
+ // Never try to insert semicolons on expressions when we're inside
+ // a macro definition - this can prevent the macro from compiling
+ // when used in expression position
+ if context.is_macro_def {
+ return false;
+ }
+
match expr.kind {
ast::ExprKind::Ret(..) | ast::ExprKind::Continue(..) | ast::ExprKind::Break(..) => {
context.config.trailing_semicolon()
Span::new(lo, hi, SyntaxContext::root())
}
+pub(crate) fn mk_sp_lo_plus_one(lo: BytePos) -> Span {
+ Span::new(lo, lo + BytePos(1), SyntaxContext::root())
+}
+
// Returns `true` if the given span does not intersect with file lines.
macro_rules! out_of_file_lines_range {
($self:ident, $span:expr) => {
| ast::ExprKind::While(..)
| ast::ExprKind::If(..)
| ast::ExprKind::Block(..)
+ | ast::ExprKind::ConstBlock(..)
| ast::ExprKind::Async(..)
| ast::ExprKind::Loop(..)
| ast::ExprKind::ForLoop(..)
| ast::ExprKind::Err
| ast::ExprKind::Field(..)
| ast::ExprKind::InlineAsm(..)
+ | ast::ExprKind::LlvmInlineAsm(..)
| ast::ExprKind::Let(..)
| ast::ExprKind::Path(..)
| ast::ExprKind::Range(..)
| ast::ExprKind::Ret(..)
| ast::ExprKind::Tup(..)
| ast::ExprKind::Type(..)
- | ast::ExprKind::Yield(None) => false,
+ | ast::ExprKind::Yield(None)
+ | ast::ExprKind::Underscore => false,
}
}