Nagelfar Bazel rules
Rules
Providers
Aspects
nagelfar_syntaxdb
load("@rules_tcl//tcl/nagelfar:defs.bzl", "nagelfar_syntaxdb")
nagelfar_syntaxdb(name, srcs)
Wraps a set of Nagelfar syntax database (syntaxdb) files so they can be
attached to a Tcl target via data and picked up by tcl_nagelfar_aspect
and tcl_nagelfar_test when linting that target or any dependent.
Usage:
load("@rules_tcl//tcl:tcl_library.bzl", "tcl_library")
load("@rules_tcl//tcl/nagelfar:nagelfar_syntaxdb.bzl", "nagelfar_syntaxdb")
nagelfar_syntaxdb(
name = "mylib_syntaxdb",
srcs = ["mylib.syntaxdb.tcl"],
)
tcl_library(
name = "mylib",
srcs = ["mylib.tcl"],
data = [":mylib_syntaxdb"],
)
ATTRIBUTES
| Name | Description | Type | Mandatory | Default |
|---|---|---|---|---|
| name | A unique name for this target. | Name | required | |
| srcs | Nagelfar syntax database files. | List of labels | required |
nagelfar_toolchain
load("@rules_tcl//tcl/nagelfar:defs.bzl", "nagelfar_toolchain")
nagelfar_toolchain(name, extra_args, nagelfar, syntaxbuild, syntaxdb)
A toolchain rule for configuring the Nagelfar Tcl syntax checker.
The nagelfar_toolchain rule specifies the Nagelfar script, syntax database files,
and any additional Nagelfar arguments used by tcl_nagelfar_aspect and
tcl_nagelfar_test for static analysis of Tcl code.
The toolchain also generates a syntax database for the ambient tcl_toolchain's
tcllib by running syntaxbuild.tcl under an exec-cfg tcl_binary. That generated
database is automatically appended to syntaxdb and reaches every lint action.
The @nagelfar hub repository (populated by the nagelfar module extension)
exposes the shipped script and syntax databases as labels users combine with
their own files:
load("@rules_tcl//tcl/nagelfar:nagelfar_toolchain.bzl", "nagelfar_toolchain")
nagelfar_toolchain(
name = "nagelfar_toolchain",
nagelfar = "@nagelfar//:nagelfar",
syntaxbuild = "@nagelfar//:syntaxbuild",
syntaxdb = [
"@nagelfar//:syntaxdb",
"//path/to:my_project_syntaxdb.tcl",
],
extra_args = ["-len", "100"],
)
toolchain(
name = "toolchain",
toolchain = ":nagelfar_toolchain",
toolchain_type = "@rules_tcl//tcl/nagelfar:toolchain_type",
)
Register the toolchain in MODULE.bazel:
nagelfar = use_extension("@rules_tcl//tcl/nagelfar:extensions.bzl", "nagelfar")
use_repo(nagelfar, "nagelfar")
register_toolchains("//path/to:toolchain")
ATTRIBUTES
| Name | Description | Type | Mandatory | Default |
|---|---|---|---|---|
| name | A unique name for this target. | Name | required | |
| extra_args | Additional command-line arguments forwarded to nagelfar on every invocation. | List of strings | optional | [] |
| nagelfar | The nagelfar.tcl script. | Label | required | |
| syntaxbuild | The syntaxbuild.tcl script shipped with Nagelfar, used to snapshot the ambient tcllib into a syntax database at toolchain-build time. | Label | required | |
| syntaxdb | Nagelfar syntax database files. The tcllib syntaxdb this toolchain generates for its ambient tcl_toolchain is appended automatically. | List of labels | optional | [] |
tcl_nagelfar_test
load("@rules_tcl//tcl/nagelfar:defs.bzl", "tcl_nagelfar_test")
tcl_nagelfar_test(name, target)
A test rule for performing Nagelfar static analysis on a Tcl target.
Usage:
load("@rules_tcl//tcl/nagelfar:tcl_nagelfar_test.bzl", "tcl_nagelfar_test")
tcl_nagelfar_test(
name = "mylib_nagelfar",
target = ":mylib",
)
ATTRIBUTES
| Name | Description | Type | Mandatory | Default |
|---|---|---|---|---|
| name | A unique name for this target. | Name | required | |
| target | The Tcl target to perform Nagelfar analysis on. | Label | required |
NagelfarSyntaxdbInfo
load("@rules_tcl//tcl/nagelfar:defs.bzl", "NagelfarSyntaxdbInfo")
NagelfarSyntaxdbInfo(files)
A set of Nagelfar syntax database files contributed by a target.
FIELDS
tcl_nagelfar_aspect
load("@rules_tcl//tcl/nagelfar:defs.bzl", "tcl_nagelfar_aspect")
tcl_nagelfar_aspect()
An aspect for performing Nagelfar static analysis on Tcl targets.
The tcl_nagelfar_aspect applies Nagelfar
checks to all Tcl targets in the dependency graph. It also traverses deps
and data (via a required collector aspect) to gather any nagelfar_syntaxdb
targets attached to the graph, and forwards their files to Nagelfar alongside
the toolchain-shipped databases.
Usage:
bazel build //my:target \
--aspects=@rules_tcl//tcl/nagelfar:tcl_nagelfar_aspect.bzl%tcl_nagelfar_aspect \
--output_groups=+tcl_nagelfar_checks
Or configure it in your .bazelrc:
build:nagelfar --aspects=@rules_tcl//tcl/nagelfar:tcl_nagelfar_aspect.bzl%tcl_nagelfar_aspect
build:nagelfar --output_groups=+tcl_nagelfar_checks
Ignoring targets:
To skip Nagelfar for specific targets, add one of these tags:
no_tcl_nagelfarno_nagelfarno_lintnolint
ASPECT ATTRIBUTES
| Name | Type |
|---|---|
| deps | String |
| data | String |
ATTRIBUTES