ninja_syntax: Disallow positional parameters in BuildAction

Change-Id: I59b24b86acb287b2c4c490096cb1b3f9590cf821
diff --git a/ninja/ninja_syntax.py b/ninja/ninja_syntax.py
index 2929c2f..e7c5c03 100644
--- a/ninja/ninja_syntax.py
+++ b/ninja/ninja_syntax.py
@@ -137,12 +137,14 @@
     """
 
     def __init__(self,
+                 *args,
                  rule: str,
                  output: list[str] = None,
                  inputs: list[str] = None,
                  implicits: list[str] = None,
                  order_only: list[str] = None,
                  variables: list[tuple[(str, str)]] = ()):
+        assert not args, "parameters must be passed as keywords"
         self.output = self._as_list(output)
         self.rule = rule
         self.inputs = self._as_list(inputs)
diff --git a/ninja/test_ninja_syntax.py b/ninja/test_ninja_syntax.py
index 528807d..c8b1f14 100644
--- a/ninja/test_ninja_syntax.py
+++ b/ninja/test_ninja_syntax.py
@@ -100,6 +100,11 @@
         with self.assertRaises(BuildActionException):
             next(build.stream())
 
+    def test_nonkeyword_inputs(self):
+        """Verify that non-keyword args are rejected."""
+        with self.assertRaises(TypeError):
+            BuildAction("out")
+
     def test_inputs(self):
         build = BuildAction(output="out",
                             rule="cat",