Hi All. 

f-strings... 

There was some discussion a couple of years ago 
<https://groups.google.com/d/topic/django-developers/psUTrFUNlQE/discussion> 
about replacing all string formatting operations with f-strings. 

The consensus then was "No, let's not do that": %-formatting and format() 
are both great. Each has advantages 
in readability, depending on context, and there are translation and logging 
issues with f-strings. 

We've since not been allowing (at all) f-strings in the code. A PR comes in 
with a f-string, we remove it (or ask the author to). 

A few months ago this came up again 
<https://github.com/django/django/pull/12650>. We said we needed to come 
back to the mailing, because of the previous discussion, 
but the thread never started — *but* there was an amount of support for at 
least allowing f-strings. (From Claude, Jon, Nick, Paolo, Simon, ...)

We have a PR again where the "Are f-strings allowed?" conversation 
<https://github.com/django/django/pull/12646#discussion_r456892548> has 
come up — so I'm posting to the list: is it time to update the policy? 

So let me quote Simon on #29988 
<https://code.djangoproject.com/ticket/29988#comment:8>: 

> I am in favor where it makes sense and has clear readability benefits. I 
don't have strong rules to provide but I've already seen this feature 
abused in the wild to compose complex formatting string which makes hard to 
differentiate placeholders from their delimiters when function calls are 
involved.
>
> I also share you Claude's concerns about error messages and logging 
message templates.

So, paraphrasing, in favor of allowing, but it's not just true that 
f-strings are always more readable, and can't be used for strings that may 
be translated. 

I had the impression in ≈Feb that that kind of view would have broad 
support. 🤷‍♀️

Beyond that I would like to avoid spending time updating existing uses to 
use f-strings. Sure, if we're editing, and an f-string is more reasonable, 
let's use it, but, like replacing quotes, let's not (please) spend time on 
it beyond that. (I think Jon and Nick may not agree with that from previous 
comments but...) 

As such I've prepared a PR suggesting a change to the Coding Style doc 
<https://github.com/django/django/pull/13214/files>, that should allow us 
to close #29988: 

> * String variable interpolation may use %-formatting, ``format()``, or
>   f-strings as appropriate, with the goal of maximizing code readability.
>   f-strings should not be used for any string that may require 
translation,
>   including error and logging messages. Don't waste time doing unrelated
>   refactoring of existing code to adjust the formatting method.

Tweaks (as always) welcome on the PR. General discussion of the principle 
here? Shall we allow f-strings? Three formatting methods seems a lot... but 
that's what we've got, and folks are getting used to using them. 

Thanks for the input all! 

Kind Regards,

Carlton


-- 
You received this message because you are subscribed to the Google Groups 
"Django developers  (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/f7709597-7f55-4e64-9a2a-f0b62e6e1393o%40googlegroups.com.

Reply via email to