add-trailing-comma
A tool (and pre-commit hook) to automatically add trailing commas to calls and literals.
Installation
pip install add-trailing-comma
As a pre-commit hook
See 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
multi-line method invocation style -- why?
# 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, )
Implemented features
trailing commas for function calls
x(
arg,
- arg
+ arg,
)
trailing commas for tuple / list / dict / set literals
x = [
- 1, 2, 3
+ 1, 2, 3,
]
trailing commas for function definitions
def func(
arg1,
- arg2
+ arg2,
):
async def func(
arg1,
- arg2
+ arg2,
):
trailing commas for from imports
from os import (
path,
- makedirs
+ makedirs,
)
trailing comma for class definitions
class C(
Base1,
- Base2
+ Base2,
):
pass
trailing comma for with statement
with (
open('f1', 'r') as f1,
- open('f2', 'w') as f2
+ open('f2', 'w') as f2,
):
pass
trailing comma for match statement
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
trailling comma for PEP-695 type aliases
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]
unhug trailing paren
x(
arg1,
- arg2)
+ arg2,
+)
unhug leading paren
-function_name(arg1,
- arg2)
+function_name(
+ arg1,
+ arg2,
+)
match closing brace indentation
x = [
1,
2,
3,
- ]
+]
remove unnecessary commas
yes yes, I realize the tool is called add-trailing-comma :laughing:
-[1, 2, 3,]
-[1, 2, 3, ]
+[1, 2, 3]
+[1, 2, 3]
Metadata
Release files for add-trailing-comma 4.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| add_trailing_comma-4.0.0.tar.gz | 11.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| add_trailing_comma-4.0.0-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 26.3 kB
Release files / add_trailing_comma-4.0.0.tar.gz
| Download URL | add_trailing_comma-4.0.0.tar.gz |
|---|---|
| Size | 11.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
661d3c77fd028882501627eba167b6d5c68b6725f1d8447824016d74e88c3a7d
|
|
BLAKE2b-256 checksum How to use checksums |
6fd606749393986d109cdd62407b3a84c9058cb62145ca3b4346612e3e6ef9aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|
Release files / add_trailing_comma-4.0.0-py2.py3-none-any.whl
| Download URL | add_trailing_comma-4.0.0-py2.py3-none-any.whl |
|---|---|
| Size | 15.2 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
a88c640e9023ad605dbf27270e79a440bef1c88c5dd27daab799e00f260f9c84
|
|
BLAKE2b-256 checksum How to use checksums |
4d8af611932036f135be17de9380ee7ab6f6469745a1b59833261a4c572bc95a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|