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

NameDescriptionTypeMandatoryDefault
nameA unique name for this target.Namerequired
srcsNagelfar syntax database files.List of labelsrequired

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

NameDescriptionTypeMandatoryDefault
nameA unique name for this target.Namerequired
extra_argsAdditional command-line arguments forwarded to nagelfar on every invocation.List of stringsoptional[]
nagelfarThe nagelfar.tcl script.Labelrequired
syntaxbuildThe syntaxbuild.tcl script shipped with Nagelfar, used to snapshot the ambient tcllib into a syntax database at toolchain-build time.Labelrequired
syntaxdbNagelfar syntax database files. The tcllib syntaxdb this toolchain generates for its ambient tcl_toolchain is appended automatically.List of labelsoptional[]

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

NameDescriptionTypeMandatoryDefault
nameA unique name for this target.Namerequired
targetThe Tcl target to perform Nagelfar analysis on.Labelrequired

NagelfarSyntaxdbInfo

load("@rules_tcl//tcl/nagelfar:defs.bzl", "NagelfarSyntaxdbInfo")

NagelfarSyntaxdbInfo(files)

A set of Nagelfar syntax database files contributed by a target.

FIELDS

NameDescription
filesDepset[File]: Syntax database files.

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_nagelfar
  • no_nagelfar
  • no_lint
  • nolint

ASPECT ATTRIBUTES

NameType
depsString
dataString

ATTRIBUTES