format safety keywords on static items

This includes both `ast::StaticItem` and `ast::StaticForeignItem`.
`safety` was added to both `ast::StaticItem` and `ast::SaticForeignItem`
in https://github.com/rust-lang/rust/pull/124482.
This commit is contained in:
Yacin Tmimi 2024-06-21 00:13:51 -04:00 committed by Caleb Cartwright
parent 3ffd7d46a9
commit 30cdc2b3e9
2 changed files with 31 additions and 4 deletions

View File

@ -1915,6 +1915,7 @@ pub(crate) fn rewrite_struct_field(
pub(crate) struct StaticParts<'a> {
prefix: &'a str,
safety: ast::Safety,
vis: &'a ast::Visibility,
ident: symbol::Ident,
ty: &'a ast::Ty,
@ -1926,11 +1927,12 @@ pub(crate) struct StaticParts<'a> {
impl<'a> StaticParts<'a> {
pub(crate) fn from_item(item: &'a ast::Item) -> Self {
let (defaultness, prefix, ty, mutability, expr) = match &item.kind {
ast::ItemKind::Static(s) => (None, "static", &s.ty, s.mutability, &s.expr),
let (defaultness, prefix, safety, ty, mutability, expr) = match &item.kind {
ast::ItemKind::Static(s) => (None, "static", s.safety, &s.ty, s.mutability, &s.expr),
ast::ItemKind::Const(c) => (
Some(c.defaultness),
"const",
ast::Safety::Default,
&c.ty,
ast::Mutability::Not,
&c.expr,
@ -1939,6 +1941,7 @@ impl<'a> StaticParts<'a> {
};
StaticParts {
prefix,
safety,
vis: &item.vis,
ident: item.ident,
ty,
@ -1956,6 +1959,7 @@ impl<'a> StaticParts<'a> {
};
StaticParts {
prefix: "const",
safety: ast::Safety::Default,
vis: &ti.vis,
ident: ti.ident,
ty,
@ -1973,6 +1977,7 @@ impl<'a> StaticParts<'a> {
};
StaticParts {
prefix: "const",
safety: ast::Safety::Default,
vis: &ii.vis,
ident: ii.ident,
ty,
@ -1989,11 +1994,13 @@ fn rewrite_static(
static_parts: &StaticParts<'_>,
offset: Indent,
) -> Option<String> {
println!("rewriting static");
let colon = colon_spaces(context.config);
let mut prefix = format!(
"{}{}{} {}{}{}",
"{}{}{}{} {}{}{}",
format_visibility(context, static_parts.vis),
static_parts.defaultness.map_or("", format_defaultness),
format_safety(static_parts.safety),
static_parts.prefix,
format_mutability(static_parts.mutability),
rewrite_ident(context, static_parts.ident),
@ -3338,10 +3345,12 @@ impl Rewrite for ast::ForeignItem {
// FIXME(#21): we're dropping potential comments in between the
// function kw here.
let vis = format_visibility(context, &self.vis);
let safety = format_safety(static_foreign_item.safety);
let mut_str = format_mutability(static_foreign_item.mutability);
let prefix = format!(
"{}static {}{}:",
"{}{}static {}{}:",
vis,
safety,
mut_str,
rewrite_ident(context, self.ident)
);

View File

@ -0,0 +1,18 @@
// See tracking issue for unsafe_extern_blocks
// https://github.com/rust-lang/rust/issues/123743
#![feature(unsafe_extern_blocks)]
safe static TEST1: i32;
unsafe extern "C" {
safe static TEST2: i32;
unsafe static TEST3: i32;
static TEST4: i32;
pub safe static TEST5: i32;
pub unsafe static TEST6: i32;
pub static TEST7: i32;
safe fn test1(i: i32);
}