A tool (and pre-commit hook) to automatically add trailing commas to calls and literals.
pip install add-trailing-commaSee pre-commit for instructions
Sample .pre-commit-config.yaml:
-   repo: https://github.com/asottile/add-trailing-comma
    rev: v4.0.0
    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,
 ) x = [
-    1, 2, 3
+    1, 2, 3,
 ] def func(
         arg1,
-        arg2
+        arg2,
 ): async def func(
         arg1,
-        arg2
+        arg2,
 ): from os import (
     path,
-    makedirs
+    makedirs,
 ) class C(
     Base1,
-    Base2
+    Base2,
 ):
     pass with (
         open('f1', 'r') as f1,
-        open('f2', 'w') as f2
+        open('f2', 'w') as f2,
 ):
     pass match x:
     case A(
        1,
-       2
+       2,
     ):
        pass
     case (
        1,
-       2
+       2,
     ):
        pass
     case [
        1,
-       2
+       2,
     ]:
        pass
     case {
        'x': 1,
-       'y': 2
+       'y': 2,
     }:
        pass def f[
-    T
+    T,
 ](x: T) -> T:
     return x class A[
-    K
+    K,
 ]:
     def __init__(self, x: T) -> None:
         self.x = x type ListOrSet[
-     T
+     T,
] = list[T] | set[T] 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]