if !exists("g:black_linelength")
let g:black_linelength = 88
endif
-if !exists("g:black_skip_string_normalization")
- let g:black_skip_string_normalization = 0
+if !exists("g:black_string_normalization")
+ if exists("g:black_skip_string_normalization")
+ let g:black_string_normalization = !g:black_skip_string_normalization
+ else
+ let g:black_string_normalization = 1
+ endif
+endif
+if !exists("g:black_quiet")
+ let g:black_quiet = 0
endif
-python3 << endpython3
+python3 << EndPython3
import collections
import os
import sys
import vim
+from distutils.util import strtobool
class Flag(collections.namedtuple("FlagBase", "name, cast")):
name = self.var_name
if name == "line_length":
name = name.replace("_", "")
- if name == "string_normalization":
- name = "skip_" + name
return "g:black_" + name
FLAGS = [
Flag(name="line_length", cast=int),
- Flag(name="fast", cast=bool),
- Flag(name="string_normalization", cast=bool),
+ Flag(name="fast", cast=strtobool),
+ Flag(name="string_normalization", cast=strtobool),
+ Flag(name="quiet", cast=strtobool),
]
return venv_path / 'lib' / f'python{pyver[0]}.{pyver[1]}' / 'site-packages'
def _initialize_black_env(upgrade=False):
- pyver = sys.version_info[:2]
- if pyver < (3, 6):
- print("Sorry, Black requires Python 3.6+ to run.")
+ pyver = sys.version_info[:3]
+ if pyver < (3, 6, 2):
+ print("Sorry, Black requires Python 3.6.2+ to run.")
return False
from pathlib import Path
if not virtualenv_path.is_dir():
print('Please wait, one time setup for Black.')
_executable = sys.executable
+ _base_executable = getattr(sys, "_base_executable", _executable)
try:
- sys.executable = str(_get_python_binary(Path(sys.exec_prefix)))
+ executable = str(_get_python_binary(Path(sys.exec_prefix)))
+ sys.executable = executable
+ sys._base_executable = executable
print(f'Creating a virtualenv in {virtualenv_path}...')
print('(this path can be customized in .vimrc by setting g:black_virtualenv)')
venv.create(virtualenv_path, with_pip=True)
+ except Exception:
+ print('Encountered exception while creating virtualenv (see traceback below).')
+ print(f'Removing {virtualenv_path}...')
+ import shutil
+ shutil.rmtree(virtualenv_path)
+ raise
finally:
sys.executable = _executable
+ sys._base_executable = _base_executable
first_install = True
if first_install:
print('Installing Black with pip...')
if first_install:
print('Pro-tip: to upgrade Black in the future, use the :BlackUpgrade command and restart Vim.\n')
if virtualenv_site_packages not in sys.path:
- sys.path.append(virtualenv_site_packages)
+ sys.path.insert(0, virtualenv_site_packages)
return True
if _initialize_black_env():
string_normalization=configs["string_normalization"],
is_pyi=vim.current.buffer.name.endswith('.pyi'),
)
+ quiet = configs["quiet"]
buffer_str = '\n'.join(vim.current.buffer) + '\n'
try:
mode=mode,
)
except black.NothingChanged:
- print(f'Already well formatted, good job. (took {time.time() - start:.4f}s)')
+ if not quiet:
+ print(f'Already well formatted, good job. (took {time.time() - start:.4f}s)')
except Exception as exc:
print(exc)
else:
window.cursor = cursor
except vim.error:
window.cursor = (len(window.buffer), 0)
- print(f'Reformatted in {time.time() - start:.4f}s.')
+ if not quiet:
+ print(f'Reformatted in {time.time() - start:.4f}s.')
def get_configs():
path_pyproject_toml = black.find_pyproject_toml(vim.eval("fnamemodify(getcwd(), ':t')"))
toml_config = {}
return {
- flag.var_name: toml_config.get(flag.name, flag.cast(vim.eval(flag.vim_rc_name)))
+ flag.var_name: flag.cast(toml_config.get(flag.name, vim.eval(flag.vim_rc_name)))
for flag in FLAGS
}
def BlackVersion():
print(f'Black, version {black.__version__} on Python {sys.version}.')
-endpython3
+EndPython3
command! Black :py3 Black()
command! BlackUpgrade :py3 BlackUpgrade()