Skip to content

Black not respecting fluent interfaces with parenthesis #2808

@risoms

Description

@risoms

Describe the bug

Black doesn't seem to respect fluent interfaces with parenthesis if the object isn't callable

To Reproduce
For example, when using a pytest mocker.

import pytest
import Session
def test_session(mocker):
    session = mocker.patch("Session")
    a = (
        session.query
            .return_value
            .filter
            .return_value
            .filter
            .return_value
            .filter
            .return_value
            .distinct
            .return_value
            .order_by
            .return_value
            .all
            .return_value
    )

This is converted to:

import pytest
import Session
def test_session(mocker):
    session = mocker.patch("Session")
    a = session.query.return_value.filter.return_value.filter.return_value.filter.return_value.distinct.return_value.order_by.return_value.all.return_value

Which causes a line-length error.

Expected behavior

Handling similar to this

import pytest
import Session
def test_session(mocker):
    session = mocker.patch("Session")
    a = (
        session.query
            .return_value
            .filter
            .return_value
            .filter
            .return_value
            .filter
            .return_value
            .distinct
            .return_value
            .order_by
            .return_value
            .all
            .return_value
    )

Environment

  • Black's version: main
  • OS and Python version: MacOS 2.0.1 (21A559)/Python 3.7.6

Additional context

Metadata

Metadata

Assignees

No one assigned

    Labels

    F: linebreakHow should we split up lines?F: linetoolongBlack makes our lines too longR: duplicateThis issue or pull request already existsT: bugSomething isn't working
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions