Commit Graph

36 Commits

Author SHA1 Message Date
cobalt b41acd6ebb Various CI and doc refactors (#4928) 2026-01-15 22:05:06 -06:00
Hugo van Kemenade 45b4087976 Drop support for EOL Python 3.9 (#4842)
* Drop support for EOL Python 3.9

* pyupgrade --py310 except not profiling/ or tests/data/

* Apply suggestions from code review

* Fix optional.py typing so we can merge

---------

Co-authored-by: Cooper Ry Lees <me@cooperlees.com>
2025-11-16 21:16:43 -06:00
Samuel Gaist 0b8f222dc1 Improve vim plugin error message (#4772)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: cobalt <61329810+cobaltt7@users.noreply.github.com>
2025-10-05 16:05:27 -05:00
Jelle Zijlstra 32ebb93003 Clean up Python 3.8 remnants (#4473) 2024-10-08 19:11:22 -07:00
Corey Hickey 4bb6e4f64a Vim plugin: allow using system black rather than virtualenv (#3309)
Provide a configuration parameter to the Vim plugin which will allow the
plugin to skip setting up a virtualenv. This is useful when there is a
system installation of black (e.g. from a Linux distribution) which the
user prefers to use.

Using a virtualenv remains the default.

- Fixes #3308
2022-10-27 18:55:33 -05:00
PeterGrossmann 92c93a2780 Add preview flag to Vim plugin (#3246)
This allows the configuration of the --preview flag in the Vim plugin.
2022-09-01 12:39:47 -04:00
oncomouse 7af3abd383 Move test for g:load_black to improve plugin performance (GH-2896)
If a vim/neovim user wishes to suppress loading the vim plugin by
setting g:load_black in their VIMRC (for me, Arch linux automatically
adds the plugin to Neovim's RTP, even though I'm not using it), the
current location of the test comes after a call to has('python3'). This
adds, in my tests, between 35 and 45 ms to Vim load time (which I know
isn't a lot but it's also unnecessary). Moving the call to
`exists('g:load_black')` to before the call to `has('python3')` removes
this unnecessary test and speeds up loading.

Co-authored-by: Richard Si <63936253+ichard26@users.noreply.github.com>
2022-03-04 19:15:39 -05:00
Jelle Zijlstra 7dacdbe6dc fix vim plugin (#2615) 2021-11-16 18:22:32 -08:00
shaoran 09915f4bd2 Allow to pass the FileMode options in the vim plugin (#1319) 2021-09-28 17:31:29 -07:00
Bartosz Telenczuk 52384bf0a3 Vim plugin fix string normalization option (#1869)
This commit fixes parsing of the skip-string-normalization option in vim
plugin. Originally, the plugin read the string-normalization option,
which does not exist in help (--help) and it's not respected by black
on command line.

Commit history before merge:

* fix string normalization option in vim plugin
* fix string normalization option in vim plugin
* Finish and fix patch (thanks Matt Wozniski!)

FYI: this is totally the work and the comments below of Matt (AKA godlygeek)

This fixes two entirely different problems related to how pyproject.toml
files are handled by the vim plugin.

=== Problem #1 ===

The plugin fails to properly read boolean values from pyproject.toml.
For instance, if you create this pyproject.toml:

```
[tool.black]
quiet = true
```

the Black CLI is happy with it and runs without any messages, but the
:Black command provided by this plugin fails with:

```
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "<string>", line 102, in Black
  File "<string>", line 150, in get_configs
  File "<string>", line 150, in <dictcomp>
  File "/usr/lib/python3.6/distutils/util.py", line 311, in strtobool
    val = val.lower()
AttributeError: 'bool' object has no attribute 'lower'
```

That's because the value returned by the toml.load() is already a
bool, but the vim plugin incorrectly tries to convert it from a str to a bool.

The value returned by toml_config.get() was always being passed to
flag.cast(), which is a function that either converts a string to an
int or a string to a bool, depending on the flag. vim.eval()
returns integers and strings all as str, which is why we need the cast,
but that's the wrong thing to do for values that came from toml.load().
We should be applying the cast only to the return from vim.eval()
(since we know it always gives us a string), rather than casting the
value that toml.load() found - which is already the right type.

=== Problem #2 ===

The vim plugin fails to take the value for skip_string_normalization
from pyproject.toml. That's because it looks for a string_normalization
key instead of a skip_string_normalization key, thanks to this line
saying the name of the flag is string_normalization:

black/autoload/black.vim (line 25 in 05b54b8)
```
 Flag(name="string_normalization", cast=strtobool),
```

and this dictcomp looking up each flag's name in the config dict:

black/autoload/black.vim (lines 148 to 151 in 05b54b8)
```
 return {
   flag.var_name: flag.cast(toml_config.get(flag.name, vim.eval(flag.vim_rc_name)))
   for flag in FLAGS
 }
```

For the second issue, I think I'd do a slightly different patch. I'd
keep the change to invert this flag's meaning and change its name that
this PR proposes, but I'd also change the handling of the
g:black_skip_string_normalization and g:black_string_normalization
variables to make it clear that g:black_skip_string_normalization is
the expected name, and g:black_string_normalization is only checked
when the expected name is unset, for backwards compatibility.

My proposed behavior is to check if g:black_skip_string_normalization
is defined and to define it if not, using the inverse of
g:black_string_normalization if that is set, and otherwise to the
default of 0. The Python code in autoload/black.vim runs later, and
will use the value of g:black_skip_string_normalization (and ignore
g:black_string_normalization; it will only be used to set
g:black_skip_string_normalization if it wasn't already set).

---

Co-authored-by: Matt Wozniski <mwozniski@bloomberg.net>

* Fix plugin/black.vim (need to up my vim game)

Co-authored-by: Matt Wozniski <godlygeek@gmail.com>

Co-authored-by: Richard Si <63936253+ichard26@users.noreply.github.com>
Co-authored-by: Matt Wozniski <mwozniski@bloomberg.net>
Co-authored-by: Matt Wozniski <godlygeek@gmail.com>
2021-06-12 15:55:10 -04:00
Konstantin Alekseev 5446a92f01 Use vim autoload script (#1157) 2021-03-07 16:13:25 -08:00
Hugo van Kemenade 24418a5450 Black requires Python 3.6.2+ (#1668) 2021-03-04 05:59:31 -08:00
Noel Evans 2989dc1bf8 vim plugin: Add quiet flag so non-error actions go unreported (#1733) 2020-12-09 15:40:45 -08:00
Rowan Rodrik van der Molen 5f78401b28 Fix g:black_fast and g:black_(skip)_string_normalization opts 2020-08-27 01:31:18 +02:00
Keith Smiley 4ccc8c86f5 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
2020-06-15 08:55:42 -07:00
kaiix 61f04e658b Prefer virtualenv packages over global packages (#1383) (#1384) 2020-05-08 06:31:37 -07:00
David Lukes 68a3c75eb2 Make sure sys._base_executable is sane in Vim plugin (#1380)
The `venv` module relies on `sys._base_executable` to determine the
Python executable to run, but with recent versions of Vim, this is set
to the `vim` executable. A possible workaround is to just override it,
since the `black` plugin already overrides `sys.executable` (possibly
for similar reasons?) anyway.
2020-05-08 06:13:54 -07:00
Charles 8654e8d7ae Update heredoc marker case to conform with vim patch 8.1.1723 (#1348) 2020-04-16 19:26:09 -07:00
Paul Ganssle bbe5ae70c1 Notify users of missing Python lazily (#1210)
Currently this message shows up with no context prior to the start of
Vim. By changing this to a lazy message, the user will only be notified
of a problem with the Black plugin when they are attempting to use the
Black plugin.

Co-authored-by: Łukasz Langa <lukasz@langa.pl>
2020-03-03 13:00:52 +01:00
Tal Amuyal 8fef74cf52 Teach the Vim plugin to respect pyproject.toml (issue 414) (#1273)
Creates two separate functions:

1) abspath_pyproject_toml: find the absolute path to pyproject.toml
2) parse_pyproject_toml: finds black-specific toml config

Co-authored-by: Samuel Roeca <samuel.roeca@gmail.com>
2020-03-03 12:23:28 +01:00
Matthew Clapp d33337b4d5 Change error message to specify its origin. (#1240) 2020-01-23 08:18:57 -08:00
Alexander Huynh ba2733dc81 Restore all cursors, instead of only the current window (#978)
If we have the same buffer open in multiple windows/tabs, we'll only
restore the current window's cursor.

Iterate through all tabs and windows, and save/restore all cursor
positions of windows that contain our buffer.

Addendum to #433.
2019-10-21 11:21:05 +02:00
Łukasz Langa 394edc3887 Revert "restore cursor to same line of code, not same line of buffer (#989)"
This reverts commit 65c5a0d9f1.

Edge cases were discovered on the pull request post merge.
2019-10-21 11:16:34 +02:00
Asger Hautop Drewsen 4bcae4cf83 Use better default venv dir when using neovim (#937) 2019-10-20 16:43:02 +02:00
Josh Bode 9027ca63ca Change how venv path is modified in vim plugin (#804)
- Check if black venv path is not already in `sys.path`
- Append (not insert) path so that black doesn't incorrectly import backports (e.g. `typing`)

Avoids this error if `typing` is present in venv:
```
Traceback (most recent call last):
  File "<string>", line 56, in <module>
  File "/home/josh/.virtualenvs/default/lib/python3.7/site-packages/black.py", line 19, in <module>
    from typing import (
  File "/home/josh/.virtualenvs/default/lib/python3.7/site-packages/typing.py", line 1356, in <module>
    class Callable(extra=collections_abc.Callable, metaclass=CallableMeta):
  File "/home/josh/.virtualenvs/default/lib/python3.7/site-packages/typing.py", line 1004, in __new__
    self._abc_registry = extra._abc_registry
AttributeError: type object 'Callable' has no attribute '_abc_registry'
```
2019-10-20 16:24:50 +02:00
Charles Reid 65c5a0d9f1 restore cursor to same line of code, not same line of buffer (#989) 2019-10-20 16:00:48 +02:00
pmacosta 4931ddd0b1 Use g:pymode_python-defined interpreter if defined and exists, otherwise use existing defaults (#666)
This is helpful when using custom-compiled interpreters, or alternative
Python interpreters in non-standard locations
2019-05-07 13:28:56 -04:00
Thom Lu a2f6706a1e fix vim plugin for 19.3b0 (#755) (#766) 2019-03-17 09:27:50 -07:00
Sami Salonen 1580477615 Put cursor in last line if old position is invalid (#641) 2019-03-06 19:34:17 -08:00
Bryan Forbes a862795e1a Format pyi files correctly (#599) 2019-02-04 19:08:06 -08:00
David Hotham 3fb4516872 Remove mappings from Vim plugin. (#417)
They clashed with standard mappings.  Simplest just to let users define
their own.

Fixes #415
2018-08-17 16:45:47 +01:00
Jonty Wareing 2ec4c5f4f9 vim: Restore cursor/window position after format (#433)
Without this the cursor jumps to the top of the window after formatting
occurs.
2018-08-17 16:39:33 +01:00
Łukasz Langa 75a9447448 Don't crash the Vim plugin
Fixes #312
2018-06-07 11:40:41 -07:00
Matthew Walster e5f5d54a22 vim: add "--skip-string-normalization" support (#310)
Since 18.6b0 was released, there has been a new option to skip string
normalization when Black is called, but it wasn't able to be specified
from within the vim plugin. This commit adds that functionality.

Tested with g:black_skip_string_normalization set to 0 (off) and 1 (on).
2018-06-06 15:45:17 -07:00
Codey Oxley e196180a0d Addresses #174 Neovim Error (#197)
Neovim uses stdout for `msgpack` communication and the `subprocess` call for `virtualenv` was leaking that stream. Fix is to attach to a `subprocess.PIPE`.
2018-05-08 21:08:25 -07:00
Josh Holland 337a4199f9 Add install instructions for Vim plugin (#131) 2018-04-24 09:36:28 -07:00