blank-line-before-unrelated-block

Allow block headers to stay attached to related setup statements.

Message

Illegal cuddle before block header. The preceding setup must directly feed the upcoming block.

Settings

SettingDescriptionTypeDefault
allow_setup_before_compact_guard_ladder Allow setup statements before compact guard-ladder branches. bool True
body_usage_lookahead Number of following statements inspected for setup-value usage. int 4
setup_run_lookback Number of preceding setup statements that may stay attached to a block. int 3

Valid examples

def f(value: int) -> int:
    prepared = value + 1
    if prepared > 0:
        return prepared

    return 0
Show more
def f(value: int) -> int:
    prepared = value + 1
    if value > 0:
        result = prepared
        return result

    return 0
def f(value: int) -> int:
    log_start()
    prepared = value + 1
    if prepared > 0:
        return prepared

    return 0
def f(value: int) -> int:
    prepared = value + 1
    not_used = value + 2

    if value > 0:
        return value

    return prepared
def f(value: int) -> int:
    """Compute value."""
    if value > 0:
        return value

    return 0
def f(base: dict[str, object], override: dict[str, object]) -> dict[str, object]:
    merged = dict(base)
    for key, value in override.items():
        if key not in merged:
            merged[key] = value
            continue
        merged[key] = value

    return merged
def f(directory: str) -> None:
    queue = Queue()
    queue.put(directory)
    while not queue.empty():
        item = queue.get()
        visit(item)
def f(shell_name: str) -> list[str]:
    interactive = shell_name == "zsh"
    if shell_name == "zsh":
        return ["-lic"]
    if interactive:
        return ["-ic"]
    return ["-lc"]
def f(candidate: object, parser_input: str, style: object) -> object:
    display_value = parser_input or str(candidate)
    if supports_live_interaction():
        highlight(display_value, style)
    else:
        summarize(display_value, style)
    return candidate
def f(override_name: str | None) -> str:
    display_name = "guest"
    if override_name is not None:
        display_name = override_name
    return display_name
def f(default_value: object) -> dict[str, object]:
    prompt_kwargs: dict[str, object] = {}
    if default_value:
        prompt_kwargs["placeholder"] = str(default_value)
    return prompt_kwargs
def f() -> None:
    session = build_session()
    session.refresh()
    if session.is_stale():
        reset_session(session)
        return
    cleanup()

Invalid examples

def f(value: int) -> int:
    prepared = value + 1
    if value > 0:
        return value

    return 0

Suggested fix

def f(value: int) -> int:
    prepared = value + 1

    if value > 0:
        return value

    return 0
Show more
def f(value: int) -> int:
    prepared = value + 1
    log(prepared)
    if prepared > 0:
        return prepared

    return 0

Suggested fix

def f(value: int) -> int:
    prepared = value + 1
    log(prepared)

    if prepared > 0:
        return prepared

    return 0
def f(value: int) -> int:
    prepared = value + 1
    trailing = value + 2
    if prepared > 0:
        return prepared

    return 0

Suggested fix

def f(value: int) -> int:
    prepared = value + 1
    trailing = value + 2

    if prepared > 0:
        return prepared

    return 0
def f(base: dict[str, object], override: dict[str, object]) -> dict[str, object]:
    merged = dict(base)
    for key, value in override.items():
        log_key(key)
        audit(value)
        publish(key, value)
        notify_team(key)
        merged[key] = value

    return merged

Suggested fix

def f(base: dict[str, object], override: dict[str, object]) -> dict[str, object]:
    merged = dict(base)

    for key, value in override.items():
        log_key(key)
        audit(value)
        publish(key, value)
        notify_team(key)
        merged[key] = value

    return merged