Get flake8 working as an aspect
This commit is contained in:
parent
f712734648
commit
aeb3fff678
12 changed files with 112 additions and 8 deletions
3
BUILD
Normal file
3
BUILD
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
exports_files(["setup.cfg"])
|
|
@ -18,7 +18,7 @@ index-servers = pypi
|
||||||
shitlist = pip,pkg_resources,setuptools
|
shitlist = pip,pkg_resources,setuptools
|
||||||
|
|
||||||
[flake8]
|
[flake8]
|
||||||
extend-ignore = E203,E501,F405,F403,E731
|
extend-ignore = E203,E501,F405,F403,E731,E306
|
||||||
|
|
||||||
[pypi]
|
[pypi]
|
||||||
repository = https://pypi.python.org/pypi
|
repository = https://pypi.python.org/pypi
|
||||||
|
|
|
@ -3,5 +3,8 @@ py_binary(
|
||||||
main = "__main__.py",
|
main = "__main__.py",
|
||||||
deps = [
|
deps = [
|
||||||
py_requirement("autoflake"),
|
py_requirement("autoflake"),
|
||||||
]
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public"
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
|
exports_files(["flake8.cfg"], visibility=["//visibility:public"])
|
||||||
|
|
||||||
py_binary(
|
py_binary(
|
||||||
name = "flake8",
|
name = "flake8",
|
||||||
main = "__main__.py",
|
main = "__main__.py",
|
||||||
deps = [
|
deps = [
|
||||||
py_requirement("flake8"),
|
py_requirement("flake8"),
|
||||||
],
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public"
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
65
tools/flake8/flake8.bzl
Normal file
65
tools/flake8/flake8.bzl
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
"""Linting for Python using Aspects."""
|
||||||
|
|
||||||
|
|
||||||
|
def _flake8_aspect_impl(target, ctx):
|
||||||
|
if hasattr(ctx.rule.attr, 'srcs'):
|
||||||
|
flake8 = ctx.attr._flake8.files_to_run
|
||||||
|
config = ctx.attr._config.files.to_list()[0]
|
||||||
|
|
||||||
|
files = []
|
||||||
|
for src in ctx.rule.attr.srcs:
|
||||||
|
for f in src.files.to_list():
|
||||||
|
if f.extension == "py":
|
||||||
|
files.append(f)
|
||||||
|
|
||||||
|
if files:
|
||||||
|
report = ctx.actions.declare_file(ctx.label.name + ".report")
|
||||||
|
else:
|
||||||
|
return []
|
||||||
|
|
||||||
|
args = ["--config", config.path, "--tee", "--output-file", report.path]
|
||||||
|
for f in files:
|
||||||
|
args.append(f.path)
|
||||||
|
|
||||||
|
ctx.actions.run(
|
||||||
|
executable = flake8,
|
||||||
|
inputs = files,
|
||||||
|
tools = ctx.attr._config.files.to_list() + ctx.attr._flake8.files.to_list(),
|
||||||
|
arguments = args,
|
||||||
|
outputs = [report],
|
||||||
|
mnemonic = "Flake8",
|
||||||
|
)
|
||||||
|
|
||||||
|
return [
|
||||||
|
OutputGroupInfo(flake8_checks = depset([report]))
|
||||||
|
]
|
||||||
|
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
flake8_aspect = aspect(
|
||||||
|
implementation = _flake8_aspect_impl,
|
||||||
|
attr_aspects = ['deps'],
|
||||||
|
attrs = {
|
||||||
|
'_flake8': attr.label(default="//tools/flake8"),
|
||||||
|
'_config': attr.label(
|
||||||
|
default="//:setup.cfg",
|
||||||
|
executable=False,
|
||||||
|
allow_single_file=True
|
||||||
|
),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _flake8_rule_impl(ctx):
|
||||||
|
ready_targets = [dep for dep in ctx.attr.deps if "flake8_checks" in dir(dep[OutputGroupInfo])]
|
||||||
|
files = depset([], transitive = [dep[OutputGroupInfo].flake8_checks for dep in ready_targets])
|
||||||
|
return [DefaultInfo(files = files)]
|
||||||
|
|
||||||
|
|
||||||
|
flake8 = rule(
|
||||||
|
implementation = _flake8_rule_impl,
|
||||||
|
attrs = {
|
||||||
|
'deps' : attr.label_list(aspects = [flake8_aspect]),
|
||||||
|
},
|
||||||
|
)
|
|
@ -3,5 +3,9 @@ py_binary(
|
||||||
main = "__main__.py",
|
main = "__main__.py",
|
||||||
deps = [
|
deps = [
|
||||||
py_requirement("isort"),
|
py_requirement("isort"),
|
||||||
]
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public"
|
||||||
|
],
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,5 +3,8 @@ py_binary(
|
||||||
main = "__main__.py",
|
main = "__main__.py",
|
||||||
deps = [
|
deps = [
|
||||||
py_requirement("openapi-spec-validator"),
|
py_requirement("openapi-spec-validator"),
|
||||||
]
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public"
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
|
@ -14,6 +14,9 @@ load("@rules_zapp//zapp:zapp.bzl",
|
||||||
"zapp_binary",
|
"zapp_binary",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
load("//tools/flake8:flake8.bzl",
|
||||||
|
"flake8",
|
||||||
|
)
|
||||||
|
|
||||||
def py_requirement(*args, **kwargs):
|
def py_requirement(*args, **kwargs):
|
||||||
"""A re-export of requirement()"""
|
"""A re-export of requirement()"""
|
||||||
|
@ -208,6 +211,12 @@ def py_project(name=None,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# if lib_srcs:
|
||||||
|
# flake8(
|
||||||
|
# name = "flake8",
|
||||||
|
# deps = [lib_name],
|
||||||
|
# )
|
||||||
|
|
||||||
if main:
|
if main:
|
||||||
py_binary(
|
py_binary(
|
||||||
name=name,
|
name=name,
|
||||||
|
|
|
@ -8,5 +8,8 @@ py_binary(
|
||||||
py_requirement("sphinxcontrib-openapi"),
|
py_requirement("sphinxcontrib-openapi"),
|
||||||
py_requirement("sphinxcontrib-programoutput"),
|
py_requirement("sphinxcontrib-programoutput"),
|
||||||
py_requirement("livereload"),
|
py_requirement("livereload"),
|
||||||
]
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public"
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,5 +3,8 @@ py_binary(
|
||||||
main = "__main__.py",
|
main = "__main__.py",
|
||||||
deps = [
|
deps = [
|
||||||
py_requirement("unify"),
|
py_requirement("unify"),
|
||||||
]
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public"
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
|
@ -5,5 +5,8 @@ py_binary(
|
||||||
py_requirement("beautifulsoup4"),
|
py_requirement("beautifulsoup4"),
|
||||||
py_requirement("click"),
|
py_requirement("click"),
|
||||||
py_requirement("lxml"),
|
py_requirement("lxml"),
|
||||||
]
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public"
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
|
@ -4,5 +4,8 @@ py_binary(
|
||||||
main = "__main__.py",
|
main = "__main__.py",
|
||||||
deps = [
|
deps = [
|
||||||
py_requirement("yamllint"),
|
py_requirement("yamllint"),
|
||||||
]
|
],
|
||||||
|
visibility = [
|
||||||
|
"//visibility:public"
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue