Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature request: Add support for python Black #403

Closed
iemejia opened this issue May 23, 2019 · 5 comments
Closed

Feature request: Add support for python Black #403

iemejia opened this issue May 23, 2019 · 5 comments

Comments

@iemejia
Copy link
Contributor

iemejia commented May 23, 2019

Python's Black has become the de-facto code auto-formatter for python. It would be great if we could call it with spotless.

@nedtwigg
Copy link
Member

The key thing needed to integrate with Spotless is a Function<String, String>. So if you can either

A) Write some python code that configures the formatter, then has a function that consumes a string and returns a string
B) Find some commandline flags which accomplishes this (e.g. read on stdin and write to stdout, or possibly read some tempfile and write back out to it)

then that's the first step. The second step is integrating python and JVM, for which I believe there are many alternatives.

@rpdelaney
Copy link

rpdelaney commented Jun 24, 2020

Find some commandline flags which accomplishes this (e.g. read on stdin and write to stdout, or possibly read some tempfile and write back out to it)

black --code "$text"
demo
$ cat source.py
from seven_dwwarfs import Grumpy, Happy, Sleepy, Bashful, Sneezy, Dopey, Doc
x = {  'a':37,'b':42,

'c':927}

x = 123456789.123456789E123456789

if very_long_variable_name is not None and \
 very_long_variable_name.field > 0 or \
 very_long_variable_name.is_debug:
 z = 'hello '+'world'
else:
 world = 'world'
 a = 'hello {}'.format(world)
 f = rf'hello {world}'
if (this
and that): y = 'hello ''world'#FIXME: https://github.com/python/black/issues/26
class Foo  (     object  ):
  def f    (self   ):
    return       37*-2
  def g(self, x,y=42):
      return y
def f  (   a: List[ int ]) :
  return      37-a[42-u :  y**3]
def very_important_function(template: str,*variables,file: os.PathLike,debug:bool=False,):
    """Applies `variables` to the `template` and writes to `file`."""
    with open(file, "w") as f:
     ...
# fmt: off
custom_formatting = [
    0,  1,  2,
    3,  4,  5,
    6,  7,  8,
]
# fmt: on
regular_formatting = [
    0,  1,  2,
    3,  4,  5,
    6,  7,  8,
]
$ black --code "$(<source.py)"
from seven_dwwarfs import Grumpy, Happy, Sleepy, Bashful, Sneezy, Dopey, Doc

x = {"a": 37, "b": 42, "c": 927}

x = 123456789.123456789e123456789

if (
    very_long_variable_name is not None
    and very_long_variable_name.field > 0
    or very_long_variable_name.is_debug
):
    z = "hello " + "world"
else:
    world = "world"
    a = "hello {}".format(world)
    f = rf"hello {world}"
if this and that:
    y = "hello " "world"  # FIXME: https://github.com/python/black/issues/26


class Foo(object):
    def f(self):
        return 37 * -2

    def g(self, x, y=42):
        return y


def f(a: List[int]):
    return 37 - a[42 - u : y ** 3]


def very_important_function(
    template: str, *variables, file: os.PathLike, debug: bool = False,
):
    """Applies `variables` to the `template` and writes to `file`."""
    with open(file, "w") as f:
        ...


# fmt: off
custom_formatting = [
    0,  1,  2,
    3,  4,  5,
    6,  7,  8,
]
# fmt: on
regular_formatting = [
    0,
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
]

$

@nedtwigg
Copy link
Member

Implemented in #672, shipped in plugin-gradle 5.2.0 (tweet), PR for maven is welcome. The setup experience could be better, we'll track that at #674.

@iemejia
Copy link
Contributor Author

iemejia commented Aug 25, 2020

Great ! 👏 thanks!

@nedtwigg
Copy link
Member

@iemejia, @rpdelaney, do you have any feedback on what info would be helpful for the black docs: psf/black#1622

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants