Skip to content
Sarj Code Standards

stepdown

A private helper used by one caller should be defined below that caller.

Why

Caller-first ordering keeps the module's public flow visible before its implementation details.

Fix

Move the private helper below its sole caller without changing either body.

Examples

Before — flagged Template syntax proves deferred module annotations
app/service.py
from string.templatelib import Template
def _parse(value: str) -> str:
return value.strip()
def render(value: str = "sample") -> Template:
return t"value: {_parse(value)}"
After — preferred Already ordered: Template syntax proves deferred module annotations
app/service.py
from string.templatelib import Template
def render(value: str = "sample") -> Template:
return t"value: {_parse(value)}"
def _parse(value: str) -> str:
return value.strip()
Autofix output
app/service.py
from string.templatelib import Template
def render(value: str = "sample") -> Template:
return t"value: {_parse(value)}"
def _parse(value: str) -> str:
return value.strip()
Before — flagged Signed numeric and deeply immutable tuple defaults
app/service.py
def _pack(value: "tuple" = (-1, (None, -0.0, +1j))) -> "tuple":
return value
def render() -> "tuple":
return _pack()
After — preferred Already ordered: Signed numeric and deeply immutable tuple defaults
app/service.py
def render() -> "tuple":
return _pack()
def _pack(value: "tuple" = (-1, (None, -0.0, +1j))) -> "tuple":
return value
Autofix output
app/service.py
def render() -> "tuple":
return _pack()
def _pack(value: "tuple" = (-1, (None, -0.0, +1j))) -> "tuple":
return value
Before — flagged Literal headers preserve annotations and defaults
app/service.py
def _parse(value: "str" = "sample") -> "str":
return value.strip()
def render(value: "str" = "sample") -> "str":
return _parse(value)
After — preferred Already ordered: Literal headers preserve annotations and defaults
app/service.py
def render(value: "str" = "sample") -> "str":
return _parse(value)
def _parse(value: "str" = "sample") -> "str":
return value.strip()
Autofix output
app/service.py
def render(value: "str" = "sample") -> "str":
return _parse(value)
def _parse(value: "str" = "sample") -> "str":
return value.strip()
Before — flagged Private helper appears before its sole caller
service.py
def _parse(payload: dict) -> dict:
return payload
def handle(payload: dict) -> dict:
return _parse(payload)
After — preferred Private helper appears after its sole caller
service.py
def handle(payload: dict) -> dict:
return _parse(payload)
def _parse(payload: dict) -> dict:
return payload
Before — flagged Postponed module annotations retain their signatures during a safe move
app/service.py
from __future__ import annotations
def _parse(value: str) -> bool:
return bool(value)
def render(value: str) -> bool:
return _parse(value)
After — preferred Postponed module helper already follows its sole caller
app/service.py
from __future__ import annotations
def render(value: str) -> bool:
return _parse(value)
def _parse(value: str) -> bool:
return bool(value)
Autofix output
app/service.py
from __future__ import annotations
def render(value: str) -> bool:
return _parse(value)
def _parse(value: str) -> bool:
return bool(value)