refactor: Rename FormatStringContinuation to FormatImplicitConcatenatedString (#13531)

This commit is contained in:
Micha Reiser 2024-09-27 10:24:50 +02:00 committed by GitHub
parent c046101b79
commit 253f5f269a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 40 additions and 23 deletions

View file

@ -20,7 +20,7 @@ use crate::expression::parentheses::{
}; };
use crate::expression::OperatorPrecedence; use crate::expression::OperatorPrecedence;
use crate::prelude::*; use crate::prelude::*;
use crate::string::{AnyString, FormatStringContinuation}; use crate::string::{AnyString, FormatImplicitConcatenatedString};
#[derive(Copy, Clone, Debug)] #[derive(Copy, Clone, Debug)]
pub(super) enum BinaryLike<'a> { pub(super) enum BinaryLike<'a> {
@ -394,10 +394,10 @@ impl Format<PyFormatContext<'_>> for BinaryLike<'_> {
[ [
operand.leading_binary_comments().map(leading_comments), operand.leading_binary_comments().map(leading_comments),
leading_comments(comments.leading(string_constant)), leading_comments(comments.leading(string_constant)),
// Call `FormatStringContinuation` directly to avoid formatting // Call `FormatImplicitConcatenatedString` directly to avoid formatting
// the implicitly concatenated string with the enclosing group // the implicitly concatenated string with the enclosing group
// because the group is added by the binary like formatting. // because the group is added by the binary like formatting.
FormatStringContinuation::new(&string_constant), FormatImplicitConcatenatedString::new(string_constant),
trailing_comments(comments.trailing(string_constant)), trailing_comments(comments.trailing(string_constant)),
operand.trailing_binary_comments().map(trailing_comments), operand.trailing_binary_comments().map(trailing_comments),
line_suffix_boundary(), line_suffix_boundary(),
@ -413,10 +413,10 @@ impl Format<PyFormatContext<'_>> for BinaryLike<'_> {
f, f,
[ [
leading_comments(comments.leading(string_constant)), leading_comments(comments.leading(string_constant)),
// Call `FormatStringContinuation` directly to avoid formatting // Call `FormatImplicitConcatenatedString` directly to avoid formatting
// the implicitly concatenated string with the enclosing group // the implicitly concatenated string with the enclosing group
// because the group is added by the binary like formatting. // because the group is added by the binary like formatting.
FormatStringContinuation::new(&string_constant), FormatImplicitConcatenatedString::new(string_constant),
trailing_comments(comments.trailing(string_constant)), trailing_comments(comments.trailing(string_constant)),
] ]
)?; )?;

View file

@ -5,7 +5,7 @@ use crate::expression::parentheses::{
in_parentheses_only_group, NeedsParentheses, OptionalParentheses, in_parentheses_only_group, NeedsParentheses, OptionalParentheses,
}; };
use crate::prelude::*; use crate::prelude::*;
use crate::string::{AnyString, FormatStringContinuation}; use crate::string::{AnyString, FormatImplicitConcatenatedString};
#[derive(Default)] #[derive(Default)]
pub struct FormatExprBytesLiteral; pub struct FormatExprBytesLiteral;
@ -16,8 +16,7 @@ impl FormatNodeRule<ExprBytesLiteral> for FormatExprBytesLiteral {
match value.as_slice() { match value.as_slice() {
[bytes_literal] => bytes_literal.format().fmt(f), [bytes_literal] => bytes_literal.format().fmt(f),
_ => in_parentheses_only_group(&FormatStringContinuation::new(&AnyString::Bytes(item))) _ => in_parentheses_only_group(&FormatImplicitConcatenatedString::new(item)).fmt(f),
.fmt(f),
} }
} }
} }

View file

@ -7,7 +7,7 @@ use crate::expression::parentheses::{
}; };
use crate::other::f_string_part::FormatFStringPart; use crate::other::f_string_part::FormatFStringPart;
use crate::prelude::*; use crate::prelude::*;
use crate::string::{AnyString, FormatStringContinuation, Quoting}; use crate::string::{AnyString, FormatImplicitConcatenatedString, Quoting};
#[derive(Default)] #[derive(Default)]
pub struct FormatExprFString; pub struct FormatExprFString;
@ -22,10 +22,7 @@ impl FormatNodeRule<ExprFString> for FormatExprFString {
f_string_quoting(item, &f.context().locator()), f_string_quoting(item, &f.context().locator()),
) )
.fmt(f), .fmt(f),
_ => { _ => in_parentheses_only_group(&FormatImplicitConcatenatedString::new(item)).fmt(f),
in_parentheses_only_group(&FormatStringContinuation::new(&AnyString::FString(item)))
.fmt(f)
}
} }
} }
} }

View file

@ -6,7 +6,7 @@ use crate::expression::parentheses::{
}; };
use crate::other::string_literal::{FormatStringLiteral, StringLiteralKind}; use crate::other::string_literal::{FormatStringLiteral, StringLiteralKind};
use crate::prelude::*; use crate::prelude::*;
use crate::string::{AnyString, FormatStringContinuation}; use crate::string::{AnyString, FormatImplicitConcatenatedString};
#[derive(Default)] #[derive(Default)]
pub struct FormatExprStringLiteral { pub struct FormatExprStringLiteral {
@ -55,7 +55,7 @@ impl FormatNodeRule<ExprStringLiteral> for FormatExprStringLiteral {
// ensures that the docstring is a *single* string literal. // ensures that the docstring is a *single* string literal.
assert!(!self.kind.is_docstring()); assert!(!self.kind.is_docstring());
in_parentheses_only_group(&FormatStringContinuation::new(&AnyString::String(item))) in_parentheses_only_group(&FormatImplicitConcatenatedString::new(item))
} }
.fmt(f), .fmt(f),
} }

View file

@ -118,6 +118,24 @@ impl<'a> From<&AnyString<'a>> for ExpressionRef<'a> {
} }
} }
impl<'a> From<&'a ExprBytesLiteral> for AnyString<'a> {
fn from(value: &'a ExprBytesLiteral) -> Self {
AnyString::Bytes(value)
}
}
impl<'a> From<&'a ExprStringLiteral> for AnyString<'a> {
fn from(value: &'a ExprStringLiteral) -> Self {
AnyString::String(value)
}
}
impl<'a> From<&'a ExprFString> for AnyString<'a> {
fn from(value: &'a ExprFString) -> Self {
AnyString::FString(value)
}
}
pub(super) enum AnyStringPartsIter<'a> { pub(super) enum AnyStringPartsIter<'a> {
String(std::slice::Iter<'a, StringLiteral>), String(std::slice::Iter<'a, StringLiteral>),
Bytes(std::slice::Iter<'a, ast::BytesLiteral>), Bytes(std::slice::Iter<'a, ast::BytesLiteral>),

View file

@ -27,17 +27,19 @@ pub(crate) enum Quoting {
/// Formats any implicitly concatenated string. This could be any valid combination /// Formats any implicitly concatenated string. This could be any valid combination
/// of string, bytes or f-string literals. /// of string, bytes or f-string literals.
pub(crate) struct FormatStringContinuation<'a> { pub(crate) struct FormatImplicitConcatenatedString<'a> {
string: &'a AnyString<'a>, string: AnyString<'a>,
} }
impl<'a> FormatStringContinuation<'a> { impl<'a> FormatImplicitConcatenatedString<'a> {
pub(crate) fn new(string: &'a AnyString<'a>) -> Self { pub(crate) fn new(string: impl Into<AnyString<'a>>) -> Self {
Self { string } Self {
string: string.into(),
}
} }
} }
impl Format<PyFormatContext<'_>> for FormatStringContinuation<'_> { impl Format<PyFormatContext<'_>> for FormatImplicitConcatenatedString<'_> {
fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> {
let comments = f.context().comments().clone(); let comments = f.context().comments().clone();
let quoting = self.string.quoting(&f.context().locator()); let quoting = self.string.quoting(&f.context().locator());
@ -45,11 +47,12 @@ impl Format<PyFormatContext<'_>> for FormatStringContinuation<'_> {
let mut joiner = f.join_with(in_parentheses_only_soft_line_break_or_space()); let mut joiner = f.join_with(in_parentheses_only_soft_line_break_or_space());
for part in self.string.parts(quoting) { for part in self.string.parts(quoting) {
let part_comments = comments.leading_dangling_trailing(&part);
joiner.entry(&format_args![ joiner.entry(&format_args![
line_suffix_boundary(), line_suffix_boundary(),
leading_comments(comments.leading(&part)), leading_comments(part_comments.leading),
part, part,
trailing_comments(comments.trailing(&part)) trailing_comments(part_comments.trailing)
]); ]);
} }