Skip to main content

Automatically add trailing commas to calls and literals

Project description

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: v1.4.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]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

add_trailing_comma-1.4.1.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

add_trailing_comma-1.4.1-py2.py3-none-any.whl (8.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file add_trailing_comma-1.4.1.tar.gz.

File metadata

  • Download URL: add_trailing_comma-1.4.1.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.8

File hashes

Hashes for add_trailing_comma-1.4.1.tar.gz
Algorithm Hash digest
SHA256 0a704fc640e075adca6799612602ea2925380dc21c65c0dfa0f68c7715e1482f
MD5 d0a460d2242294158d71e9242e06453e
BLAKE2b-256 74ae9194ef7bbc95dcbfa7b52db4732e56625c1a0c1645f8d88ce55c3faace46

See more details on using hashes here.

File details

Details for the file add_trailing_comma-1.4.1-py2.py3-none-any.whl.

File metadata

  • Download URL: add_trailing_comma-1.4.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.8

File hashes

Hashes for add_trailing_comma-1.4.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a4ec4a864de447cb021ae7c2a45a7a33510e2a0c0c5b703001017855bc35b332
MD5 790e0fac3961d6946467d336806efdd8
BLAKE2b-256 fe77f55d8acce636eca3e0881d99e32bbea280f3a433325559f42fb2c10b2796

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page