Skip to content

Implement flynt's "join and concat to f-string" transforms #2102

@akx

Description

@akx

flynt is a specialized linter for f-string usage.

UP031 and UP032 implement flynt's core features, but the two extra transforms

 -tc, --transform-concats Replace string concatenations (defined as + operations involving string literals) with f-strings. Available only if flynt is installed with 3.8+ interpreter. -tj, --transform-joins Replace static joins (where the joiner is a string literal and the joinee is a static- length list) with f-strings. Available only if flynt is installed with 3.8+ interpreter. 

i.e.

 a = "Hello" -msg = a + " World" +msg = f"{a} World" -msg2 = "Finally, " + a + " World" +msg2 = "Finally, {a} World"

and

 a = "Hello" -msg1 = " ".join([a, " World"]) -msg2 = "".join(["Finally, ", a, " World"]) -msg3 = "x".join(("1", "2", "3")) -msg4 = "x".join({"4", "5", "yee"}) -msg5 = "y".join([1, 2, 3]) # Should be transformed +msg1 = f"{a} World" +msg2 = f"Finally, {a} World" +msg3 = "1x2x3" +msg4 = "4x5xyee" +msg5 = f"{1}y{2}y{3}" # Should be transformed msg6 = a.join(["1", "2", "3"]) # Should not be transformed (not a static joiner) msg7 = "a".join(a) # Should not be transformed (not a static joinee) msg8 = "a".join([a, a, *a]) # Should not be transformed (not a static length)

respectively could be implemented in Ruff too. (I'd like to work on them! 😄) Should these be FLY series, or should they be RUF?

Refs #2097 (relating to f-strings)

Metadata

Metadata

Assignees

No one assigned

    Labels

    ruleImplementing or modifying a lint rule

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions