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

E122: No valid indent for long function call nested in f-string? #1242

Open
anntzer opened this issue Apr 25, 2024 · 2 comments
Open

E122: No valid indent for long function call nested in f-string? #1242

anntzer opened this issue Apr 25, 2024 · 2 comments

Comments

@anntzer
Copy link
Contributor

anntzer commented Apr 25, 2024

For the following example

class T:
    def m1(self):
        print(f"""
preamble
{some_long_func(
    some_long_arg, other_long_arg, more_long_arg)}
postamble
""")

    def m2(self):
        print(f"""
preamble
{some_long_func(
     some_long_arg, other_long_arg, more_long_arg)}
postamble
""")

there appears to be no indentation of the "long args line" that makes pycodestyle not emit a E122 ("continuation line missing indentation or outdented") for that line. (If m1 and m2 are toplevel functions and not methods, then the second form makes pycodestyle happy.)

@asottile
Copy link
Member

this passes, though I'm not sure it's right -- I'm inclined to just say "you're doing too much in an f-string and the linter is rightfully punishing you" (despite the probable bug) -- do the assignments to some variables outside the fstring and the code will be much easier to read and maintain anyway:

class T:
    def m1(self):
        print(f"""
preamble
{some_long_func(
            some_long_arg, other_long_arg, more_long_arg)}
postamble
""")

    def m2(self):
        print(f"""
preamble
{some_long_func(
            some_long_arg, other_long_arg, more_long_arg)}
postamble
""")

@anntzer
Copy link
Contributor Author

anntzer commented Apr 25, 2024

Ah, I didn't think of trying to indent all the way up to the indent defined by outside the f-string.
I would still say it is a bug (I think the reasonable indent would be 4 (or 5) spaces from the left, i.e. including the opening brace or not, but I leave it up to you as to whether this is something you want to fix or just to close.
Alternatively, another solution would be to just accept all indents inside a multiline f-string, because I don't think there's actually any clear style guidelines about that (well, possibly except "don't have substitutions so long that they must be split over multiple lines"... which could possibly be its own style check).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants