import black
import time
-def Black():
+def get_target_version(tv):
+ if isinstance(tv, black.TargetVersion):
+ return tv
+ ret = None
+ try:
+ ret = black.TargetVersion[tv.upper()]
+ except KeyError:
+ print(f"WARNING: Target version {tv!r} not recognized by Black, using default target")
+ return ret
+
+def Black(**kwargs):
+ """
+ kwargs allows you to override ``target_versions`` argument of
+ ``black.FileMode``.
+
+ ``target_version`` needs to be cleaned because ``black.FileMode``
+ expects the ``target_versions`` argument to be a set of TargetVersion enums.
+
+ Allow kwargs["target_version"] to be a string to allow
+ to type it more quickly.
+
+ Using also target_version instead of target_versions to remain
+ consistent to Black's documentation of the structure of pyproject.toml.
+ """
start = time.time()
configs = get_configs()
+
+ black_kwargs = {}
+ if "target_version" in kwargs:
+ target_version = kwargs["target_version"]
+
+ if not isinstance(target_version, (list, set)):
+ target_version = [target_version]
+ target_version = set(filter(lambda x: x, map(lambda tv: get_target_version(tv), target_version)))
+ black_kwargs["target_versions"] = target_version
+
mode = black.FileMode(
line_length=configs["line_length"],
string_normalization=not configs["skip_string_normalization"],
is_pyi=vim.current.buffer.name.endswith('.pyi'),
+ **black_kwargs,
)
quiet = configs["quiet"]
EndPython3
-function black#Black()
- :py3 Black()
+function black#Black(...)
+ let kwargs = {}
+ for arg in a:000
+ let arg_list = split(arg, '=')
+ let kwargs[arg_list[0]] = arg_list[1]
+ endfor
+python3 << EOF
+import vim
+kwargs = vim.eval("kwargs")
+EOF
+ :py3 Black(**kwargs)
endfunction
function black#BlackUpgrade()
if !exists("g:black_quiet")
let g:black_quiet = 0
endif
+if !exists("g:black_target_version")
+ let g:black_target_version = ""
+endif
+function BlackComplete(ArgLead, CmdLine, CursorPos)
+ return [
+\ 'target_version=py27',
+\ 'target_version=py36',
+\ 'target_version=py37',
+\ 'target_version=py38',
+\ 'target_version=py39',
+\ ]
+endfunction
-command! Black :call black#Black()
+command! -nargs=* -complete=customlist,BlackComplete Black :call black#Black(<f-args>)
command! BlackUpgrade :call black#BlackUpgrade()
command! BlackVersion :call black#BlackVersion()