add-trailing-comma

by asottile

A tool (and pre-commit hook) to automatically add trailing commas to calls and literals.

139 Stars 9 Forks Last release: Not found MIT License 186 Commits 28 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Build Status Azure DevOps coverage

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: v2.0.1
    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 blame
    and 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 function calls with unpackings

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.

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,
 ):

trailing commas for function definitions with unpacking arguments

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, ): pass

Note that this would cause a

SyntaxError
in earlier python versions.

trailing commas for
from
imports

 from os import (
     path,
-    makedirs
+    makedirs,
 )

trailing comma for class definitions

 class C(
     Base1,
-    Base2
+    Base2,
 ):
     pass

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]

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.