Introduce flag --incompatible_no_kwargs_in_build_files Implements https://github.com/bazelbuild/bazel/issues/8021 When it is enabled, **kwargs and *args are not allowed in BUILD files. Without this flag, the ban on **kwarg and *args is not fully working. RELNOTES: New flag `--incompatible_no_kwargs_in_build_files`. See https://github.com/bazelbuild/bazel/issues/8021 PiperOrigin-RevId: 243325744
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java index 623206c..2b533f9 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -148,6 +148,7 @@ "--incompatible_expand_directories=" + rand.nextBoolean(), "--incompatible_new_actions_api=" + rand.nextBoolean(), "--incompatible_no_attr_license=" + rand.nextBoolean(), + "--incompatible_no_kwargs_in_build_files=" + rand.nextBoolean(), "--incompatible_no_output_attr_default=" + rand.nextBoolean(), "--incompatible_no_support_tools_in_action_inputs=" + rand.nextBoolean(), "--incompatible_no_target_output_group=" + rand.nextBoolean(), @@ -192,6 +193,7 @@ .incompatibleExpandDirectories(rand.nextBoolean()) .incompatibleNewActionsApi(rand.nextBoolean()) .incompatibleNoAttrLicense(rand.nextBoolean()) + .incompatibleNoKwargsInBuildFiles(rand.nextBoolean()) .incompatibleNoOutputAttrDefault(rand.nextBoolean()) .incompatibleNoSupportToolsInActionInputs(rand.nextBoolean()) .incompatibleNoTargetOutputGroup(rand.nextBoolean())
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java index df0847c..78700ea 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
@@ -708,4 +708,17 @@ new BuildTest() .testIfErrorContains("*args arguments are not allowed in BUILD files", "func(*array)"); } + + @Test + public void testIncompatibleKwargsInBuildFiles() throws Exception { + new BuildTest("--incompatible_no_kwargs_in_build_files=true") + .testIfErrorContains( + "kwargs arguments are not allowed in BUILD files", "len(dict(**{'a': 1}))"); + + new BuildTest("--incompatible_no_kwargs_in_build_files=false") + .testStatement("len(dict(**{'a': 1}))", 1); + + new SkylarkTest("--incompatible_no_kwargs_in_build_files") + .testStatement("len(dict(**{'a': 1}))", 1); + } }
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java b/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java index 88bc26e..365ba1d 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java
@@ -201,7 +201,7 @@ return BuildFileAST.eval(env, input); } BuildFileAST ast = BuildFileAST.parseString(env.getEventHandler(), input); - ValidationEnvironment.checkBuildSyntax(ast.getStatements(), env.getEventHandler()); + ValidationEnvironment.checkBuildSyntax(ast.getStatements(), env.getEventHandler(), env); return ast.eval(env); }