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:

Allow to pass the FileMode options in the vim plugin (#1319)
authorshaoran <shaoran@sakuranohana.org>
Wed, 29 Sep 2021 00:31:29 +0000 (02:31 +0200)
committerGitHub <noreply@github.com>
Wed, 29 Sep 2021 00:31:29 +0000 (17:31 -0700)
CHANGES.md
autoload/black.vim
docs/integrations/editors.md
plugin/black.vim

index 1ff2cea84ca2d6e82d3536543196b1968d1d79dd..61d3178f92255f683d902ccdf8306b97afe376a5 100644 (file)
@@ -7,6 +7,10 @@
 - Remove dependency on aiohttp-cors (#2500)
 - Bump required aiohttp version to 3.7.4 (#2509)
 
+### Integrations
+
+- Allow to pass `target_version` in the vim plugin (#1319)
+
 ## 21.9b0
 
 ### Packaging
index 29d8f2b88e44d3cb32c0771e8f07468badcb5da8..9ff5c2341fe71d7920aa8a35fbbdcb9496a40e66 100644 (file)
@@ -98,13 +98,47 @@ if _initialize_black_env():
   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"]
 
@@ -160,8 +194,17 @@ def BlackVersion():
 
 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()
index 6098631e2a0996a2d0cfdafa9e215076002292f9..d3be7c0ea84ddd482fdb01efb7846fb370a80057 100644 (file)
@@ -116,6 +116,8 @@ Wing supports black via the OS Commands tool, as explained in the Wing documenta
 Commands and shortcuts:
 
 - `:Black` to format the entire file (ranges not supported);
+  - you can optionally pass `target_version=<version>` with the same values as in the
+    command line.
 - `:BlackUpgrade` to upgrade _Black_ inside the virtualenv;
 - `:BlackVersion` to get the current version of _Black_ inside the virtualenv.
 
index 3bdca62e6ad990650d3f8576948c0e39e9c6d1dd..90d2047790b2ba2e916b4cae3e18518117334b01 100644 (file)
@@ -53,8 +53,20 @@ endif
 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()