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_async(is_async: &ast::IsAsync) -> &'static str {
+pub(crate) fn format_async(is_async: &ast::Async) -> &'static str {
match is_async {
- ast::IsAsync::Async { .. } => "async ",
- ast::IsAsync::NotAsync => "",
+ ast::Async::Yes { .. } => "async ",
+ ast::Async::No => "",
+ }
+}
+
+#[inline]
+pub(crate) fn format_constness(constness: ast::Const) -> &'static str {
+ match constness {
+ ast::Const::Yes(..) => "const ",
+ ast::Const::No => "",
}
}
#[inline]
-pub(crate) fn format_constness(constness: ast::Constness) -> &'static str {
+pub(crate) fn format_constness_right(constness: ast::Const) -> &'static str {
match constness {
- ast::Constness::Const => "const ",
- ast::Constness::NotConst => "",
+ ast::Const::Yes(..) => " const",
+ ast::Const::No => "",
}
}
#[inline]
pub(crate) fn format_defaultness(defaultness: ast::Defaultness) -> &'static str {
match defaultness {
- ast::Defaultness::Default => "default ",
+ ast::Defaultness::Default(..) => "default ",
ast::Defaultness::Final => "",
}
}
#[inline]
-pub(crate) fn format_unsafety(unsafety: ast::Unsafety) -> &'static str {
+pub(crate) fn format_unsafety(unsafety: ast::Unsafe) -> &'static str {
match unsafety {
- ast::Unsafety::Unsafe => "unsafe ",
- ast::Unsafety::Normal => "",
+ ast::Unsafe::Yes(..) => "unsafe ",
+ ast::Unsafe::No => "",
}
}
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()
&& !$self
.config
.file_lines()
- .intersects(&$self.source_map.lookup_line_range($span))
+ .intersects(&$self.parse_sess.lookup_line_range($span))
};
}
// parens, braces, and brackets in its idiomatic formatting.
pub(crate) fn is_block_expr(context: &RewriteContext<'_>, expr: &ast::Expr, repr: &str) -> bool {
match expr.kind {
- ast::ExprKind::Mac(..)
+ ast::ExprKind::MacCall(..)
| ast::ExprKind::Call(..)
| ast::ExprKind::MethodCall(..)
| ast::ExprKind::Array(..)
| 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,
}
}