A tool (and pre-commit hook) to automatically add trailing commas to calls and literals.
pip install add-trailing-comma
See pre-commit for instructions
Sample .pre-commit-config.yaml:
- repo: https://github.com/asottile/add-trailing-comma
rev: v2.0.1
hooks:
- id: add-trailing-comma# Sample of *ideal* syntax
function_call(
argument,
5 ** 5,
kwarg=foo,
)- the initial paren is at the end of the line
- each argument is indented one level further than the function name
- the last parameter (unless the call contains an unpacking
(
*args/**kwargs)) has a trailing comma
This has the following benefits:
-
arbitrary indentation is avoided:
# I hear you like 15 space indents # oh your function name changed? guess you get to reindent :) very_long_call(arg, arg, arg)
-
adding / removing a parameter preserves
git blameand is a minimal diff:# with no trailing commas x( - arg + arg, + arg2 )
# with trailing commas x( arg, + arg2, )
x(
arg,
- arg
+ arg,
)If --py35-plus is passed, add-trailing-comma will also perform the
following change:
x(
- *args
+ *args,
)
y(
- **kwargs
+ **kwargs,
)Note that this would cause a SyntaxError in earlier python versions.
x = [
- 1, 2, 3
+ 1, 2, 3,
] def func(
arg1,
- arg2
+ arg2,
):If --py36-plus is passed, add-trailing-comma will also perform the
following change:
def f(
- *args
+ *args,
): pass
def g(
- **kwargs
+ **kwargs,
): pass
def h(
- *, kw=1
+ *, kw=1,
): passNote that this would cause a SyntaxError in earlier python versions.
from os import (
path,
- makedirs
+ makedirs,
) class C(
Base1,
- Base2
+ Base2,
):
pass x(
arg1,
- arg2)
+ arg2,
+)-function_name(arg1,
- arg2)
+function_name(
+ arg1,
+ arg2,
+) x = [
1,
2,
3,
- ]
+]yes yes, I realize the tool is called add-trailing-comma 😆
-[1, 2, 3,]
-[1, 2, 3, ]
+[1, 2, 3]
+[1, 2, 3]