]> git.madduck.net Git - etc/vim.git/log

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

etc/vim.git
4 years agoTreat all trailing commas as pre-existing, as they effectively are
Łukasz Langa [Wed, 26 Aug 2020 10:22:56 +0000 (12:22 +0200)]
Treat all trailing commas as pre-existing, as they effectively are

On a second pass of Black on the same file, inserted trailing commas are now
pre-existing.  Doesn't make sense to differentiate between the passes then.

4 years agov20.8b0
Łukasz Langa [Wed, 26 Aug 2020 14:00:55 +0000 (16:00 +0200)]
v20.8b0

4 years agoPrimer update config - enable pytest (#1626)
Cooper Lees [Wed, 26 Aug 2020 04:55:05 +0000 (21:55 -0700)]
Primer update config - enable pytest (#1626)

Reformatted projects I have acceess to:
- aioexabgp
- bandersnatch
- flake8-bugbear

```
-- primer results 📊 --

13 / 16 succeeded (81.25%) ✅
0 / 16 FAILED (0.0%) 💩
 - 3 projects disabled by config
 - 0 projects skipped due to Python version
 - 0 skipped due to long checkout
```

* Also re-enable pytest

```
-- primer results 📊 --

14 / 16 succeeded (87.5%) ✅
0 / 16 FAILED (0.0%) 💩
 - 2 projects disabled by config
 - 0 projects skipped due to Python version
 - 0 skipped due to long checkout

real 2m26.207s
user 17m55.404s
sys 0m43.061s
```

4 years agoAdd links regarding Spotless integration for gradle/maven users (#1622)
Ned Twigg [Wed, 26 Aug 2020 01:54:05 +0000 (18:54 -0700)]
Add links regarding Spotless integration for gradle/maven users (#1622)

Co-authored-by: Łukasz Langa <lukasz@langa.pl>
4 years agoImprove docstring re-indentation handling
Łukasz Langa [Tue, 25 Aug 2020 20:26:13 +0000 (22:26 +0200)]
Improve docstring re-indentation handling

This addresses a few crashers, namely:

* producing non-equivalent code due to mangling escaped newlines,

* invalid hugging quote characters in the docstring body to the docstring outer
  triple quotes (causing a quadruple quote which is a syntax error),

* lack of handling for docstrings that start on the same line as the `def`, and

* invalid stripping of outer triple quotes when the docstring contained
  a string prefix.

As a bonus, tests now also run when string normalization is disabled.

4 years agoAddress pre-existing trailing commas when not in the rightmost bracket pair
Łukasz Langa [Mon, 24 Aug 2020 16:29:59 +0000 (18:29 +0200)]
Address pre-existing trailing commas when not in the rightmost bracket pair

This required some hackery.  Long story short, we need to reuse the ability to
omit rightmost bracket pairs (which glues them together and splits on something
else instead), for use with pre-existing trailing commas.

This form of user-controlled formatting is brittle so we have to be careful not
to cause a scenario where Black first formats code without trailing commas in
one way, and then looks at the same file with pre-existing trailing commas
(that it itself put on the previous run) and decides to format the code again.

One particular ugly edge case here is handling of optional parentheses.  In
particular, the long-standing `line_length=1` hack got in the way of
pre-existing trailing commas and had to be removed.  Instead, a more
intelligent but costly solution was put in place: a "second opinion" if the
formatting that omits optional parentheses ended up causing lines to be too
long.  Again, for efficiency purposes, Black reuses Leaf objects from blib2to3
and modifies them in place, which was invalid for having two separate
formattings.  Line cloning was used to mitigate this.

Fixes #1619

4 years agoRun trailing comma tests with TargetVersion.PY38
Łukasz Langa [Mon, 24 Aug 2020 19:33:51 +0000 (21:33 +0200)]
Run trailing comma tests with TargetVersion.PY38

4 years agoAdd more trailing comma test variants
Łukasz Langa [Mon, 24 Aug 2020 16:48:11 +0000 (18:48 +0200)]
Add more trailing comma test variants

4 years agoMake doc generation a little smarter, update doc sections
Łukasz Langa [Mon, 24 Aug 2020 12:33:16 +0000 (14:33 +0200)]
Make doc generation a little smarter, update doc sections

4 years agoUpdate the changelog
Łukasz Langa [Mon, 24 Aug 2020 12:11:18 +0000 (14:11 +0200)]
Update the changelog

4 years agoProperty-based fuzz test
Zac-HD [Fri, 21 Aug 2020 10:58:58 +0000 (20:58 +1000)]
Property-based fuzz test

4 years agoFix dealing with generated files in docs
Łukasz Langa [Fri, 21 Aug 2020 13:55:03 +0000 (15:55 +0200)]
Fix dealing with generated files in docs

4 years agoUse properly renamed function name in docs
Łukasz Langa [Fri, 21 Aug 2020 13:46:00 +0000 (15:46 +0200)]
Use properly renamed function name in docs

4 years agoRequire Sphinx 3
Łukasz Langa [Fri, 21 Aug 2020 13:42:58 +0000 (15:42 +0200)]
Require Sphinx 3

4 years agoMark Primer projects that will change formatting
Łukasz Langa [Fri, 21 Aug 2020 13:27:08 +0000 (15:27 +0200)]
Mark Primer projects that will change formatting

4 years agoOpen file explicitly with UTF-8 so it works on Windows, too
Łukasz Langa [Thu, 20 Aug 2020 17:21:40 +0000 (19:21 +0200)]
Open file explicitly with UTF-8 so it works on Windows, too

4 years agoReformat docs/conf.py according to the new style
Łukasz Langa [Thu, 20 Aug 2020 17:04:56 +0000 (19:04 +0200)]
Reformat docs/conf.py according to the new style

4 years agoRe-implement magic trailing comma handling:
Łukasz Langa [Mon, 28 Oct 2019 23:50:42 +0000 (00:50 +0100)]
Re-implement magic trailing comma handling:

- when a trailing comma is specified in any bracket pair, that signals to Black
  that this bracket pair needs to be always exploded, e.g. presented as "one
  item per line";

- this causes some changes to previously formatted code that erroneously left
  trailing commas embedded into single-line expressions;

- internally, Black needs to be able to identify trailing commas that it put
  itself compared to pre-existing trailing commas. We do this by using/abusing
  lib2to3's `was_checked` attribute.  It's True for internally generated
  trailing commas and False for pre-existing ones (in fact, for all
  pre-existing leaves and nodes).

Fixes #1288

4 years agoReset trailing comma handling
Łukasz Langa [Mon, 28 Oct 2019 23:34:46 +0000 (00:34 +0100)]
Reset trailing comma handling

4 years agoUpgrade docs to Sphinx 3+ and add doc build test (#1613)
Richard Si [Thu, 20 Aug 2020 22:06:41 +0000 (18:06 -0400)]
Upgrade docs to Sphinx 3+ and add doc build test (#1613)

* Upgrade docs to Sphinx 3+
* Fix all the warnings...

- Fixed bad docstrings
- Fixed bad fenced code blocks in documentation
- Blocklisted some sections from being generated from the README
- Added missing documentation to index.rst
- Fixed an invalid autofunction directive in reference/reference_functions.rst
- Pin another documentation dependency

* Add documentation build test

4 years agoDisable string splitting/merging by default (#1609)
Jelle Zijlstra [Thu, 20 Aug 2020 12:23:28 +0000 (05:23 -0700)]
Disable string splitting/merging by default (#1609)

* put experimental string stuff behind a flag
* update tests
* don't need an output section if it's the same as the input
* Primer: Expect no formatting changes in attrs, hypothesis and poetry with --experimental-string-processing off

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
4 years agoUpdate all dependencies to latest versions
Łukasz Langa [Tue, 18 Aug 2020 10:31:15 +0000 (12:31 +0200)]
Update all dependencies to latest versions

4 years agoFix inline code style in README (#1608)
Daanyaal Syed [Mon, 17 Aug 2020 18:55:38 +0000 (14:55 -0400)]
Fix inline code style in README (#1608)

Refer to `pyproject.toml` in HTML section of README with HTML code tags

4 years agofix unary op detection (#1600)
David Szotten [Fri, 14 Aug 2020 16:17:56 +0000 (17:17 +0100)]
fix unary op detection (#1600)

4 years agodon't strip brackets before lsqb (#1575) (#1590)
David Szotten [Fri, 14 Aug 2020 02:20:46 +0000 (03:20 +0100)]
don't strip brackets before lsqb (#1575) (#1590)

if the string contains a PERCENT, it's not safe to remove brackets that
follow and operator with the same or higher precedence than PERCENT

4 years agofix some docstring crashes (#1593)
Jelle Zijlstra [Thu, 13 Aug 2020 23:40:45 +0000 (16:40 -0700)]
fix some docstring crashes (#1593)

Allow removing some trailing whitespace

4 years agoin verbose mode, print stack trace (#1594)
Jelle Zijlstra [Thu, 13 Aug 2020 18:14:34 +0000 (11:14 -0700)]
in verbose mode, print stack trace (#1594)

Make Black failures easier to debug

4 years agoMake --exclude only apply to recursively found files (#1591)
Richard Si [Thu, 13 Aug 2020 03:07:19 +0000 (23:07 -0400)]
Make --exclude only apply to recursively found files (#1591)

Ever since --force-exclude was added, --exclude started to touch files
that were given to Black through the CLI too. This is not documented
behaviour and neither expected as --exclude and --force-exclude now
behave the same!

Before this commit, get_sources() when encountering a file that was passed
explicitly through the CLI would pass a single Path object list to
gen_python_files(). This causes bad behaviour since that function
doesn't treat the exclude and force_exclude regexes differently. Which
is fine for recursively found files, but *not* for files given through
the CLI.

Now when get_sources() iterates through srcs and encounters
a file, it checks if the force_exclude regex matches, if not, then the
file will be added to the computed sources set.

A new function had to be created since before you can do regex matching,
the path must be normalized. The full process of normalizing the path is
somewhat long as there is special error handling. I didn't want to
duplicate this logic in get_sources() and gen_python_files() so that's
why there is a new helper function.

4 years agoAdd the direnv base directory to the default excludes (#1564)
Chris Rose [Thu, 13 Aug 2020 02:28:01 +0000 (19:28 -0700)]
Add the direnv base directory to the default excludes (#1564)

Co-authored-by: Chris Rose <offline@offby1.net>
4 years agoRemove slow assertion (#1592)
Jelle Zijlstra [Thu, 13 Aug 2020 02:12:21 +0000 (19:12 -0700)]
Remove slow assertion (#1592)

Partial fix for #1581

This assertion produces behavior quadratic in the number of leaves in a line, which is making Black extremely slow on files with very long expressions. On my benchmark file this change makes Black 10x faster.

4 years agofix spelling (#1567)
Kaligule [Sat, 1 Aug 2020 21:21:55 +0000 (23:21 +0200)]
fix spelling (#1567)

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
4 years agoUpdate to accomodate isort 5 release changes. (#1559)
Maximilian Cosmo Sitter [Wed, 22 Jul 2020 00:29:38 +0000 (02:29 +0200)]
Update to accomodate isort 5 release changes. (#1559)

Isort 5 introduced profiles and ensure_newline_before_comments options. Either needs to be added to work correctly with black.

Co-authored-by: Richard Si <63936253+ichard26@users.noreply.github.com>
4 years agodocs: Improve pre-commit use (#1551)
Vinicius Gubiani Ferreira [Thu, 16 Jul 2020 04:51:39 +0000 (01:51 -0300)]
docs: Improve pre-commit use (#1551)

Stable tag wasn't available and crashed when attempting to set initial
pre-commit. Also the python version needs to be installed so it would
be better to use the generic "python3" command.

4 years agopre-commit: show diff on failure on CI (#1552)
Hugo van Kemenade [Wed, 15 Jul 2020 21:53:48 +0000 (00:53 +0300)]
pre-commit: show diff on failure on CI (#1552)

* pre-commit: --show-diff-on-failure

* pre-commit: --show-diff-on-failure

4 years agoUpdate curl command to use stable branch (#1543)
Steven Maude [Wed, 15 Jul 2020 18:36:14 +0000 (19:36 +0100)]
Update curl command to use stable branch (#1543)

4 years agoEnsure path for finding root is absolute (#1550)
dhaug-op [Wed, 15 Jul 2020 15:06:30 +0000 (17:06 +0200)]
Ensure path for finding root is absolute (#1550)

As Path.resolve() is buggy on windows (see https://bugs.python.org/issue38671)
an absolute path is ensured by prepending the Path.cwd()

4 years agoSpelling fix in CONTRIBUTING.md (#1547)
jtpavlock [Mon, 13 Jul 2020 22:27:05 +0000 (15:27 -0700)]
Spelling fix in CONTRIBUTING.md (#1547)

4 years agoISSUE 1533: Fix --config argument description (#1534)
Olexiy [Wed, 8 Jul 2020 15:51:18 +0000 (18:51 +0300)]
ISSUE 1533: Fix --config argument description (#1534)

Change --config argument description to "Read configuration from FILE."
The "--config FILE                   Read configuration from FILE path"

4 years agoadd Quora to orgs that use Black (#1532)
Jelle Zijlstra [Mon, 6 Jul 2020 19:45:13 +0000 (12:45 -0700)]
add Quora to orgs that use Black (#1532)

4 years agoMozilla uses black too (#1531)
Sylvestre Ledru [Mon, 6 Jul 2020 14:06:34 +0000 (16:06 +0200)]
Mozilla uses black too (#1531)

4 years agoAdd pip install from GitHub command to README.md (#1529)
Cooper Lees [Wed, 1 Jul 2020 15:15:24 +0000 (08:15 -0700)]
Add pip install from GitHub command to README.md (#1529)

* Add pip install from GitHub command to README.md
* Make it prettier ...

4 years agoFind project root correctly (#1518)
Lihu Ben-Ezri-Ravin [Wed, 24 Jun 2020 09:09:07 +0000 (05:09 -0400)]
Find project root correctly (#1518)

Ensure root dir is a common parent of all inputs
Fixes #1493

4 years agoFix toml hashes and make it clear that only TOML is supported (#1510)
Richard Si [Sat, 20 Jun 2020 05:29:53 +0000 (01:29 -0400)]
Fix toml hashes and make it clear that only TOML is supported (#1510)

* Fix TOML hashes

* Make it clear that only TOML is supported

4 years agoAdd missing contributors to README.md (Thank you everyone!) (#1508)
Richard Si [Thu, 18 Jun 2020 10:54:02 +0000 (06:54 -0400)]
Add missing contributors to README.md (Thank you everyone!) (#1508)

Black wouldn't be where it is without the countless outside contributions.
So thank you y'all and we will share our appreciation by listing your names
(and emails) in the README.md :D

4 years agoFix toml parsing and bump toml from 0.10.0 to 0.10.1 (#1501)
Richard Si [Tue, 16 Jun 2020 18:58:33 +0000 (14:58 -0400)]
Fix toml parsing and bump toml from 0.10.0 to 0.10.1 (#1501)

* Bump toml from 0.10.0 to 0.10.1 to fix a bug

* Add tests for TOML parsing and reading

* Fix configuration bug affecting vim plugin

The vim plugin directly calls parse_pyproject and skips the Click processing
, but parse_pyproject assumed that it would only be used before Click processing
and therefore made the config values click friendly. This moves the "make the values
click friendly processing" into read_pyproject_toml which is only called by a Click
callback.

* Please mypy and flake8

4 years agoFix grammatical typos in black_primer and blackd (#1504)
Bharat Raghunathan [Tue, 16 Jun 2020 18:57:33 +0000 (00:27 +0530)]
Fix grammatical typos in black_primer and blackd (#1504)

4 years agoIssue template: Add Python code formatting (#1485)
Hugo van Kemenade [Mon, 15 Jun 2020 16:15:11 +0000 (19:15 +0300)]
Issue template: Add Python code formatting (#1485)

Makes things a bit more readable

4 years agoFix find_pyproject_toml type hint (#1495)
Ralf Schmitt [Mon, 15 Jun 2020 15:56:16 +0000 (17:56 +0200)]
Fix find_pyproject_toml type hint (#1495)

4 years agoMove vim flag cast to outside of get (#1486)
Keith Smiley [Mon, 15 Jun 2020 15:55:42 +0000 (08:55 -0700)]
Move vim flag cast to outside of get (#1486)

With this config:

```toml
[tool.black]
line-length = 79
```

In neovim, this is loaded as a string which later causes an exception to
be thrown. This makes sure the value is always cast to an int

4 years agoexpression tests: adjust starred expression for Python 3.9 (#1441) (#1477)
Adam Williamson [Wed, 3 Jun 2020 22:15:54 +0000 (15:15 -0700)]
expression tests: adjust starred expression for Python 3.9 (#1441) (#1477)

As discussed in #1441, Python 3.9's new parser will not parse
`(*starred)` even using `compile()` with the `PyCF_ONLY_AST`
flag (as `ast.parse()` does), it raises a `SyntaxError`. This
breaks the four tests that use this file with Python 3.9.
Upstream does not consider this to be a bug - see
https://bugs.python.org/issue40848#msg370643 - so we must
adjust the expression. As suggested by @JelleZijlstra, this just
adds a comma, which makes the new parser happy with it (the old
parser is fine with this form also).

Signed-off-by: Adam Williamson <awilliam@redhat.com>
4 years agoGitHub action (#1421)
Hugo Barrera [Mon, 1 Jun 2020 18:11:49 +0000 (18:11 +0000)]
GitHub action (#1421)

* Implement a re-usable GitHub Action

Implement a GitHub action that can be reused across projects that want
to run black as part of their CI workflows.

* Fix typo in README.md

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
* Use latest Python 3

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
4 years agoConvert (most of the) configuration values from pyproject.toml to strings (#1466)
Richard Si [Mon, 1 Jun 2020 18:00:00 +0000 (14:00 -0400)]
Convert (most of the) configuration values from pyproject.toml to strings (#1466)

* Convert config values to string

We need to convert all configuration values from the pyproject.toml
file because Click already does value processing and conversion and
it only expects the exact Python type or string. Click doesn't like
the integer 1 as a boolean for example. This also means other
unsupported types like datetime.time will be rejected by Click as
a unvalid value instead of throwing an exception.

We only skip converting objects that are an instance of
collections.abc.Iterable because it's almost impossible to get back
the original iterable of a stringified iterable.

* Move where the conversion happens

Instead of converting the values in the merged 'default_map', I should
convert the values that were read from the 'pyproject.toml' file.

* Change collections.abc.Iterable to (list, dict)

I also moved where the conversion happens... again. I am rather indecisive
if you haven't noticed. It should be better as it takes place in the
parse_pyproject_toml logic where configuration modification already takes
place.

Actually when this PR was first created I had the conversion happen in that
return statement, but the target_version check was complaining about it being
a string. So I moved the conversion after that check, but then Click didn't
like the stringifed list, which led me to check whether the value was an
instance of an Iterable before turning it into a string. And... I forgot that
type checking before conversion would allow it to work before the
target_version check anyway.

4 years agoMake 'python -m black' work (#1460)
Richard Si [Wed, 27 May 2020 02:42:07 +0000 (22:42 -0400)]
Make 'python -m black' work (#1460)

4 years agoUpdate CONTRIBUTION.md with pre-commit + black-primer instructions (#1459)
Cooper Lees [Sun, 24 May 2020 19:02:52 +0000 (12:02 -0700)]
Update CONTRIBUTION.md with pre-commit + black-primer instructions (#1459)

* Update CONTRIBUTION with pre-commit + black-primer instructions
- Inform people how to run primer and alter it's config
- Link to main documentation

* Apply suggestions from code review

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
4 years agoRefactor docs / Maintenance of docs (#1456)
Richard Si [Sun, 24 May 2020 16:37:46 +0000 (12:37 -0400)]
Refactor docs / Maintenance of docs (#1456)

* Split code style and components documentation

Splits 'the_black_code_style', 'pragmatism', 'blackd',and 'black_primer'
into their own files. The exception being 'the_black_code_style' and
'pragmatism'. They have been merged into one 'the_black_code_style_and_pragmatism'
file.

These changes are being made because the README is becoming very long. And
a README isn't great if it dissuades its reader because of its length.

* Update the doc generation logic and configuration

With the moving of several sections in the README and the renaming of a
few files, 'conf.py' needs to be able to support custom sections.

This commit introduces DocSection which can be used to specify custom
sections of documentation. The information stored in DocSection will be
used by the process_sections function to read, process, and write the section
to CURRENT_DIR.

A large change has been made to the how the docs are prepared to be built.
Instead of just generating the files needed by reading the README, this
has a full chain of operations so custom sections are supported. First,
it reads the README and spits out a list of DocSection objects representing
the sections to be generated by process_sections. This is done since most
of the docs still live in README. Then along with the defined custom_sections
, the process_sections will be begin to process the DocSection objects.
It reads the information it needs to generate the section. Then fetches
the section's contents, calls processors required by the section to process
the section's contents, and finally writes the section to CURRENT_DIR.

This large change is so processing of the documentation can be done just
for the versions hosted on ReadTheDocs.org. An example processor using this
feature is a 'replace_links' processor. It will replace documentation
links that point to the docs hosted on GitHub with links that point to the
version hosted on ReadTheDocs.org. (I won't be coding that ATM)

This also means that files will be overwritten or created once the docs
have been built. It is annoying, since you have to 'git reset --hard'
and 'git clean -f -d' after each build, but there's nothing better. The old
system had the same side effects, so yeah :(

* Update filenames and delete unnecessary files

Update the filenames since 'the_black_code_style' and 'pragmatism' were
merged and 'contributing' was deleted in favor of 'contributing_to_black'.

All symlinks were deleted since their home (_build/generated) is no longer
used.

* Fix broken links and a few redirections

* Merge master into refactor_docs (manually done)

* Add my and most of @hugovk suggestions

Co-Authored-By: Hugo van Kemenade <hugovk@users.noreply.github.com>
* Add logging and improve configurability

Just some cleaning up up of the DocSection dataclass and added logging
support so you know what's going on.

* Rename a section and please the grammar gods of Black

Thanks @hugovk for the suggestion!

* Fix Markdown comments

* Add myself as an author :P

Seems like the right time.

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
4 years agoScrollable sidebar (#1457)
Richard Si [Sat, 23 May 2020 18:56:50 +0000 (14:56 -0400)]
Scrollable sidebar (#1457)

* Make the sidebar navigation scrollable

This is necessary since we have so many documentation sections that even
on a desktop screen, the navigation can sometimes be clipped. The only
annoyance is that on Firefox, the scrollbar can't be hidden :(

* allow the docs to build

4 years agoCapture CalledProcessError for any postitive returncode (#1450)
Cooper Lees [Fri, 22 May 2020 19:16:31 +0000 (12:16 -0700)]
Capture CalledProcessError for any postitive returncode (#1450)

- Leave logic to still allow for formatting changes to be ignored
- Now just capture the output of any other error that has a > 1 returncode
- Raise on anything else

Test: Add unit test to exercise this new logic

4 years agoAdd Primer badge to README.md (#1454)
Cooper Lees [Fri, 22 May 2020 19:15:41 +0000 (12:15 -0700)]
Add Primer badge to README.md (#1454)

4 years agoMove primer to own workflow (#1451)
Hugo van Kemenade [Fri, 22 May 2020 18:38:37 +0000 (21:38 +0300)]
Move primer to own workflow (#1451)

4 years agoUpdate README.md (#1453)
Gustavo Camargo [Fri, 22 May 2020 18:37:34 +0000 (13:37 -0500)]
Update README.md (#1453)

4 years agoEnable primer on CI Runs + add all README listed black projects into primer.json...
Cooper Lees [Fri, 22 May 2020 04:57:58 +0000 (21:57 -0700)]
Enable primer on CI Runs + add all README listed black projects into primer.json (#1440)

* Add all listed by projects into primer.json + Enable on CI Runs
- Change workers default to 2 as black uses system CPU count
- Increase timeout to 5 mins for subprocess black runs
- Takes about 120s for 13 (3 disabled) projects on my 2018 Macbook Pro
  - I was not removing directories tho ...

Will open an issue to investigate the failing projects and make this run cleaner.
- Once we get more stable we can expect more repos to be black formatted

Run it:
- `black-primer -k -w /tmp/primer_large_test --debug --rebase`
```
[2020-05-20 21:44:01,273] DEBUG: Starting /Users/cooper/venvs/b/bin/black-primer (cli.py:125)
[2020-05-20 21:44:01,273] DEBUG: Using selector: KqueueSelector (selector_events.py:53)
[2020-05-20 21:44:01,274] INFO: 16 projects to run Black over (lib.py:276)
[2020-05-20 21:44:01,274] DEBUG: Using 2 parallel workers to run Black (lib.py:281)
[2020-05-20 21:44:01,274] DEBUG: worker 0 workng on aioexabgp (lib.py:215)
[2020-05-20 21:44:01,276] DEBUG: worker 1 workng on attrs (lib.py:215)
[2020-05-20 21:44:02,443] INFO: Finished aioexabgp (lib.py:249)
[2020-05-20 21:44:02,443] DEBUG: worker 0 workng on bandersnatch (lib.py:215)
[2020-05-20 21:44:04,409] INFO: Finished bandersnatch (lib.py:249)
[2020-05-20 21:44:04,409] DEBUG: worker 0 workng on channels (lib.py:215)
[2020-05-20 21:44:04,702] INFO: Finished attrs (lib.py:249)
[2020-05-20 21:44:04,702] DEBUG: worker 1 workng on django (lib.py:215)
[2020-05-20 21:44:04,702] INFO: Skipping django as it's disabled via config (lib.py:222)
[2020-05-20 21:44:04,702] DEBUG: worker 1 workng on flake8-bugbear (lib.py:215)
[2020-05-20 21:44:05,813] INFO: Finished channels (lib.py:249)
[2020-05-20 21:44:05,813] DEBUG: worker 0 workng on hypothesis (lib.py:215)
[2020-05-20 21:44:06,071] INFO: Finished flake8-bugbear (lib.py:249)
[2020-05-20 21:44:06,071] DEBUG: worker 1 workng on pandas (lib.py:215)
[2020-05-20 21:44:06,071] INFO: Skipping pandas as it's disabled via config (lib.py:222)
[2020-05-20 21:44:06,071] DEBUG: worker 1 workng on poetry (lib.py:215)
[2020-05-20 21:44:16,207] INFO: Finished hypothesis (lib.py:249)
[2020-05-20 21:44:16,207] DEBUG: worker 0 workng on ptr (lib.py:215)
[2020-05-20 21:44:17,077] INFO: Finished poetry (lib.py:249)
[2020-05-20 21:44:17,077] DEBUG: worker 1 workng on pyramid (lib.py:215)
[2020-05-20 21:44:17,460] INFO: Finished ptr (lib.py:249)
[2020-05-20 21:44:17,460] DEBUG: worker 0 workng on pytest (lib.py:215)
[2020-05-20 21:44:17,460] INFO: Skipping pytest as it's disabled via config (lib.py:222)
[2020-05-20 21:44:17,460] DEBUG: worker 0 workng on sqlalchemy (lib.py:215)
[2020-05-20 21:44:33,319] INFO: Finished pyramid (lib.py:249)
[2020-05-20 21:44:33,319] DEBUG: worker 1 workng on tox (lib.py:215)
[2020-05-20 21:44:42,274] INFO: Finished tox (lib.py:249)
[2020-05-20 21:44:42,275] DEBUG: worker 1 workng on virtualenv (lib.py:215)
[2020-05-20 21:44:47,928] INFO: Finished virtualenv (lib.py:249)
[2020-05-20 21:44:47,928] DEBUG: worker 1 workng on warehouse (lib.py:215)
[2020-05-20 21:45:16,784] INFO: Finished warehouse (lib.py:249)
[2020-05-20 21:45:16,784] DEBUG: project_runner 1 exiting (lib.py:213)
[2020-05-20 21:45:45,700] INFO: Finished sqlalchemy (lib.py:249)
[2020-05-20 21:45:45,700] DEBUG: project_runner 0 exiting (lib.py:213)
[2020-05-20 21:45:45,701] INFO: Analyzing results (lib.py:292)
-- primer results 📊 --

13 / 16 succeeded (81.25%) ✅
0 / 16 FAILED (0.0%) 💩
 - 3 projects disabled by config
 - 0 projects skipped due to Python version
 - 0 skipped due to long checkout
```

* Move to partial for rmtree + specify a onerror handler for PermissionError on Windows for git

* Set default coding to utf8 for very important emoji's on Windows

* Set Python encoding to utf-8 for Windows

* Appease the white space gods of Black!

Co-authored-by: Richard Si <63936253+ichard26@users.noreply.github.com>
Co-authored-by: Richard Si <63936253+ichard26@users.noreply.github.com>
4 years agoFix typos (#1442)
Kevin Kirsche [Thu, 21 May 2020 13:44:43 +0000 (09:44 -0400)]
Fix typos (#1442)

4 years agoblack-primer: handle singular and plural in output messages (#1432)
Hugo van Kemenade [Thu, 21 May 2020 04:03:51 +0000 (07:03 +0300)]
black-primer: handle singular and plural in output messages (#1432)

* Handle singular and plural in output messages

4 years agoUpdate README.md (#1439)
Gustavo Camargo [Thu, 21 May 2020 03:50:16 +0000 (22:50 -0500)]
Update README.md (#1439)

4 years agoAdd `black-primer` docs (#1427)
Cooper Lees [Mon, 18 May 2020 14:25:40 +0000 (07:25 -0700)]
Add `black-primer` docs (#1427)

* Add `black-primer` docs

- Document the idea, CLI args, config and a example run for `black-primer` in README.md
- Add to docs/index.rst

* Add @hugovk suggestions - Thanks.

4 years agoUpdate docs about stable tag now being a branch (#1422)
Richard Si [Sun, 17 May 2020 19:19:52 +0000 (15:19 -0400)]
Update docs about stable tag now being a branch (#1422)

* Update docs about stable tag now being a branch

Issue #760 had the `stable` tag changed to a branch since it was causing a few issues. This updates the docs to reflect that change.

* Make the prettier hook pass

* Improve wording

4 years agoAdd black-primer unittests (#1426)
Cooper Lees [Sun, 17 May 2020 19:18:49 +0000 (12:18 -0700)]
Add black-primer unittests (#1426)

* Add black-primer unittests

- Get this tool covered with some decent unittests for all unittests wins
- Have a CLI and lib test class
- Import it from `test_black.py` so we always run tests
- Revert typing asyncio.Queue as Queue[str] so we can work in 3.6
- **mypy**: Until black > 3.6 disallow_any_generics=False for primer code

Test:
- Run tests: `coverage run tests/test_primer.py` or `coverage run -m unittest`
```
(b) cooper-mbp1:black cooper$ coverage report
Name                      Stmts   Miss  Cover
---------------------------------------------
src/black_primer/cli.py      49      8    84%
src/black_primer/lib.py     148     28    81%
tests/test_primer.py        114      1    99%
---------------------------------------------
TOTAL                       311     37    88%
```

* Use ProactorEventLoop for Windows + fix false path for Linux

* Set Windows to use ProactorEventLoop in  to benefit all callers

* sys.platform seems to not having the loop applied - So type ignore and use platform.system() gate

* Have each test loop correctly set to ProactorEventLoop on Windows for < 3.8 too

4 years agoUpdate and fix Flake8 (#1424)
Hugo van Kemenade [Sun, 17 May 2020 14:18:45 +0000 (17:18 +0300)]
Update and fix Flake8 (#1424)

* Update pre-commit

* Fix F541 f-string is missing placeholders

* Fix E741 ambiguous variable name 'l'

* Update actions to v2

4 years agoFix typos (#1423)
Hugo van Kemenade [Sun, 17 May 2020 14:17:31 +0000 (17:17 +0300)]
Fix typos (#1423)

4 years agoAdd primer CI tool 🏴 (#1402)
Cooper Lees [Sun, 17 May 2020 00:36:20 +0000 (17:36 -0700)]
Add primer CI tool 🏴 (#1402)

* Add primer CI tool 💩
- Run in PATH `black` binary on configured projects
- Can set wether we expect changes or not per project
- Can set what python versions are supported for a project
- if `long_checkout` True project will not be ran on CI

Will add to CI after I finish unit tests to avoid silly bugs I'm sure I have 🤪

Tests:
- Manual Run - Will add unit tests if people think it will be useful
- Output:

```shell
(b) cooper-mbp1:black cooper$ time /tmp/b/bin/black-primer -k -w /tmp/cooper_primer_1
[2020-05-10 08:48:25,696] INFO: 4 projects to run black over (lib.py:212)
[2020-05-10 08:48:25,697] INFO: Skipping aioexabgp as it's disabled via config (lib.py:166)
[2020-05-10 08:48:25,699] INFO: Skipping bandersnatch as it's disabled via config (lib.py:166)
[2020-05-10 08:48:28,676] INFO: Analyzing results (lib.py:225)
-- primer results 📊 --

2 / 4 succeeded (50.0%) ✅
0 / 4 FAILED (0.0%) 💩
 - 2 projects Disabled by config
 - 0 projects skipped due to Python Version
 - 0 skipped due to long checkout

real 0m3.304s
user 0m9.529s
sys 0m1.019s
```

- ls of /tmp/cooper_primer_1
```
(b) cooper-mbp1:black cooper$ ls -lh /tmp/cooper_primer_1
total 0
drwxr-xr-x  21 cooper  wheel   672B May 10 08:48 attrs
drwxr-xr-x  14 cooper  wheel   448B May 10 08:48 flake8-bugbear
```

* Address mypy 3.6 type errors
- Don't use asyncio.run() ... go back to the past :P
- Refactor results into a named tuple of two dicts to avoid typing nightmare
- Fix some variable names
- Fix bug with rebase logic in git_checkout_or_rebase

* Prettier the JSON config file for primer

* Delete projects when finished, move dir to be timestamped + shallow copy

* Re-enable disabled projects post @JelleZijlstra's docstring fix

* Workaround for future annotations until someone tells me the correct fix

4 years agoDocument git's ignore-revs-file feature (#1419)
Richard Si [Sat, 16 May 2020 20:22:46 +0000 (16:22 -0400)]
Document git's ignore-revs-file feature (#1419)

* Document git's ignore-revs-file feature

A long-standing counterargument against moving to automated code formatters
like Black is that the migration will clutter up the output of git blame.
This used to be a valid argument, but not anymore. Since git version 2.23,
git natively supports ignoring revisions in blame with the --ignore-rev
and --ignore-revs-file options.

This isn't documented in the Black documentation. It should be as it would
put old projects wanting to migrate to Black at ease since blame won't
be ruined.

* Add links so people can +1 on --ignore-revs-file support

* Fix wording

'Counterargument' was the wrong word since it means an objection to an objection. 'Argument' is the proper word I was looking for.

Co-authored-by: Cooper Lees <me@cooperlees.com>
4 years agoExpand docs about slice formatting (#1418)
Richard Si [Sat, 16 May 2020 09:21:31 +0000 (05:21 -0400)]
Expand docs about slice formatting (#1418)

Black will apply no spaces around ':' operators for 'simple' expresssions
, but will apply extra space around ':' operators for 'complex' expressions.
Black treats anything more than variable names as 'complex', but this isn't
noted in the Black documentation. Which leads to a few issues on the GitHub
issue tracker that all report inconsistent spacing around ':' operators.

4 years agofix crashes on docstring whitespace changes (#1417)
Jelle Zijlstra [Sat, 16 May 2020 03:47:21 +0000 (20:47 -0700)]
fix crashes on docstring whitespace changes (#1417)

Fixes #1415

4 years agoFix Boolean values in pyproject.toml config (#1410)
Paul Meinhardt [Wed, 13 May 2020 19:51:04 +0000 (21:51 +0200)]
Fix Boolean values in pyproject.toml config (#1410)

Boolean values use lowercase identifiers in TOML.
https://github.com/toml-lang/toml#user-content-boolean

4 years agoRemove no longer used appveyor (#1401)
Cooper Lees [Sat, 9 May 2020 19:16:00 +0000 (12:16 -0700)]
Remove no longer used appveyor (#1401)

4 years agoHandle ImportError from multiprocessing module (#1400)
Terrance [Sat, 9 May 2020 16:22:23 +0000 (17:22 +0100)]
Handle ImportError from multiprocessing module (#1400)

Termux's Python environment doesn't provide sem_open, but fails with a
nested `ImportError` on import attempts:

    ImportError: cannot import name 'SemLock' from '_multiprocessing'

This updates the existing handling for AWS Lambda to catch both
`OSError` and `ImportError`.

4 years agoAdd preference of parantheses over backslashes in docs (#1399)
Sanket Dasgupta [Sat, 9 May 2020 13:32:29 +0000 (19:02 +0530)]
Add preference of parantheses over backslashes in docs (#1399)

Closes https://github.com/psf/black/issues/392

Revived from https://github.com/psf/black/pull/558

Relevant to https://github.com/psf/black/issues/664

4 years agoREADME/CHANGES: Fix links (#1397)
Hugo van Kemenade [Fri, 8 May 2020 19:14:27 +0000 (22:14 +0300)]
README/CHANGES: Fix links (#1397)

* Replace relative README links with absolutes, so they work on PyPI

* CHANGES: Fix Spyder web link

4 years agoAdd py.typed file. (#1395)
Nathan Hunt [Fri, 8 May 2020 16:53:07 +0000 (12:53 -0400)]
Add py.typed file. (#1395)

* Add py.typed file

4 years agoRefactor black into packages in src/ dir (#1376)
Cooper Lees [Fri, 8 May 2020 15:50:50 +0000 (08:50 -0700)]
Refactor black into packages in src/ dir (#1376)

- Move black.py to src/black/__init__.py
- Have setuptools_scm make src/_black_version.py and exclude from git
- Move blackd.py to src/blackd/__init__.py
- Move blib2to3/ to src/
- Update `setup.py`
- Update unittests to pass
  - Mostly path fixing + resolving
- Update CI
  - pre-commit config
  - appveyor + travis

Tested on my mac with python 3.7.5 via:
```
python3 -m venv /tmp/tb3
/tmp/tb3/bin/pip install --upgrade setuptools pip coverage pre-commit
/tmp/tb2/bin/pip install ~/repos/black/
cd ~/repos/black/
/tmp/tb2/bin/coverage run tests/test_black.py
/tmp/tb3/bin/pre-commit run -a
/tmp/tb3/bin/black --help
/tmp/tb3/bin/black ~/repos/ptr/ptr.py
```

4 years agoAdding documentation to the README for import errors in vim (#1317)
shaoran [Fri, 8 May 2020 15:42:19 +0000 (17:42 +0200)]
Adding documentation to the README for import errors in vim (#1317)

* Adding documentation to the README for import errors in vim

I had the same issue as psf/black#1148 and have been searching for a
solution to this. I realized that you cannot fix it by change anything
in the code, but by re-compiling the C extensions of regex and
typed-ast. Installing this packages from the tarballs solves the
problem.

* Fixing a bad copy&paste

Co-Authored-By: Hugo van Kemenade <hugovk@users.noreply.github.com>
* chore: changed made by pre-commit

* chore: better way of dealing with non-binary installs

* chore: adding vim cache files to the ignore list

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
4 years agoAdd purcell/reformatter.el as an Emacs integration option (#1330)
Dan Davison [Fri, 8 May 2020 15:31:06 +0000 (11:31 -0400)]
Add purcell/reformatter.el as an Emacs integration option (#1330)

4 years agoclose event loop for all tests (#1394)
Zsolt Dollenstein [Fri, 8 May 2020 15:27:50 +0000 (16:27 +0100)]
close event loop for all tests (#1394)

4 years agoTest on Python 3.9-dev (#1393)
Hugo van Kemenade [Fri, 8 May 2020 15:19:06 +0000 (18:19 +0300)]
Test on Python 3.9-dev (#1393)

* Test on Python 3.9-dev

* Python 3.9 still in alpha, allow to fail

4 years agoFix mono test
Zsolt Dollenstein [Fri, 8 May 2020 15:13:42 +0000 (16:13 +0100)]
Fix mono test

4 years agoImprove error messages from BlackRunner
Zsolt Dollenstein [Fri, 8 May 2020 15:12:52 +0000 (16:12 +0100)]
Improve error messages from BlackRunner

4 years agoUpdate changelog and README (#1392)
Jelle Zijlstra [Fri, 8 May 2020 14:55:57 +0000 (07:55 -0700)]
Update changelog and README (#1392)

* add two CHANGELOG entries

* update README on command-line options

4 years agoRemove deprecated --py36 option (#1236)
Hugo van Kemenade [Fri, 8 May 2020 14:47:54 +0000 (17:47 +0300)]
Remove deprecated  --py36 option (#1236)

4 years agoadd --force-exclude argument (#1032)
Giacomo Tagliabue [Fri, 8 May 2020 14:47:26 +0000 (10:47 -0400)]
add --force-exclude argument (#1032)

Co-authored-by: Peter Yu <2057325+yukw777@users.noreply.github.com>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
4 years agoskip mono test while im working on it
Zsolt Dollenstein [Fri, 8 May 2020 14:36:56 +0000 (15:36 +0100)]
skip mono test while im working on it

4 years agoUpdate CHANGELOG with some PRs merged (#1391)
Cooper Lees [Fri, 8 May 2020 14:29:53 +0000 (07:29 -0700)]
Update CHANGELOG with some PRs merged (#1391)

* Update CHANGELOG with some PRs merged
- Add section for vim plugin
- Add vim plugin now prefering virtualenv
- Add py3 tagged wheels

* packges

* Update CHANGES.md _Black_

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
* Update CHANGES.md Vim

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
4 years agoAdd Black compatible configurations in documentation (#1366 & #1205) (#1371)
Richard Si [Fri, 8 May 2020 14:26:29 +0000 (10:26 -0400)]
Add Black compatible configurations in documentation (#1366 & #1205) (#1371)

* Add Black compatible configs in docs ( #1366 & #1205)

When users of Black are starting a new project or are adding Black to their
existing projects, they will usually have to config their existing tools like
flake8 to be compatible with Black. Usually, these configs are the same across
different projects. Yet, there isn't any consolidated infomation on what configs
are compatible. Leaving users of Black to dig out any infomation they can find
in README.md.

* Fix a bad max-line-length value

* Clean up pylint's configs

* Add explanations for each configurations

Copying and pasting code without understanding it is a bad idea. This goes the same
for users copying and pasting configurations.

* Capitalize Pylint

* Link from the README

* Fix the isort configuration

I referenced the wrong source. I used a pesonal configuration, not a pure Black-
compatible configuration.

* Improve the config explanations

The explanation for the isort configuration was pretty bad. After having fixed the
configuration (see commit 01c55d1), improving the its explanation was necessary to
make it more user-friendly and understandable. Also added fenced code blocks of the
raw configuration options so the explanations make sense.

* Improve README wording slightly

* Add @hugovk, @JelleZijlstra + my suggestions

Co-authored-by: Cooper Lees <cooper@fb.com>
4 years agoInclude an easier way to integrate black with Pycharm (#1268)
Arnav Borborah [Fri, 8 May 2020 14:13:57 +0000 (10:13 -0400)]
Include an easier way to integrate black with Pycharm (#1268)

* Include an easier way to integrate black with Pycharm

4 years agoMake the use of a ThreadPoolExecutor explicit
Łukasz Langa [Fri, 8 May 2020 14:06:05 +0000 (16:06 +0200)]
Make the use of a ThreadPoolExecutor explicit

4 years agobetter test for mono executor
Zsolt Dollenstein [Fri, 8 May 2020 13:54:30 +0000 (14:54 +0100)]
better test for mono executor

4 years agoAdd docstrings to fmt checking functions, add to docs
Autophagy [Fri, 8 May 2020 13:41:27 +0000 (15:41 +0200)]
Add docstrings to fmt checking functions, add to docs

Follow up from #1325

Adds docstrings to the fmt checking functions.
Renames fmt_on to is_fmt_on.
Adds the functions to the autodocs.

4 years agopermits black to run in AWS Lambda: (#1141)
Allan Simon [Fri, 8 May 2020 13:46:07 +0000 (15:46 +0200)]
permits black to run in AWS Lambda: (#1141)

AWS Lambda and some other virtualized environment may not permit access
to /dev/shm on Linux and as such, trying to use ProcessPoolExecutor will
fail.

As using parallelism is only a 'nice to have' feature of black, if it fails
we gracefully fallback to a monoprocess implementation, which permits black
to finish normally.

Co-authored-by: Allan Simon <asimon@yolaw.fr>
4 years agoAdd Change Log project URL (#1382)
Ville Skyttä [Fri, 8 May 2020 13:40:56 +0000 (16:40 +0300)]
Add Change Log project URL (#1382)

* Add Change Log project URL

Co-authored-by: Cooper Lees <me@cooperlees.com>
Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
4 years agoPrefer virtualenv packages over global packages (#1383) (#1384)
kaiix [Fri, 8 May 2020 13:31:37 +0000 (21:31 +0800)]
Prefer virtualenv packages over global packages (#1383) (#1384)

4 years agoAdd option for printing a colored diff (#1266)
Douglas Thor [Fri, 8 May 2020 13:30:10 +0000 (06:30 -0700)]
Add option for printing a colored diff (#1266)