Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion BUILD
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
load("@io_bazel_rules_go//go:def.bzl", "gazelle", "go_prefix", "go_path")
load("@io_bazel_rules_go//go:def.bzl", "gazelle", "go_prefix", "go_path", "go_vet_test")
load("@io_bazel_rules_go//go/private:lines_sorted_test.bzl", "lines_sorted_test")
load("@io_bazel_rules_go//proto:go_proto_library.bzl", "go_google_protobuf")

Expand Down Expand Up @@ -46,3 +46,8 @@ go_path(
],
tags = ["manual"],
)

go_vet_test(
name = "vet",
data = [":all_srcs"]
)
8 changes: 8 additions & 0 deletions go/def.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ load("@io_bazel_rules_go//go/private:wrappers.bzl",
load("@io_bazel_rules_go//go/private:path.bzl",
_go_path = "go_path",
)
load("@io_bazel_rules_go//go/private:tools.bzl",
_go_vet_test = "go_vet_test",
)

GoLibrary = _GoLibrary
"""
Expand Down Expand Up @@ -126,6 +129,11 @@ go_path = _go_path
"mode": attr.string(default="link", values=["link", "copy"]) # Whether to copy files or produce soft links
"""

go_vet_test = _go_vet_test
"""
go_vet_test
"""


# Compatability shims
def cgo_genrule(name, tags=[], **kwargs):
Expand Down
69 changes: 69 additions & 0 deletions go/private/tools.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Copyright 2014 The Bazel Authors. All rights reserved.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/2014/2017/

Will go_fmt_test and go_fix_test also be in this file in the future? tools.bzl is an unfortunately generic name, even though it is accurate. Maybe go_tools.bzl or tool_tests.bzl would be better.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not all things would be tests.
I was going to stick all the tools in one file, but how about this structure, a tools directory with a bzl file per tool, so go/private/tools/vet.bzl

#
# 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.

load("@io_bazel_rules_go//go/private:providers.bzl", "GoPath")
load("@io_bazel_rules_go//go/private:common.bzl", "get_go_toolchain")

def _go_vet_generate_impl(ctx):
print("""
EXPERIMENTAL: the go_vet_test rule is still very experimental
Please do not rely on it for production use, but feel free to use it and file issues
""")
go_toolchain = get_go_toolchain(ctx)
script_file = ctx.new_file(ctx.label.name+".bash")
gopath = []
files = ctx.files.data

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In #726, they copied lists from ctx.attr (as ctx.attr.linkopts[:]). That seems to imply ctx.files.data will be immutable in the future.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed

files += [go_toolchain.go]
gopath = []
packages = []
for data in ctx.attr.data:
entry = data[GoPath]
gopath += [entry.gopath]
packages += [package.dir for package in entry.packages]
ctx.file_action(output=script_file, executable=True, content="""
export GOROOT="{goroot}"
export GOPATH={gopath}
{go} tool vet {packages}
""".format(
go=go_toolchain.go.path,
goroot=go_toolchain.root.path,
gopath=":".join(['$(realpath "{}")'.format(entry) for entry in gopath]),
packages=" ".join(packages),
))
return struct(
files = depset([script_file]),
runfiles = ctx.runfiles(files, collect_data = True),
)

_go_vet_generate = rule(
_go_vet_generate_impl,
attrs = {
"data": attr.label_list(providers=[GoPath], cfg = "data"),
"_go_toolchain": attr.label(default = Label("@io_bazel_rules_go_toolchain//:go_toolchain")),
},
)

def go_vet_test(name, data, **kwargs):
script_name = "generate_"+name
_go_vet_generate(
name=script_name,
data=data,
tags = ["manual"],
)
native.sh_test(
name=name,
srcs=[script_name],
data=data,
**kwargs
)