Add style tool to fix fish file formatting (#39155)
This commit is contained in:
parent
d9d1eb24f9
commit
70c71e8f93
@ -37,6 +37,7 @@ def spack_dev_requirements(cls) -> List[str]:
|
||||
mypy_root_spec(),
|
||||
black_root_spec(),
|
||||
flake8_root_spec(),
|
||||
fish_root_spec(),
|
||||
pytest_root_spec(),
|
||||
]
|
||||
|
||||
@ -179,6 +180,12 @@ def flake8_root_spec() -> str:
|
||||
return _root_spec("py-flake8@3.8.2:")
|
||||
|
||||
|
||||
def fish_root_spec() -> str:
|
||||
"""Return the root spec used to bootstrap fish"""
|
||||
# fish 3.2.0 introduces the `--check` flag to `fish_indent`
|
||||
return _root_spec("fish@3.2:")
|
||||
|
||||
|
||||
def pytest_root_spec() -> str:
|
||||
"""Return the root spec used to bootstrap flake8"""
|
||||
return _root_spec("py-pytest@6.2.4:")
|
||||
|
@ -36,7 +36,7 @@ def grouper(iterable, n, fillvalue=None):
|
||||
#: double-check the results of other tools (if, e.g., --fix was provided)
|
||||
#: The list maps an executable name to a method to ensure the tool is
|
||||
#: bootstrapped or present in the environment.
|
||||
tool_names = ["isort", "black", "flake8", "mypy"]
|
||||
tool_names = ["isort", "black", "flake8", "mypy", "fish_indent"]
|
||||
|
||||
#: tools we run in spack style
|
||||
tools = {}
|
||||
@ -61,12 +61,13 @@ def is_package(f):
|
||||
|
||||
#: decorator for adding tools to the list
|
||||
class tool:
|
||||
def __init__(self, name, required=False):
|
||||
def __init__(self, name, required=False, suffix=".py"):
|
||||
self.name = name
|
||||
self.required = required
|
||||
self.suffix = suffix
|
||||
|
||||
def __call__(self, fun):
|
||||
tools[self.name] = (fun, self.required)
|
||||
tools[self.name] = (fun, self.required, self.suffix)
|
||||
return fun
|
||||
|
||||
|
||||
@ -121,12 +122,8 @@ def changed_files(base="develop", untracked=True, all_files=False, root=None):
|
||||
files = git(*arg_list, output=str).split("\n")
|
||||
|
||||
for f in files:
|
||||
# Ignore non-Python files
|
||||
if not (f.endswith(".py") or f == "bin/spack"):
|
||||
continue
|
||||
|
||||
# Ignore files in the exclude locations
|
||||
if any(os.path.realpath(f).startswith(e) for e in excludes):
|
||||
if not f or any(os.path.realpath(f).startswith(e) for e in excludes):
|
||||
continue
|
||||
|
||||
changed.add(f)
|
||||
@ -352,6 +349,22 @@ def run_black(black_cmd, file_list, args):
|
||||
return returncode
|
||||
|
||||
|
||||
@tool("fish_indent", suffix=".fish")
|
||||
def run_fish_indent(fish_indent_cmd, file_list, args):
|
||||
if args.fix:
|
||||
fish_indent_args = ["--write"]
|
||||
else:
|
||||
fish_indent_args = ["--check"]
|
||||
|
||||
output = fish_indent_cmd(*fish_indent_args, *file_list, fail_on_error=False, output=str)
|
||||
returncode = fish_indent_cmd.returncode
|
||||
|
||||
rewrite_and_print_output(output, args)
|
||||
print_tool_result("fish_indent", returncode)
|
||||
|
||||
return returncode
|
||||
|
||||
|
||||
def validate_toolset(arg_value):
|
||||
"""Validate --tool and --skip arguments (sets of optionally comma-separated tools)."""
|
||||
tools = set(",".join(arg_value).split(",")) # allow args like 'isort,flake8'
|
||||
@ -417,9 +430,11 @@ def prefix_relative(path):
|
||||
|
||||
print_style_header(file_list, args, tools_to_run)
|
||||
for tool_name in tools_to_run:
|
||||
run_function, required = tools[tool_name]
|
||||
run_function, required, suffix = tools[tool_name]
|
||||
print_tool_header(tool_name)
|
||||
return_code |= run_function(which(tool_name), file_list, args)
|
||||
file_subset = [f for f in file_list if f.endswith(suffix)]
|
||||
if file_subset:
|
||||
return_code |= run_function(which(tool_name), file_subset, args)
|
||||
|
||||
if return_code == 0:
|
||||
tty.msg(color.colorize("@*{spack style checks were clean}"))
|
||||
|
@ -56,7 +56,7 @@ def flake8_package_with_errors(scope="function"):
|
||||
"""A flake8 package with errors."""
|
||||
repo = spack.repo.Repo(spack.paths.mock_packages_path)
|
||||
filename = repo.filename_for_package_name("flake8")
|
||||
tmp = filename + ".tmp"
|
||||
tmp = filename.replace("package.py", "package2.py")
|
||||
|
||||
shutil.copy(filename, tmp)
|
||||
package = FileFilter(tmp)
|
||||
@ -64,11 +64,12 @@ def flake8_package_with_errors(scope="function"):
|
||||
# this is a black error (quote style and spacing before/after operator)
|
||||
package.filter('state = "unmodified"', "state = 'modified'", string=True)
|
||||
|
||||
# this is an isort error (orderign) and a flake8 error (unused import)
|
||||
# this is an isort error (ordering) and a flake8 error (unused import)
|
||||
package.filter(
|
||||
"from spack.package import *", "from spack.package import *\nimport os", string=True
|
||||
)
|
||||
yield tmp
|
||||
os.remove(tmp)
|
||||
|
||||
|
||||
def test_changed_files_from_git_rev_base(git, tmpdir, capfd):
|
||||
@ -213,6 +214,7 @@ def test_fix_style(external_style_root):
|
||||
@pytest.mark.skipif(not which("isort"), reason="isort is not installed.")
|
||||
@pytest.mark.skipif(not which("mypy"), reason="mypy is not installed.")
|
||||
@pytest.mark.skipif(not which("black"), reason="black is not installed.")
|
||||
@pytest.mark.skipif(not which("fish_indent"), reason="fish is not installed.")
|
||||
def test_external_root(external_style_root, capfd):
|
||||
"""Ensure we can run in a separate root directory w/o configuration files."""
|
||||
tmpdir, py_file = external_style_root
|
||||
@ -285,5 +287,5 @@ def test_style_with_black(flake8_package_with_errors):
|
||||
|
||||
|
||||
def test_skip_tools():
|
||||
output = style("--skip", "isort,mypy,black,flake8")
|
||||
output = style("--skip", "isort,mypy,black,flake8,fish_indent")
|
||||
assert "Nothing to run" in output
|
||||
|
@ -155,8 +155,8 @@ end
|
||||
#
|
||||
|
||||
function capture_all
|
||||
begin;
|
||||
begin;
|
||||
begin
|
||||
begin
|
||||
eval $argv[1]
|
||||
set $argv[2] $status # read sets the `status` flag => capture here
|
||||
end 2>| read -z __err
|
||||
@ -296,32 +296,32 @@ function check_env_activate_flags -d "check spack env subcommand flags for -h, -
|
||||
if test -n "$_a"
|
||||
|
||||
# looks for a single `-h`
|
||||
if match_flag $_a "-h"
|
||||
if match_flag $_a -h
|
||||
return 0
|
||||
end
|
||||
|
||||
# looks for a single `--help`
|
||||
if match_flag $_a "--help"
|
||||
if match_flag $_a --help
|
||||
return 0
|
||||
end
|
||||
|
||||
# looks for a single `--sh`
|
||||
if match_flag $_a "--sh"
|
||||
if match_flag $_a --sh
|
||||
return 0
|
||||
end
|
||||
|
||||
# looks for a single `--csh`
|
||||
if match_flag $_a "--csh"
|
||||
if match_flag $_a --csh
|
||||
return 0
|
||||
end
|
||||
|
||||
# looks for a single `--fish`
|
||||
if match_flag $_a "--fish"
|
||||
if match_flag $_a --fish
|
||||
return 0
|
||||
end
|
||||
|
||||
# looks for a single `--list`
|
||||
if match_flag $_a "--list"
|
||||
if match_flag $_a --list
|
||||
return 0
|
||||
end
|
||||
|
||||
@ -344,17 +344,17 @@ function check_env_deactivate_flags -d "check spack env subcommand flags for --s
|
||||
if test -n "$_a"
|
||||
|
||||
# looks for a single `--sh`
|
||||
if match_flag $_a "--sh"
|
||||
if match_flag $_a --sh
|
||||
return 0
|
||||
end
|
||||
|
||||
# looks for a single `--csh`
|
||||
if match_flag $_a "--csh"
|
||||
if match_flag $_a --csh
|
||||
return 0
|
||||
end
|
||||
|
||||
# looks for a single `--fish`
|
||||
if match_flag $_a "--fish"
|
||||
if match_flag $_a --fish
|
||||
return 0
|
||||
end
|
||||
|
||||
@ -424,7 +424,7 @@ function spack_runner -d "Runner function for the `spack` wrapper"
|
||||
# further needs to be done. Otherwise, test the location referring the
|
||||
# subcommand and cd there (if it exists).
|
||||
|
||||
case "cd"
|
||||
case cd
|
||||
|
||||
set -l sp_arg ""
|
||||
|
||||
@ -435,7 +435,7 @@ function spack_runner -d "Runner function for the `spack` wrapper"
|
||||
end
|
||||
|
||||
# Notes: [2] (cf. EOF)
|
||||
if test "x$sp_arg" = "x-h"; or test "x$sp_arg" = "x--help"
|
||||
if test "x$sp_arg" = x-h; or test "x$sp_arg" = x--help
|
||||
# nothing more needs to be done for `-h` or `--help`
|
||||
command spack cd -h
|
||||
return
|
||||
@ -459,7 +459,7 @@ function spack_runner -d "Runner function for the `spack` wrapper"
|
||||
# varibles. These commands are then run by fish (using the `capture_all`
|
||||
# function, instead of a command substitution).
|
||||
|
||||
case "env"
|
||||
case env
|
||||
|
||||
set -l sp_arg ""
|
||||
|
||||
@ -470,13 +470,13 @@ function spack_runner -d "Runner function for the `spack` wrapper"
|
||||
end
|
||||
|
||||
# Notes: [2] (cf. EOF)
|
||||
if test "x$sp_arg" = "x-h"; or test "x$sp_arg" = "x--help"
|
||||
if test "x$sp_arg" = x-h; or test "x$sp_arg" = x--help
|
||||
# nothing more needs to be done for `-h` or `--help`
|
||||
command spack env -h
|
||||
return
|
||||
else
|
||||
switch $sp_arg
|
||||
case "activate"
|
||||
case activate
|
||||
set -l _a (stream_args $__sp_remaining_args)
|
||||
|
||||
if check_env_activate_flags $_a
|
||||
@ -494,7 +494,7 @@ function spack_runner -d "Runner function for the `spack` wrapper"
|
||||
return $__sp_stat
|
||||
end
|
||||
|
||||
case "deactivate"
|
||||
case deactivate
|
||||
set -l _a (stream_args $__sp_remaining_args)
|
||||
|
||||
if check_env_deactivate_flags $_a
|
||||
@ -543,7 +543,7 @@ function spack_runner -d "Runner function for the `spack` wrapper"
|
||||
# to deal with the substituting latest version numbers to the module
|
||||
# command.
|
||||
|
||||
case "load" or "unload"
|
||||
case load or unload
|
||||
|
||||
set -l _a (stream_args $__sp_remaining_args)
|
||||
|
||||
@ -711,8 +711,8 @@ set -xg SPACK_ROOT $sp_prefix
|
||||
#
|
||||
# No need to determine which shell is being used (obviously it's fish)
|
||||
#
|
||||
set -xg SPACK_SHELL "fish"
|
||||
set -xg _sp_shell "fish"
|
||||
set -xg SPACK_SHELL fish
|
||||
set -xg _sp_shell fish
|
||||
|
||||
|
||||
|
||||
@ -721,9 +721,9 @@ if test -z "$SPACK_SKIP_MODULES"
|
||||
#
|
||||
# Check whether we need environment-variables (module) <= `use` is not available
|
||||
#
|
||||
set -l need_module "no"
|
||||
set -l need_module no
|
||||
if not functions -q use; and not functions -q module
|
||||
set need_module "yes"
|
||||
set need_module yes
|
||||
end
|
||||
|
||||
|
||||
@ -742,7 +742,7 @@ if test -z "$SPACK_SKIP_MODULES"
|
||||
end
|
||||
|
||||
|
||||
if test "$need_module" = "yes"
|
||||
if test "$need_module" = yes
|
||||
set -l sp_shell_vars (command spack --print-shell-vars sh,modules)
|
||||
|
||||
for sp_var_expr in $sp_shell_vars
|
||||
@ -750,7 +750,7 @@ if test -z "$SPACK_SKIP_MODULES"
|
||||
end
|
||||
|
||||
# _sp_module_prefix is set by spack --print-sh-vars
|
||||
if test "$_sp_module_prefix" != "not_installed"
|
||||
if test "$_sp_module_prefix" != not_installed
|
||||
set -xg MODULE_PREFIX $_sp_module_prefix
|
||||
spack_pathadd PATH "$MODULE_PREFIX/bin"
|
||||
end
|
||||
@ -765,7 +765,7 @@ if test -z "$SPACK_SKIP_MODULES"
|
||||
|
||||
end
|
||||
|
||||
if test "$need_module" = "yes"
|
||||
if test "$need_module" = yes
|
||||
function module -d "wrapper for the `module` command to point at Spack's modules instance" --inherit-variable MODULE_PREFIX
|
||||
eval $MODULE_PREFIX/bin/modulecmd $SPACK_SHELL $argv
|
||||
end
|
||||
|
@ -2643,9 +2643,9 @@ complete -c spack -n '__fish_spack_using_command style' -s f -l fix -d 'format a
|
||||
complete -c spack -n '__fish_spack_using_command style' -l root -r -f -a root
|
||||
complete -c spack -n '__fish_spack_using_command style' -l root -r -d 'style check a different spack instance'
|
||||
complete -c spack -n '__fish_spack_using_command style' -s t -l tool -r -f -a tool
|
||||
complete -c spack -n '__fish_spack_using_command style' -s t -l tool -r -d 'specify which tools to run (default: isort,black,flake8,mypy)'
|
||||
complete -c spack -n '__fish_spack_using_command style' -s t -l tool -r -d 'specify which tools to run (default: isort,black,flake8,mypy,fish_indent)'
|
||||
complete -c spack -n '__fish_spack_using_command style' -s s -l skip -r -f -a skip
|
||||
complete -c spack -n '__fish_spack_using_command style' -s s -l skip -r -d 'specify tools to skip (choose from isort,black,flake8,mypy)'
|
||||
complete -c spack -n '__fish_spack_using_command style' -s s -l skip -r -d 'specify tools to skip (choose from isort,black,flake8,mypy,fish_indent)'
|
||||
|
||||
# spack tags
|
||||
set -g __fish_spack_optspecs_spack_tags h/help i/installed a/all
|
||||
|
Loading…
Reference in New Issue
Block a user