Я пытаюсь создать правило, которое связывает весь мой код (все языки, которые я использую в этом проекте). Но мне трудно это сделать.
Как я уже сказал, лучшая идея, которая пришла мне в голову, чтобы ограничить весь проект, - создать правило lint
и поместить в него все правила обработки ( eslint
для js & ts, golang/lint
для go, et c ...).
Вот мое текущее правило:
# //:rules/lint.bzl
load("@npm//eslint:index.bzl", "eslint")
def _lint(ctx):
# js / ts
eslint(
name = "eslint",
args = [
"\"**/*.{ts, js}\"", # I don't think this is going to work, maybe with `location`?
],
)
lint = rule(
implementation = _lint,
)
И в моем root s BUILD.bazel
:
# //:BUILD.bazel
load("//:rules/lint.bzl", "lint")
lint(name = "lint")
Если я попытаюсь bazel run //:lint
, то получится следующее:
ERROR: Cannot run target //:lint: Not executable
И с bazel build
:
ERROR: /home/anatole/dev/Iris/BUILD.bazel:12:1: in lint rule //:lint:
Traceback (most recent call last):
File "/home/anatole/dev/Iris/BUILD.bazel", line 12
lint(name = 'lint')
File "/home/anatole/dev/Iris/rules/lint.bzl", line 4, in _lint
eslint(name = "eslint", <1 more arguments>)
File "/home/anatole/.cache/bazel/_bazel_anatole/dea21c474582f8d9afdfb2cbf2e414cf/external/npm/eslint/index.bzl", line 11, in eslint
nodejs_binary(<5 more arguments>)
rule() can only be called during the loading phase
ERROR: Analysis of target '//:lint' failed; build aborted: Analysis of target '//:lint' failed; build aborted
И я понятия не имею, почему, потому что, если я непосредственно добавлю правило eslint
в мои root BUILD.bazel
, оно не выдаст никакой ошибки (но все еще есть эта проблема **/*.{ts, js}
).
Может быть, есть лучший способ сделать все это, я начинаю с Базеля.