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/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
index 65fc952..d4cb286 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
@@ -160,6 +160,8 @@
 
   public abstract boolean incompatibleNoAttrLicense();
 
+  public abstract boolean incompatibleNoKwargsInBuildFiles();
+
   public abstract boolean incompatibleNoOutputAttrDefault();
 
   public abstract boolean incompatibleNoSupportToolsInActionInputs();
@@ -218,6 +220,7 @@
           .incompatibleExpandDirectories(true)
           .incompatibleNewActionsApi(false)
           .incompatibleNoAttrLicense(true)
+          .incompatibleNoKwargsInBuildFiles(false)
           .incompatibleNoOutputAttrDefault(false)
           .incompatibleNoSupportToolsInActionInputs(false)
           .incompatibleNoTargetOutputGroup(false)
@@ -280,6 +283,8 @@
 
     public abstract Builder incompatibleNewActionsApi(boolean value);
 
+    public abstract Builder incompatibleNoKwargsInBuildFiles(boolean value);
+
     public abstract Builder incompatibleNoAttrLicense(boolean value);
 
     public abstract Builder incompatibleNoOutputAttrDefault(boolean value);
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java b/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
index 8c28293..e53fde0 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
@@ -389,7 +389,7 @@
    * **kwargs. This creates a better separation between code and data.
    */
   public static boolean checkBuildSyntax(
-      List<Statement> statements, final EventHandler eventHandler) {
+      List<Statement> statements, final EventHandler eventHandler, Environment env) {
     // Wrap the boolean inside an array so that the inner class can modify it.
     final boolean[] success = new boolean[] {true};
     // TODO(laurentlb): Merge with the visitor above when possible (i.e. when BUILD files use it).
@@ -442,6 +442,9 @@
                         + "explicitly.");
               }
             }
+            if (env.getSemantics().incompatibleNoKwargsInBuildFiles()) {
+              super.visit(node);
+            }
           }
         };
     checker.visitAll(statements);