mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-29 13:24:57 +00:00
refactor: Rename FormatStringContinuation
to FormatImplicitConcatenatedString
(#13531)
This commit is contained in:
parent
c046101b79
commit
253f5f269a
6 changed files with 40 additions and 23 deletions
|
@ -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)),
|
||||||
]
|
]
|
||||||
)?;
|
)?;
|
||||||
|
|
|
@ -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),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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),
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>),
|
||||||
|
|
|
@ -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)
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue