From 234a1754896ce6c513ab89078f96356c695ba6d4 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Sat, 9 Apr 2022 08:57:33 -0600 Subject: [PATCH 1/8] Added rough demonstration for finding missing bzl_library deps. --- test/BUILD | 18 ++++++++++++++++-- test/macro_with_doc.bzl | 9 +++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 test/macro_with_doc.bzl diff --git a/test/BUILD b/test/BUILD index 2a68496ee..d030a1def 100644 --- a/test/BUILD +++ b/test/BUILD @@ -1,4 +1,5 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") +load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") load(":ast_file_tests.bzl", "ast_file_test_suite") load(":coverage_settings_tests.bzl", "coverage_settings_test_suite") load(":debug_settings_tests.bzl", "debug_settings_test_suite") @@ -6,10 +7,10 @@ load(":generated_header_tests.bzl", "generated_header_test_suite") load(":linking_tests.bzl", "linking_test_suite") load(":module_cache_settings_tests.bzl", "module_cache_settings_test_suite") load(":output_file_map_tests.bzl", "output_file_map_test_suite") +load(":pch_output_dir_tests.bzl", "pch_output_dir_test_suite") load(":private_deps_tests.bzl", "private_deps_test_suite") -load(":swift_through_non_swift_tests.bzl", "swift_through_non_swift_test_suite") load(":split_derived_files_tests.bzl", "split_derived_files_test_suite") -load(":pch_output_dir_tests.bzl", "pch_output_dir_test_suite") +load(":swift_through_non_swift_tests.bzl", "swift_through_non_swift_test_suite") licenses(["notice"]) @@ -47,3 +48,16 @@ bzl_library( "//test/rules:starlark_tests_bzls", ], ) + +bzl_library( + name = "macro_with_doc", + srcs = ["macro_with_doc.bzl"], + deps = ["//swift"], +) + +stardoc( + name = "macro_with_doc_stardoc", + out = "macro_with_doc.md_", + input = ":macro_with_doc.bzl", + deps = ["//test:macro_with_doc"], +) diff --git a/test/macro_with_doc.bzl b/test/macro_with_doc.bzl new file mode 100644 index 000000000..a22c14788 --- /dev/null +++ b/test/macro_with_doc.bzl @@ -0,0 +1,9 @@ +load("//swift:swift.bzl", "SwiftInfo") + +def macro_with_doc(name): + """This macro does nothing. + + Args: + name: A `string` value. + """ + return SwiftInfo From 11d40201fe92e6a63f1dd80a4ad0385c137b4f5e Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Sat, 9 Apr 2022 09:19:19 -0600 Subject: [PATCH 2/8] First pass at bzl_test. --- test/BUILD | 29 ++++++++++++++++++----------- test/bzl_test.bzl | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 11 deletions(-) create mode 100644 test/bzl_test.bzl diff --git a/test/BUILD b/test/BUILD index d030a1def..7a7bb8ac9 100644 --- a/test/BUILD +++ b/test/BUILD @@ -1,6 +1,6 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") -load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") load(":ast_file_tests.bzl", "ast_file_test_suite") +load(":bzl_test.bzl", "bzl_test") load(":coverage_settings_tests.bzl", "coverage_settings_test_suite") load(":debug_settings_tests.bzl", "debug_settings_test_suite") load(":generated_header_tests.bzl", "generated_header_test_suite") @@ -49,15 +49,22 @@ bzl_library( ], ) -bzl_library( - name = "macro_with_doc", - srcs = ["macro_with_doc.bzl"], - deps = ["//swift"], +bzl_test( + name = "swift", + bzl_file = "//swift:swift.bzl", + bzl_target = "//swift", + symbol = "SwiftInfo", ) -stardoc( - name = "macro_with_doc_stardoc", - out = "macro_with_doc.md_", - input = ":macro_with_doc.bzl", - deps = ["//test:macro_with_doc"], -) +# bzl_library( +# name = "macro_with_doc", +# srcs = ["macro_with_doc.bzl"], +# deps = ["//swift"], +# ) + +# stardoc( +# name = "macro_with_doc_stardoc", +# out = "macro_with_doc.md_", +# input = ":macro_with_doc.bzl", +# deps = ["//test:macro_with_doc"], +# ) diff --git a/test/bzl_test.bzl b/test/bzl_test.bzl new file mode 100644 index 000000000..e13d100d0 --- /dev/null +++ b/test/bzl_test.bzl @@ -0,0 +1,41 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") +load("@bazel_skylib//rules:write_file.bzl", "write_file") +load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") + +def bzl_test(name, bzl_file, bzl_target, symbol): + bzl_gen_file_name = name + "_bzl_file" + write_file( + name = bzl_gen_file_name, + out = name + "_generated.bzl", + content = [ + "load(\"{bzl_file}\", \"{symbol}\")".format( + bzl_file = bzl_file, + symbol = symbol, + ), + "", + "def macro_with_doc(name):", + " \"\"\"This macro does nothing.", + "", + " Args:", + " name: A `string` value.", + " \"\"\"", + " return {symbol}".format( + symbol = symbol, + ), + ], + ) + + bzl_gen_lib_name = name + "_bzl_lib" + bzl_library( + name = bzl_gen_lib_name, + srcs = [bzl_gen_file_name], + deps = [bzl_target], + ) + + stardoc_name = name + "_stardoc" + stardoc( + name = stardoc_name, + out = stardoc_name + ".md_", + input = bzl_gen_file_name, + deps = [bzl_gen_lib_name], + ) From 565a89b07cd0b27f517d3c38aca4b0e8d126acf4 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Sat, 9 Apr 2022 09:49:01 -0600 Subject: [PATCH 3/8] bzl_test is not quite working. The generated input file is being resolved to a target name instead of a .bzl filename. --- test/BUILD | 28 +++++++++++++++------------- test/bzl_test.bzl | 35 ++++++++++++++++++++++++----------- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/test/BUILD b/test/BUILD index 7a7bb8ac9..e1d5bc781 100644 --- a/test/BUILD +++ b/test/BUILD @@ -1,4 +1,5 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") +load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") load(":ast_file_tests.bzl", "ast_file_test_suite") load(":bzl_test.bzl", "bzl_test") load(":coverage_settings_tests.bzl", "coverage_settings_test_suite") @@ -50,21 +51,22 @@ bzl_library( ) bzl_test( - name = "swift", + name = "swift_bzl_test", bzl_file = "//swift:swift.bzl", bzl_target = "//swift", symbol = "SwiftInfo", ) -# bzl_library( -# name = "macro_with_doc", -# srcs = ["macro_with_doc.bzl"], -# deps = ["//swift"], -# ) - -# stardoc( -# name = "macro_with_doc_stardoc", -# out = "macro_with_doc.md_", -# input = ":macro_with_doc.bzl", -# deps = ["//test:macro_with_doc"], -# ) +bzl_library( + name = "chicken", + srcs = ["macro_with_doc.bzl"], + deps = ["//swift"], +) + +stardoc( + name = "chicken_stardoc", + out = "chicken.md_", + input = ":macro_with_doc.bzl", + # deps = ["//test:chicken"], + deps = [":chicken"], +) diff --git a/test/bzl_test.bzl b/test/bzl_test.bzl index e13d100d0..de56c17f8 100644 --- a/test/bzl_test.bzl +++ b/test/bzl_test.bzl @@ -3,10 +3,18 @@ load("@bazel_skylib//rules:write_file.bzl", "write_file") load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") def bzl_test(name, bzl_file, bzl_target, symbol): - bzl_gen_file_name = name + "_bzl_file" + """Provides build-time assurances that `bzl_library` declarations exist and are referenced properly. + + Args: + name: + + Returns: + """ + macro_name = name + "_macro" + macro_filename = macro_name + ".bzl" write_file( - name = bzl_gen_file_name, - out = name + "_generated.bzl", + name = macro_name, + out = macro_filename, content = [ "load(\"{bzl_file}\", \"{symbol}\")".format( bzl_file = bzl_file, @@ -25,17 +33,22 @@ def bzl_test(name, bzl_file, bzl_target, symbol): ], ) - bzl_gen_lib_name = name + "_bzl_lib" + macro_lib_name = macro_name + "_lib" bzl_library( - name = bzl_gen_lib_name, - srcs = [bzl_gen_file_name], + name = macro_lib_name, + # srcs = [macro_name], + srcs = [macro_filename], deps = [bzl_target], ) - stardoc_name = name + "_stardoc" + # DEBUG BEGIN + print("*** CHUCK macro_filename: ", macro_filename) + + # DEBUG END stardoc( - name = stardoc_name, - out = stardoc_name + ".md_", - input = bzl_gen_file_name, - deps = [bzl_gen_lib_name], + name = name, + out = macro_lib_name + ".md_", + input = macro_filename, + # input = ":" + macro_filename, + deps = [macro_lib_name], ) From c2ed0417bc86d873fc24f448e417fda5dfcb8c44 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Sat, 9 Apr 2022 10:05:32 -0600 Subject: [PATCH 4/8] bzl_test works if the macro source file is passed as a src. --- test/BUILD | 30 +++++---- test/bzl_test.bzl | 62 +++++++++---------- ...macro_with_doc.bzl => swift_bzl_macro.bzl} | 0 3 files changed, 42 insertions(+), 50 deletions(-) rename test/{macro_with_doc.bzl => swift_bzl_macro.bzl} (100%) diff --git a/test/BUILD b/test/BUILD index e1d5bc781..1bd001c85 100644 --- a/test/BUILD +++ b/test/BUILD @@ -1,5 +1,4 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") -load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") load(":ast_file_tests.bzl", "ast_file_test_suite") load(":bzl_test.bzl", "bzl_test") load(":coverage_settings_tests.bzl", "coverage_settings_test_suite") @@ -52,21 +51,20 @@ bzl_library( bzl_test( name = "swift_bzl_test", - bzl_file = "//swift:swift.bzl", - bzl_target = "//swift", - symbol = "SwiftInfo", -) - -bzl_library( - name = "chicken", - srcs = ["macro_with_doc.bzl"], + src = "swift_bzl_macro.bzl", deps = ["//swift"], ) -stardoc( - name = "chicken_stardoc", - out = "chicken.md_", - input = ":macro_with_doc.bzl", - # deps = ["//test:chicken"], - deps = [":chicken"], -) +# bzl_library( +# name = "chicken", +# srcs = ["swift_bzl_macro.bzl"], +# deps = ["//swift"], +# ) + +# stardoc( +# name = "chicken_stardoc", +# out = "chicken.md_", +# input = ":swift_bzl_macro.bzl", +# # deps = ["//test:chicken"], +# deps = [":chicken"], +# ) diff --git a/test/bzl_test.bzl b/test/bzl_test.bzl index de56c17f8..ba0a8f6df 100644 --- a/test/bzl_test.bzl +++ b/test/bzl_test.bzl @@ -1,8 +1,8 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") -load("@bazel_skylib//rules:write_file.bzl", "write_file") load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") -def bzl_test(name, bzl_file, bzl_target, symbol): +# def bzl_test(name, bzl_file, bzl_target, symbol): +def bzl_test(name, src, deps): """Provides build-time assurances that `bzl_library` declarations exist and are referenced properly. Args: @@ -10,45 +10,39 @@ def bzl_test(name, bzl_file, bzl_target, symbol): Returns: """ - macro_name = name + "_macro" - macro_filename = macro_name + ".bzl" - write_file( - name = macro_name, - out = macro_filename, - content = [ - "load(\"{bzl_file}\", \"{symbol}\")".format( - bzl_file = bzl_file, - symbol = symbol, - ), - "", - "def macro_with_doc(name):", - " \"\"\"This macro does nothing.", - "", - " Args:", - " name: A `string` value.", - " \"\"\"", - " return {symbol}".format( - symbol = symbol, - ), - ], - ) + # macro_name = name + "_macro" + # macro_filename = macro_name + ".bzl" + # write_file( + # name = macro_name, + # out = macro_filename, + # content = [ + # "load(\"{bzl_file}\", \"{symbol}\")".format( + # bzl_file = bzl_file, + # symbol = symbol, + # ), + # "", + # "def macro_with_doc(name):", + # " \"\"\"This macro does nothing.", + # "", + # " Args:", + # " name: A `string` value.", + # " \"\"\"", + # " return {symbol}".format( + # symbol = symbol, + # ), + # ], + # ) - macro_lib_name = macro_name + "_lib" + macro_lib_name = name + "_macro_lib" bzl_library( name = macro_lib_name, - # srcs = [macro_name], - srcs = [macro_filename], - deps = [bzl_target], + srcs = [src], + deps = deps, ) - # DEBUG BEGIN - print("*** CHUCK macro_filename: ", macro_filename) - - # DEBUG END stardoc( name = name, out = macro_lib_name + ".md_", - input = macro_filename, - # input = ":" + macro_filename, + input = src, deps = [macro_lib_name], ) diff --git a/test/macro_with_doc.bzl b/test/swift_bzl_macro.bzl similarity index 100% rename from test/macro_with_doc.bzl rename to test/swift_bzl_macro.bzl From e4a6761c0d942648b4f2c48f8d8359cf6460005a Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Sat, 9 Apr 2022 11:05:30 -0600 Subject: [PATCH 5/8] Clean up. --- test/BUILD | 14 -------------- test/bzl_test.bzl | 42 ++++++++++++++++------------------------ test/swift_bzl_macro.bzl | 5 +++++ 3 files changed, 22 insertions(+), 39 deletions(-) diff --git a/test/BUILD b/test/BUILD index 1bd001c85..0a005c7ce 100644 --- a/test/BUILD +++ b/test/BUILD @@ -54,17 +54,3 @@ bzl_test( src = "swift_bzl_macro.bzl", deps = ["//swift"], ) - -# bzl_library( -# name = "chicken", -# srcs = ["swift_bzl_macro.bzl"], -# deps = ["//swift"], -# ) - -# stardoc( -# name = "chicken_stardoc", -# out = "chicken.md_", -# input = ":swift_bzl_macro.bzl", -# # deps = ["//test:chicken"], -# deps = [":chicken"], -# ) diff --git a/test/bzl_test.bzl b/test/bzl_test.bzl index ba0a8f6df..79113310e 100644 --- a/test/bzl_test.bzl +++ b/test/bzl_test.bzl @@ -1,38 +1,30 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") -# def bzl_test(name, bzl_file, bzl_target, symbol): def bzl_test(name, src, deps): """Provides build-time assurances that `bzl_library` declarations exist and are referenced properly. + This macro relies upon Stardoc's ability to traverse `bzl_library` + dependencies. If a Starlark dependency is loaded, but not specified as a + dependency, the Stardoc utility will fail with a reasonably helpful error + message. Interestingly, the Stardoc utility does not apply the same rigor + to files that are directly specifed to it. + + Another point worth metioning is that the `src` file cannot be generated + for this macro to work. If one tries to use a generated file, the `input` + for the `stardoc` rule will resolve to the label for the generated file + which will cause the Stardoc utility to not find the file. Specifying the + input in different ways (i.e. filename vs target name) did not seem to + affect this behavior. + Args: - name: + name: The name of the build target. + src: A non-generated Starlark file that loads the `bzl_library` that is + being checked. + deps: A `list` of deps for the Starlark file. Returns: """ - # macro_name = name + "_macro" - # macro_filename = macro_name + ".bzl" - # write_file( - # name = macro_name, - # out = macro_filename, - # content = [ - # "load(\"{bzl_file}\", \"{symbol}\")".format( - # bzl_file = bzl_file, - # symbol = symbol, - # ), - # "", - # "def macro_with_doc(name):", - # " \"\"\"This macro does nothing.", - # "", - # " Args:", - # " name: A `string` value.", - # " \"\"\"", - # " return {symbol}".format( - # symbol = symbol, - # ), - # ], - # ) - macro_lib_name = name + "_macro_lib" bzl_library( name = macro_lib_name, diff --git a/test/swift_bzl_macro.bzl b/test/swift_bzl_macro.bzl index a22c14788..59983cbb7 100644 --- a/test/swift_bzl_macro.bzl +++ b/test/swift_bzl_macro.bzl @@ -1,3 +1,8 @@ +"""Macro used with bzl_test + +For more information, please see `bzl_test.bzl`. +""" + load("//swift:swift.bzl", "SwiftInfo") def macro_with_doc(name): From 44a2844d081a9698ead2c04d6dc2d15faf32a500 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Sat, 9 Apr 2022 11:10:18 -0600 Subject: [PATCH 6/8] Revert Buildifier changes. --- test/BUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/BUILD b/test/BUILD index 0a005c7ce..98ccc5fce 100644 --- a/test/BUILD +++ b/test/BUILD @@ -1,16 +1,16 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") load(":ast_file_tests.bzl", "ast_file_test_suite") -load(":bzl_test.bzl", "bzl_test") load(":coverage_settings_tests.bzl", "coverage_settings_test_suite") load(":debug_settings_tests.bzl", "debug_settings_test_suite") load(":generated_header_tests.bzl", "generated_header_test_suite") load(":linking_tests.bzl", "linking_test_suite") load(":module_cache_settings_tests.bzl", "module_cache_settings_test_suite") load(":output_file_map_tests.bzl", "output_file_map_test_suite") -load(":pch_output_dir_tests.bzl", "pch_output_dir_test_suite") load(":private_deps_tests.bzl", "private_deps_test_suite") -load(":split_derived_files_tests.bzl", "split_derived_files_test_suite") load(":swift_through_non_swift_tests.bzl", "swift_through_non_swift_test_suite") +load(":split_derived_files_tests.bzl", "split_derived_files_test_suite") +load(":pch_output_dir_tests.bzl", "pch_output_dir_test_suite") +load(":bzl_test.bzl", "bzl_test") licenses(["notice"]) From 2a0e8b25adb4a3fee462050b632807d3d6d5f9ee Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Sat, 9 Apr 2022 11:37:41 -0600 Subject: [PATCH 7/8] Fix linter issues. --- test/bzl_test.bzl | 2 ++ test/swift_bzl_macro.bzl | 1 + 2 files changed, 3 insertions(+) diff --git a/test/bzl_test.bzl b/test/bzl_test.bzl index 79113310e..42dc4da6b 100644 --- a/test/bzl_test.bzl +++ b/test/bzl_test.bzl @@ -1,3 +1,5 @@ +"""Macro for Ensuring Starlark Dependencies are Specified Properly""" + load("@bazel_skylib//:bzl_library.bzl", "bzl_library") load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") diff --git a/test/swift_bzl_macro.bzl b/test/swift_bzl_macro.bzl index 59983cbb7..f04acb162 100644 --- a/test/swift_bzl_macro.bzl +++ b/test/swift_bzl_macro.bzl @@ -11,4 +11,5 @@ def macro_with_doc(name): Args: name: A `string` value. """ + print("Just using the name variable.", name) return SwiftInfo From c38228e950fdd87cc93da5b712009ae19c9ca6d9 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Sun, 10 Apr 2022 07:14:53 -0600 Subject: [PATCH 8/8] Remove print function. --- test/swift_bzl_macro.bzl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/swift_bzl_macro.bzl b/test/swift_bzl_macro.bzl index f04acb162..77cb11abb 100644 --- a/test/swift_bzl_macro.bzl +++ b/test/swift_bzl_macro.bzl @@ -11,5 +11,6 @@ def macro_with_doc(name): Args: name: A `string` value. """ - print("Just using the name variable.", name) + if name == None: + return None return SwiftInfo