ECHO001 - use keyword arguments for multi-arg calls when keywords are possible


why:

  multi-arg positional calls are hard to read and reorder safely.
  keyword args make call sites explicit and ready to sort later.
  the rule only fires when those arguments can actually be passed
  as keywords.


bad:

  create_user("ada", "lovelace", True)
  client.request("GET", url)
  open("notes.txt", "r")
  round(1.234, 2)


good:

  create_user(first="ada", last="lovelace", active=True)
  client.request(method="GET", url=url)
  open(file="notes.txt", mode="r")
  round(number=1.234, ndigits=2)


skipped when keywords are not possible:

  positional-only parameters
    isinstance(1, int)
    def f(a, b, /): ...
    data.get("key", None)

  *args parameters
    print(1, 2)
    def f(*args): ...
    qs.select_related("a", "b")


unknown callees are treated as keyword-capable.


configure in pyproject.toml:

  [tool.echo-python.echo001]
  ignore = ["pytest.mark.parametrize", "pytest.param"]
