blob: 3baf1174a50ad3a661f491579c3b375bcc5281c4 [file] [log] [blame]
# Copyright 2018 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
DEFAULT_NOGO = "@io_bazel_rules_go//:default_nogo"
NOGO_DEFAULT_INCLUDES = ["@@//:__subpackages__"]
NOGO_DEFAULT_EXCLUDES = []
# repr(Label(...)) does not emit a canonical label literal.
def _label_repr(label):
return "Label(\"{}\")".format(label)
def _scope_list_repr(scopes):
if scopes == ["all"]:
return repr(["all"])
return "[" + ", ".join([_label_repr(Label(l)) for l in scopes]) + "]"
def _go_register_nogo_impl(ctx):
ctx.template(
"BUILD.bazel",
Label("//go/private:BUILD.nogo.bazel"),
substitutions = {
"{{nogo}}": ctx.attr.nogo,
},
executable = False,
)
ctx.file(
"scope.bzl",
"""
INCLUDES = {includes}
EXCLUDES = {excludes}
""".format(
includes = _scope_list_repr(ctx.attr.includes),
excludes = _scope_list_repr(ctx.attr.excludes),
),
executable = False,
)
# go_register_nogo creates a repository with an alias that points
# to the nogo rule that should be used globally by go rules in the workspace.
# This may be called automatically by go_rules_dependencies or by
# go_register_toolchains.
# With Bzlmod, it is created by the go_sdk extension.
go_register_nogo = repository_rule(
_go_register_nogo_impl,
attrs = {
"nogo": attr.string(mandatory = True),
# Special sentinel value used to let nogo run on all targets when using
# WORKSPACE, for backwards compatibility.
"includes": attr.string_list(default = ["all"]),
"excludes": attr.string_list(),
},
)
def go_register_nogo_wrapper(nogo, includes = NOGO_DEFAULT_INCLUDES, excludes = NOGO_DEFAULT_EXCLUDES):
"""See go/nogo.rst"""
go_register_nogo(
name = "io_bazel_rules_nogo",
nogo = nogo,
includes = includes,
excludes = excludes,
)