Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Preserve quotes in generated f-strings #15794

Merged
merged 13 commits into from
Jan 29, 2025
Prev Previous commit
Next Next commit
pass along the quote from Checker::default_string_flags for f-string
in RUF030
  • Loading branch information
ntBre committed Jan 28, 2025
commit 25deb4fde127d9e648a8098289c69d2460fe846a
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ pub(crate) fn assert_with_print_message(checker: &mut Checker, stmt: &ast::StmtA
mod print_arguments {
use itertools::Itertools;
use ruff_python_ast::{
Arguments, ConversionFlag, Expr, ExprFString, FString, FStringElement, FStringElements,
FStringExpressionElement, FStringFlags, FStringLiteralElement, FStringValue, StringLiteral,
StringLiteralFlags,
str::Quote, Arguments, ConversionFlag, Expr, ExprFString, FString, FStringElement,
FStringElements, FStringExpressionElement, FStringFlags, FStringLiteralElement,
FStringValue, StringFlags, StringLiteral, StringLiteralFlags,
};
use ruff_text_size::TextRange;

Expand Down Expand Up @@ -222,6 +222,7 @@ mod print_arguments {
fn args_to_fstring_expr(
mut args: impl ExactSizeIterator<Item = Vec<FStringElement>>,
sep: impl ExactSizeIterator<Item = FStringElement>,
quote: Quote,
) -> Option<Expr> {
// If there are no arguments, short-circuit and return `None`
let first_arg = args.next()?;
Expand All @@ -236,7 +237,7 @@ mod print_arguments {
Some(Expr::FString(ExprFString {
value: FStringValue::single(FString {
elements: FStringElements::from(fstring_elements),
flags: FStringFlags::default(),
flags: FStringFlags::default().with_quote_style(quote),
range: TextRange::default(),
}),
range: TextRange::default(),
Expand Down Expand Up @@ -286,7 +287,8 @@ mod print_arguments {

// Attempt to convert the `sep` and `args` arguments to a string literal,
// falling back to an f-string if the arguments are not all string literals.
args_to_string_literal_expr(args.iter(), sep.iter(), flags)
.or_else(|| args_to_fstring_expr(args.into_iter(), sep.into_iter()))
args_to_string_literal_expr(args.iter(), sep.iter(), flags).or_else(|| {
args_to_fstring_expr(args.into_iter(), sep.into_iter(), flags.quote_style())
})
}
}