This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new b88e408de2 ci: improve check_deferrable_default script to cover 
positional variables (#41924)
b88e408de2 is described below

commit b88e408de2743a2fc8343b069bf381974113dbc6
Author: Wei Lee <[email protected]>
AuthorDate: Sun Sep 1 19:16:12 2024 +0800

    ci: improve check_deferrable_default script to cover positional variables 
(#41924)
---
 scripts/ci/pre_commit/check_deferrable_default.py | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/scripts/ci/pre_commit/check_deferrable_default.py 
b/scripts/ci/pre_commit/check_deferrable_default.py
index 8373385f0d..1e1fd9c7a6 100755
--- a/scripts/ci/pre_commit/check_deferrable_default.py
+++ b/scripts/ci/pre_commit/check_deferrable_default.py
@@ -74,14 +74,21 @@ def iter_check_deferrable_default_errors(module_filename: 
str) -> Iterator[str]:
 
     for node in init_method_nodes:
         args = node.args
-        arguments = reversed([*args.args, *args.kwonlyargs])
+        arguments = reversed([*args.args, *args.posonlyargs, *args.kwonlyargs])
         defaults = reversed([*args.defaults, *args.kw_defaults])
-        for argument, default in zip(arguments, defaults):
-            if argument is None or default is None:
+        for argument, default in itertools.zip_longest(arguments, defaults):
+            # argument is not deferrable
+            if argument is None or argument.arg != "deferrable":
                 continue
-            if argument.arg != "deferrable" or 
_is_valid_deferrable_default(default):
+
+            # argument is deferrable, but comes with no default value
+            if default is None:
+                yield f"{module_filename}:{argument.lineno}"
                 continue
-            yield f"{module_filename}:{default.lineno}"
+
+            # argument is deferrable, but the default value is not valid
+            if not _is_valid_deferrable_default(default):
+                yield f"{module_filename}:{default.lineno}"
 
 
 def main() -> int:

Reply via email to