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

uranusjr 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 762235fd77 Add pre-commit hook for custom_operator_name (#25786)
762235fd77 is described below

commit 762235fd775da5a421c740a5c7be36c5f3c76d07
Author: Tzu-ping Chung <[email protected]>
AuthorDate: Fri Aug 19 12:11:02 2022 +0800

    Add pre-commit hook for custom_operator_name (#25786)
---
 .pre-commit-config.yaml                            |   6 +
 STATIC_CODE_CHECKS.rst                             |   2 +
 airflow/providers/docker/decorators/docker.py      |   2 +
 dev/breeze/src/airflow_breeze/pre_commit_ids.py    |   1 +
 .../howto/create-custom-decorator.rst              |   4 +
 images/breeze/output-commands-hash.txt             |   2 +-
 images/breeze/output_static-checks.svg             | 236 +++++++++++----------
 ...it_decorator_operator_implements_custom_name.py |  60 ++++++
 8 files changed, 196 insertions(+), 117 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index e64c31465e..4644bf195a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -506,6 +506,12 @@ repos:
           (?x)
           ^airflow/providers/.*\.py$
         exclude: ^airflow/_vendor/
+      - id: check-decorated-operator-implements-custom-name
+        name: Check @task decorator implements custom_operator_name
+        language: python
+        entry: 
./scripts/ci/pre_commit/pre_commit_decorator_operator_implements_custom_name.py
+        pass_filenames: true
+        files: ^airflow/.*\.py$
       - id: check-provide-create-sessions-imports
         language: pygrep
         name: Check provide_session and create_session imports
diff --git a/STATIC_CODE_CHECKS.rst b/STATIC_CODE_CHECKS.rst
index ca386413b3..fb6b92be86 100644
--- a/STATIC_CODE_CHECKS.rst
+++ b/STATIC_CODE_CHECKS.rst
@@ -157,6 +157,8 @@ require Breeze Docker image to be build locally.
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | check-daysago-import-from-utils                        | Make sure days_ago 
is imported from airflow.utils.dates          |         |
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
+| check-decorated-operator-implements-custom-name        | Check @task 
decorator implements custom_operator_name            |         |
++--------------------------------------------------------+------------------------------------------------------------------+---------+
 | check-docstring-param-types                            | Check that 
docstrings do not specify param types                 |         |
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | check-example-dags-urls                                | Check that example 
dags url include provider versions            |         |
diff --git a/airflow/providers/docker/decorators/docker.py 
b/airflow/providers/docker/decorators/docker.py
index b07bb6cdff..bfd2b4db5d 100644
--- a/airflow/providers/docker/decorators/docker.py
+++ b/airflow/providers/docker/decorators/docker.py
@@ -62,6 +62,8 @@ class _DockerDecoratedOperator(DecoratedOperator, 
DockerOperator):
         Defaults to False.
     """
 
+    custom_operator_name = "@task.docker"
+
     template_fields: Sequence[str] = ('op_args', 'op_kwargs')
 
     # since we won't mutate the arguments, we should just do the shallow copy
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py 
b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index a0a0970cb7..ac7d2ca684 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -35,6 +35,7 @@ PRE_COMMIT_LIST = [
     'check-builtin-literals',
     'check-changelog-has-no-duplicates',
     'check-daysago-import-from-utils',
+    'check-decorated-operator-implements-custom-name',
     'check-docstring-param-types',
     'check-example-dags-urls',
     'check-executables-have-shebangs',
diff --git a/docs/apache-airflow/howto/create-custom-decorator.rst 
b/docs/apache-airflow/howto/create-custom-decorator.rst
index 72c5bad658..66d2c4a07f 100644
--- a/docs/apache-airflow/howto/create-custom-decorator.rst
+++ b/docs/apache-airflow/howto/create-custom-decorator.rst
@@ -31,6 +31,10 @@ tasks. The steps to create and register ``@task.foo`` are:
     ``airflow.decorators.base.DecoratedOperator``, Airflow will supply much of 
the needed functionality required
     to treat your new class as a taskflow native class.
 
+    You should also override the ``custom_operator_name`` attribute to provide 
a custom name for the task. For
+    example, ``_DockerDecoratedOperator`` in the 
``apache-airflow-providers-docker`` provider sets this to
+    ``@task.docker`` to indicate the decorator name it implements.
+
 2. Create a ``foo_task`` function
 
     Once you have your decorated class, create a function like this, to convert
diff --git a/images/breeze/output-commands-hash.txt 
b/images/breeze/output-commands-hash.txt
index af6780245b..8af15a6422 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -54,7 +54,7 @@ setup:params:bc6b726d05240c22ac8522edc4a200ee
 setup:short_help:37a6259cc0c1dae299a7866489dff0bd
 shell:7baeb98c0103c594502ccf3d32ae24c6
 start-airflow:3e793b11dc2158c54bfc189bfe20d6f2
-static-checks:03e96245e60c225ed94514ad7b42ceb0
+static-checks:a86b25f9281c47abf362a221b316c7a2
 stop:8ebd8a42f1003495d37b884de5ac7ce6
 testing:chain:68934a3e9455fa72420237eb05902327
 testing:commands:c56d4fed05849ebfca609bd725200582
diff --git a/images/breeze/output_static-checks.svg 
b/images/breeze/output_static-checks.svg
index b9f4790fd2..da385d5682 100644
--- a/images/breeze/output_static-checks.svg
+++ b/images/breeze/output_static-checks.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1294.3999999999999" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 1318.8" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -19,245 +19,249 @@
         font-weight: 700;
     }
 
-    .terminal-840943373-matrix {
+    .terminal-319809203-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-840943373-title {
+    .terminal-319809203-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-840943373-r1 { fill: #c5c8c6;font-weight: bold }
-.terminal-840943373-r2 { fill: #c5c8c6 }
-.terminal-840943373-r3 { fill: #d0b344;font-weight: bold }
-.terminal-840943373-r4 { fill: #868887 }
-.terminal-840943373-r5 { fill: #68a0b3;font-weight: bold }
-.terminal-840943373-r6 { fill: #98a84b;font-weight: bold }
-.terminal-840943373-r7 { fill: #8d7b39 }
+    .terminal-319809203-r1 { fill: #c5c8c6;font-weight: bold }
+.terminal-319809203-r2 { fill: #c5c8c6 }
+.terminal-319809203-r3 { fill: #d0b344;font-weight: bold }
+.terminal-319809203-r4 { fill: #868887 }
+.terminal-319809203-r5 { fill: #68a0b3;font-weight: bold }
+.terminal-319809203-r6 { fill: #98a84b;font-weight: bold }
+.terminal-319809203-r7 { fill: #8d7b39 }
     </style>
 
     <defs>
-    <clipPath id="terminal-840943373-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1243.3999999999999" />
+    <clipPath id="terminal-319809203-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="1267.8" />
     </clipPath>
-    <clipPath id="terminal-840943373-line-0">
+    <clipPath id="terminal-319809203-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-1">
+<clipPath id="terminal-319809203-line-1">
     <rect x="0" y="25.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-2">
+<clipPath id="terminal-319809203-line-2">
     <rect x="0" y="50.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-3">
+<clipPath id="terminal-319809203-line-3">
     <rect x="0" y="74.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-4">
+<clipPath id="terminal-319809203-line-4">
     <rect x="0" y="99.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-5">
+<clipPath id="terminal-319809203-line-5">
     <rect x="0" y="123.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-6">
+<clipPath id="terminal-319809203-line-6">
     <rect x="0" y="147.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-7">
+<clipPath id="terminal-319809203-line-7">
     <rect x="0" y="172.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-8">
+<clipPath id="terminal-319809203-line-8">
     <rect x="0" y="196.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-9">
+<clipPath id="terminal-319809203-line-9">
     <rect x="0" y="221.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-10">
+<clipPath id="terminal-319809203-line-10">
     <rect x="0" y="245.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-11">
+<clipPath id="terminal-319809203-line-11">
     <rect x="0" y="269.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-12">
+<clipPath id="terminal-319809203-line-12">
     <rect x="0" y="294.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-13">
+<clipPath id="terminal-319809203-line-13">
     <rect x="0" y="318.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-14">
+<clipPath id="terminal-319809203-line-14">
     <rect x="0" y="343.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-15">
+<clipPath id="terminal-319809203-line-15">
     <rect x="0" y="367.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-16">
+<clipPath id="terminal-319809203-line-16">
     <rect x="0" y="391.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-17">
+<clipPath id="terminal-319809203-line-17">
     <rect x="0" y="416.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-18">
+<clipPath id="terminal-319809203-line-18">
     <rect x="0" y="440.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-19">
+<clipPath id="terminal-319809203-line-19">
     <rect x="0" y="465.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-20">
+<clipPath id="terminal-319809203-line-20">
     <rect x="0" y="489.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-21">
+<clipPath id="terminal-319809203-line-21">
     <rect x="0" y="513.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-22">
+<clipPath id="terminal-319809203-line-22">
     <rect x="0" y="538.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-23">
+<clipPath id="terminal-319809203-line-23">
     <rect x="0" y="562.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-24">
+<clipPath id="terminal-319809203-line-24">
     <rect x="0" y="587.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-25">
+<clipPath id="terminal-319809203-line-25">
     <rect x="0" y="611.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-26">
+<clipPath id="terminal-319809203-line-26">
     <rect x="0" y="635.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-27">
+<clipPath id="terminal-319809203-line-27">
     <rect x="0" y="660.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-28">
+<clipPath id="terminal-319809203-line-28">
     <rect x="0" y="684.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-29">
+<clipPath id="terminal-319809203-line-29">
     <rect x="0" y="709.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-30">
+<clipPath id="terminal-319809203-line-30">
     <rect x="0" y="733.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-31">
+<clipPath id="terminal-319809203-line-31">
     <rect x="0" y="757.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-32">
+<clipPath id="terminal-319809203-line-32">
     <rect x="0" y="782.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-33">
+<clipPath id="terminal-319809203-line-33">
     <rect x="0" y="806.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-34">
+<clipPath id="terminal-319809203-line-34">
     <rect x="0" y="831.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-35">
+<clipPath id="terminal-319809203-line-35">
     <rect x="0" y="855.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-36">
+<clipPath id="terminal-319809203-line-36">
     <rect x="0" y="879.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-37">
+<clipPath id="terminal-319809203-line-37">
     <rect x="0" y="904.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-38">
+<clipPath id="terminal-319809203-line-38">
     <rect x="0" y="928.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-39">
+<clipPath id="terminal-319809203-line-39">
     <rect x="0" y="953.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-40">
+<clipPath id="terminal-319809203-line-40">
     <rect x="0" y="977.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-41">
+<clipPath id="terminal-319809203-line-41">
     <rect x="0" y="1001.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-42">
+<clipPath id="terminal-319809203-line-42">
     <rect x="0" y="1026.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-43">
+<clipPath id="terminal-319809203-line-43">
     <rect x="0" y="1050.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-44">
+<clipPath id="terminal-319809203-line-44">
     <rect x="0" y="1075.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-45">
+<clipPath id="terminal-319809203-line-45">
     <rect x="0" y="1099.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-46">
+<clipPath id="terminal-319809203-line-46">
     <rect x="0" y="1123.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-47">
+<clipPath id="terminal-319809203-line-47">
     <rect x="0" y="1148.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-48">
+<clipPath id="terminal-319809203-line-48">
     <rect x="0" y="1172.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-840943373-line-49">
+<clipPath id="terminal-319809203-line-49">
     <rect x="0" y="1197.1" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="terminal-319809203-line-50">
+    <rect x="0" y="1221.5" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="1292.4" rx="8"/><text 
class="terminal-840943373-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;static-checks</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="1316.8" rx="8"/><text 
class="terminal-319809203-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;static-checks</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
         
-    <g transform="translate(9, 41)" 
clip-path="url(#terminal-840943373-clip-terminal)">
+    <g transform="translate(9, 41)" 
clip-path="url(#terminal-319809203-clip-terminal)">
     
-    <g class="terminal-840943373-matrix">
-    <text class="terminal-840943373-r2" x="1464" y="20" textLength="12.2" 
clip-path="url(#terminal-840943373-line-0)">
-</text><text class="terminal-840943373-r3" x="12.2" y="44.4" textLength="85.4" 
clip-path="url(#terminal-840943373-line-1)">Usage:&#160;</text><text 
class="terminal-840943373-r1" x="97.6" y="44.4" textLength="610" 
clip-path="url(#terminal-840943373-line-1)">breeze&#160;static-checks&#160;[OPTIONS]&#160;[PRECOMMIT_ARGS]...</text><text
 class="terminal-840943373-r2" x="1464" y="44.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-1)">
-</text><text class="terminal-840943373-r2" x="1464" y="68.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-2)">
-</text><text class="terminal-840943373-r2" x="12.2" y="93.2" 
textLength="219.6" 
clip-path="url(#terminal-840943373-line-3)">Run&#160;static&#160;checks.</text><text
 class="terminal-840943373-r2" x="1464" y="93.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-3)">
-</text><text class="terminal-840943373-r2" x="1464" y="117.6" 
textLength="12.2" clip-path="url(#terminal-840943373-line-4)">
-</text><text class="terminal-840943373-r4" x="0" y="142" textLength="24.4" 
clip-path="url(#terminal-840943373-line-5)">╭─</text><text 
class="terminal-840943373-r4" x="24.4" y="142" textLength="1415.2" 
clip-path="url(#terminal-840943373-line-5)">&#160;Pre-commit&#160;flags&#160;──────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="terminal-840943373-r4" x="1439.6" y="142" textLength="24.4" 
clip-path="url(#terminal-840943373-l [...]
-</text><text class="terminal-840943373-r4" x="0" y="166.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-6)">│</text><text 
class="terminal-840943373-r5" x="24.4" y="166.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-6)">-</text><text 
class="terminal-840943373-r5" x="36.6" y="166.4" textLength="61" 
clip-path="url(#terminal-840943373-line-6)">-type</text><text 
class="terminal-840943373-r6" x="317.2" y="166.4" textLength="24.4" 
clip-path="url(#terminal-840943373-li [...]
-</text><text class="terminal-840943373-r4" x="0" y="190.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-7)">│</text><text 
class="terminal-840943373-r7" x="366" y="190.8" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-7)">(all&#160;|&#160;black&#160;|&#160;blacken-docs&#160;|&#160;check-airflow-2-2-compatibility&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
-</text><text class="terminal-840943373-r4" x="0" y="215.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-8)">│</text><text 
class="terminal-840943373-r7" x="366" y="215.2" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-8)">check-airflow-config-yaml-consistent&#160;|&#160;check-apache-license-rat&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="termina [...]
-</text><text class="terminal-840943373-r4" x="0" y="239.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-9)">│</text><text 
class="terminal-840943373-r7" x="366" y="239.6" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-9)">check-base-operator-partial-arguments&#160;|&#160;check-base-operator-usage&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-84094337 [...]
-</text><text class="terminal-840943373-r4" x="0" y="264" textLength="12.2" 
clip-path="url(#terminal-840943373-line-10)">│</text><text 
class="terminal-840943373-r7" x="366" y="264" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-10)">check-boring-cyborg-configuration&#160;|&#160;check-breeze-top-dependencies-limited&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="264" textLength="12.2" [...]
-</text><text class="terminal-840943373-r4" x="0" y="288.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-11)">│</text><text 
class="terminal-840943373-r7" x="366" y="288.4" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-11)">check-builtin-literals&#160;|&#160;check-changelog-has-no-duplicates&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
-</text><text class="terminal-840943373-r4" x="0" y="312.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-12)">│</text><text 
class="terminal-840943373-r7" x="366" y="312.8" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-12)">check-daysago-import-from-utils&#160;|&#160;check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="312.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-12)">│</ [...]
-</text><text class="terminal-840943373-r4" x="0" y="337.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-13)">│</text><text 
class="terminal-840943373-r7" x="366" y="337.2" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-13)">|&#160;check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;check-extras-order</text><text
 class="terminal-840943373-r4" x="1451.8" y="337.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-13)">│</ [...]
-</text><text class="terminal-840943373-r4" x="0" y="361.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-14)">│</text><text 
class="terminal-840943373-r7" x="366" y="361.6" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-14)">|&#160;check-for-inclusive-language&#160;|&#160;check-hooks-apply&#160;|&#160;check-incorrect-use-of-LoggingMixin</text><text
 class="terminal-840943373-r4" x="1451.8" y="361.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-14)">│</ [...]
-</text><text class="terminal-840943373-r4" x="0" y="386" textLength="12.2" 
clip-path="url(#terminal-840943373-line-15)">│</text><text 
class="terminal-840943373-r7" x="366" y="386" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-15)">|&#160;check-integrations-are-consistent&#160;|&#160;check-lazy-logging&#160;|&#160;check-merge-conflict&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="386" textLength="12.2" 
clip-path="url [...]
-</text><text class="terminal-840943373-r4" x="0" y="410.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-16)">│</text><text 
class="terminal-840943373-r7" x="366" y="410.4" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-16)">check-newsfragments-are-valid&#160;|&#160;check-no-providers-in-core-examples&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x= [...]
-</text><text class="terminal-840943373-r4" x="0" y="434.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-17)">│</text><text 
class="terminal-840943373-r7" x="366" y="434.8" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-17)">check-no-relative-imports&#160;|&#160;check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="434.8" textLength="12.2" 
clip-path="url(#terminal-840943373-lin [...]
-</text><text class="terminal-840943373-r4" x="0" y="459.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-18)">│</text><text 
class="terminal-840943373-r7" x="366" y="459.2" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-18)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="459.2" textLength="12.2" 
clip-path="url(#termina [...]
-</text><text class="terminal-840943373-r4" x="0" y="483.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-19)">│</text><text 
class="terminal-840943373-r7" x="366" y="483.6" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-19)">check-provider-yaml-valid&#160;|&#160;check-providers-init-file-missing&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 cl [...]
-</text><text class="terminal-840943373-r4" x="0" y="508" textLength="12.2" 
clip-path="url(#terminal-840943373-line-20)">│</text><text 
class="terminal-840943373-r7" x="366" y="508" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-20)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="508" textLen [...]
-</text><text class="terminal-840943373-r4" x="0" y="532.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-21)">│</text><text 
class="terminal-840943373-r7" x="366" y="532.4" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-21)">check-revision-heads-map&#160;|&#160;check-safe-filter-usage-in-html&#160;|&#160;check-setup-order&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="532.4" textLength="12.2" clip-pat 
[...]
-</text><text class="terminal-840943373-r4" x="0" y="556.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-22)">│</text><text 
class="terminal-840943373-r7" x="366" y="556.8" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-22)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r [...]
-</text><text class="terminal-840943373-r4" x="0" y="581.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-23)">│</text><text 
class="terminal-840943373-r7" x="366" y="581.2" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-23)">check-system-tests-tocs&#160;|&#160;check-xml&#160;|&#160;codespell&#160;|&#160;compile-www-assets&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-8 [...]
-</text><text class="terminal-840943373-r4" x="0" y="605.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-24)">│</text><text 
class="terminal-840943373-r7" x="366" y="605.6" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-24)">compile-www-assets-dev&#160;|&#160;create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="605.6" textLength="12.2" clip-pat 
[...]
-</text><text class="terminal-840943373-r4" x="0" y="630" textLength="12.2" 
clip-path="url(#terminal-840943373-line-25)">│</text><text 
class="terminal-840943373-r7" x="366" y="630" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-25)">detect-private-key&#160;|&#160;doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;identity</text><text
 class="terminal-840943373-r4" x="1451.8" y="630" textLength="12.2" 
clip-path="url(#terminal-8409 [...]
-</text><text class="terminal-840943373-r4" x="0" y="654.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-26)">│</text><text 
class="terminal-840943373-r7" x="366" y="654.4" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-26)">|&#160;insert-license&#160;|&#160;isort&#160;|&#160;lint-chart-schema&#160;|&#160;lint-css&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r [...]
-</text><text class="terminal-840943373-r4" x="0" y="678.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-27)">│</text><text 
class="terminal-840943373-r7" x="366" y="678.8" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-27)">lint-helm-chart&#160;|&#160;lint-javascript&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;lint-openapi&#160;|&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="678.8" textLength="12.2" 
clip-path="ur [...]
-</text><text class="terminal-840943373-r4" x="0" y="703.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-28)">│</text><text 
class="terminal-840943373-r7" x="366" y="703.2" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-28)">mixed-line-ending&#160;|&#160;pretty-format-json&#160;|&#160;pydocstyle&#160;|&#160;python-no-log-warn&#160;|&#160;pyupgrade&#160;|&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="703.2" textLength="12.2" 
clip-path="url(#te [...]
-</text><text class="terminal-840943373-r4" x="0" y="727.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-29)">│</text><text 
class="terminal-840943373-r7" x="366" y="727.6" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-29)">replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;run-flake8&#160;|&#160;run-mypy&#160;|&#160;run-shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="727.6" textLength= [...]
-</text><text class="terminal-840943373-r4" x="0" y="752" textLength="12.2" 
clip-path="url(#terminal-840943373-line-30)">│</text><text 
class="terminal-840943373-r7" x="366" y="752" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-30)">static-check-autoflake&#160;|&#160;trailing-whitespace&#160;|&#160;ts-compile-and-lint-javascript&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="752" textLength="12.2" clip-path 
[...]
-</text><text class="terminal-840943373-r4" x="0" y="776.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-31)">│</text><text 
class="terminal-840943373-r7" x="366" y="776.4" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-31)">update-breeze-cmd-output&#160;|&#160;update-breeze-readme-config-hash&#160;|&#160;update-extras&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="776.4" textLength= [...]
-</text><text class="terminal-840943373-r4" x="0" y="800.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-32)">│</text><text 
class="terminal-840943373-r7" x="366" y="800.8" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-32)">update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x= [...]
-</text><text class="terminal-840943373-r4" x="0" y="825.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-33)">│</text><text 
class="terminal-840943373-r7" x="366" y="825.2" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-33)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="825.2" textLength="12.2" 
clip-path="url(#terminal-84094337 [...]
-</text><text class="terminal-840943373-r4" x="0" y="849.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-34)">│</text><text 
class="terminal-840943373-r7" x="366" y="849.6" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-34)">update-setup-cfg-file&#160;|&#160;update-spelling-wordlist-to-be-sorted&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 cl [...]
-</text><text class="terminal-840943373-r4" x="0" y="874" textLength="12.2" 
clip-path="url(#terminal-840943373-line-35)">│</text><text 
class="terminal-840943373-r7" x="366" y="874" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-35)">update-supported-versions&#160;|&#160;update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-840943373-r4" x="1451.8" y="874" textLength="12.2" 
clip-path="url(#ter [...]
-</text><text class="terminal-840943373-r4" x="0" y="898.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-36)">│</text><text 
class="terminal-840943373-r7" x="366" y="898.4" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-36)">yamllint&#160;|&#160;yesqa)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
-</text><text class="terminal-840943373-r4" x="0" y="922.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-37)">│</text><text 
class="terminal-840943373-r5" x="24.4" y="922.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-37)">-</text><text 
class="terminal-840943373-r5" x="36.6" y="922.8" textLength="61" 
clip-path="url(#terminal-840943373-line-37)">-file</text><text 
class="terminal-840943373-r6" x="317.2" y="922.8" textLength="24.4" 
clip-path="url(#terminal-840943373 [...]
-</text><text class="terminal-840943373-r4" x="0" y="947.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-38)">│</text><text 
class="terminal-840943373-r5" x="24.4" y="947.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-38)">-</text><text 
class="terminal-840943373-r5" x="36.6" y="947.2" textLength="48.8" 
clip-path="url(#terminal-840943373-line-38)">-all</text><text 
class="terminal-840943373-r5" x="85.4" y="947.2" textLength="73.2" 
clip-path="url(#terminal-840943373 [...]
-</text><text class="terminal-840943373-r4" x="0" y="971.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-39)">│</text><text 
class="terminal-840943373-r5" x="24.4" y="971.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-39)">-</text><text 
class="terminal-840943373-r5" x="36.6" y="971.6" textLength="61" 
clip-path="url(#terminal-840943373-line-39)">-show</text><text 
class="terminal-840943373-r5" x="97.6" y="971.6" textLength="195.2" 
clip-path="url(#terminal-840943373 [...]
-</text><text class="terminal-840943373-r4" x="0" y="996" textLength="12.2" 
clip-path="url(#terminal-840943373-line-40)">│</text><text 
class="terminal-840943373-r5" x="24.4" y="996" textLength="12.2" 
clip-path="url(#terminal-840943373-line-40)">-</text><text 
class="terminal-840943373-r5" x="36.6" y="996" textLength="61" 
clip-path="url(#terminal-840943373-line-40)">-last</text><text 
class="terminal-840943373-r5" x="97.6" y="996" textLength="85.4" 
clip-path="url(#terminal-840943373-line-40) [...]
-</text><text class="terminal-840943373-r4" x="0" y="1020.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-41)">│</text><text 
class="terminal-840943373-r5" x="24.4" y="1020.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-41)">-</text><text 
class="terminal-840943373-r5" x="36.6" y="1020.4" textLength="85.4" 
clip-path="url(#terminal-840943373-line-41)">-commit</text><text 
class="terminal-840943373-r5" x="122" y="1020.4" textLength="48.8" 
clip-path="url(#terminal-840 [...]
-</text><text class="terminal-840943373-r4" x="0" y="1044.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-42)">│</text><text 
class="terminal-840943373-r2" x="366" y="1044.8" textLength="292.8" 
clip-path="url(#terminal-840943373-line-42)">Mutually&#160;exclusive&#160;with&#160;</text><text
 class="terminal-840943373-r5" x="658.8" y="1044.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-42)">-</text><text 
class="terminal-840943373-r5" x="671" y="1044.8" textLength="6 [...]
-</text><text class="terminal-840943373-r4" x="0" y="1069.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-43)">│</text><text 
class="terminal-840943373-r7" x="366" y="1069.2" textLength="1073.6" 
clip-path="url(#terminal-840943373-line-43)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="terminal-840943373-r4" x="0" y="1093.6" textLength="1464" 
clip-path="url(#terminal-840943373-line-44)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="terminal-840943373-r2" x="1464" y="1093.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-44)">
-</text><text class="terminal-840943373-r4" x="0" y="1118" textLength="24.4" 
clip-path="url(#terminal-840943373-line-45)">╭─</text><text 
class="terminal-840943373-r4" x="24.4" y="1118" textLength="1415.2" 
clip-path="url(#terminal-840943373-line-45)">&#160;Common&#160;options&#160;────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="terminal-840943373-r4" x="1439.6" y="1118" textLength="24.4" 
clip-path="url(#terminal-840943 [...]
-</text><text class="terminal-840943373-r4" x="0" y="1142.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-46)">│</text><text 
class="terminal-840943373-r5" x="24.4" y="1142.4" textLength="12.2" 
clip-path="url(#terminal-840943373-line-46)">-</text><text 
class="terminal-840943373-r5" x="36.6" y="1142.4" textLength="97.6" 
clip-path="url(#terminal-840943373-line-46)">-verbose</text><text 
class="terminal-840943373-r6" x="280.6" y="1142.4" textLength="24.4" 
clip-path="url(#terminal- [...]
-</text><text class="terminal-840943373-r4" x="0" y="1166.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-47)">│</text><text 
class="terminal-840943373-r5" x="24.4" y="1166.8" textLength="12.2" 
clip-path="url(#terminal-840943373-line-47)">-</text><text 
class="terminal-840943373-r5" x="36.6" y="1166.8" textLength="48.8" 
clip-path="url(#terminal-840943373-line-47)">-dry</text><text 
class="terminal-840943373-r5" x="85.4" y="1166.8" textLength="48.8" 
clip-path="url(#terminal-84094 [...]
-</text><text class="terminal-840943373-r4" x="0" y="1191.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-48)">│</text><text 
class="terminal-840943373-r5" x="24.4" y="1191.2" textLength="12.2" 
clip-path="url(#terminal-840943373-line-48)">-</text><text 
class="terminal-840943373-r5" x="36.6" y="1191.2" textLength="85.4" 
clip-path="url(#terminal-840943373-line-48)">-github</text><text 
class="terminal-840943373-r5" x="122" y="1191.2" textLength="134.2" 
clip-path="url(#terminal-84 [...]
-</text><text class="terminal-840943373-r4" x="0" y="1215.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-49)">│</text><text 
class="terminal-840943373-r5" x="24.4" y="1215.6" textLength="12.2" 
clip-path="url(#terminal-840943373-line-49)">-</text><text 
class="terminal-840943373-r5" x="36.6" y="1215.6" textLength="61" 
clip-path="url(#terminal-840943373-line-49)">-help</text><text 
class="terminal-840943373-r6" x="280.6" y="1215.6" textLength="24.4" 
clip-path="url(#terminal-84094 [...]
-</text><text class="terminal-840943373-r4" x="0" y="1240" textLength="1464" 
clip-path="url(#terminal-840943373-line-50)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="terminal-840943373-r2" x="1464" y="1240" textLength="12.2" 
clip-path="url(#terminal-840943373-line-50)">
+    <g class="terminal-319809203-matrix">
+    <text class="terminal-319809203-r2" x="1464" y="20" textLength="12.2" 
clip-path="url(#terminal-319809203-line-0)">
+</text><text class="terminal-319809203-r3" x="12.2" y="44.4" textLength="85.4" 
clip-path="url(#terminal-319809203-line-1)">Usage:&#160;</text><text 
class="terminal-319809203-r1" x="97.6" y="44.4" textLength="610" 
clip-path="url(#terminal-319809203-line-1)">breeze&#160;static-checks&#160;[OPTIONS]&#160;[PRECOMMIT_ARGS]...</text><text
 class="terminal-319809203-r2" x="1464" y="44.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-1)">
+</text><text class="terminal-319809203-r2" x="1464" y="68.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-2)">
+</text><text class="terminal-319809203-r2" x="12.2" y="93.2" 
textLength="219.6" 
clip-path="url(#terminal-319809203-line-3)">Run&#160;static&#160;checks.</text><text
 class="terminal-319809203-r2" x="1464" y="93.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-3)">
+</text><text class="terminal-319809203-r2" x="1464" y="117.6" 
textLength="12.2" clip-path="url(#terminal-319809203-line-4)">
+</text><text class="terminal-319809203-r4" x="0" y="142" textLength="24.4" 
clip-path="url(#terminal-319809203-line-5)">╭─</text><text 
class="terminal-319809203-r4" x="24.4" y="142" textLength="1415.2" 
clip-path="url(#terminal-319809203-line-5)">&#160;Pre-commit&#160;flags&#160;──────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="terminal-319809203-r4" x="1439.6" y="142" textLength="24.4" 
clip-path="url(#terminal-319809203-l [...]
+</text><text class="terminal-319809203-r4" x="0" y="166.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-6)">│</text><text 
class="terminal-319809203-r5" x="24.4" y="166.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-6)">-</text><text 
class="terminal-319809203-r5" x="36.6" y="166.4" textLength="61" 
clip-path="url(#terminal-319809203-line-6)">-type</text><text 
class="terminal-319809203-r6" x="317.2" y="166.4" textLength="24.4" 
clip-path="url(#terminal-319809203-li [...]
+</text><text class="terminal-319809203-r4" x="0" y="190.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-7)">│</text><text 
class="terminal-319809203-r7" x="366" y="190.8" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-7)">(all&#160;|&#160;black&#160;|&#160;blacken-docs&#160;|&#160;check-airflow-2-2-compatibility&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="terminal-319809203-r4" x="0" y="215.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-8)">│</text><text 
class="terminal-319809203-r7" x="366" y="215.2" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-8)">check-airflow-config-yaml-consistent&#160;|&#160;check-apache-license-rat&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="termina [...]
+</text><text class="terminal-319809203-r4" x="0" y="239.6" textLength="12.2" 
clip-path="url(#terminal-319809203-line-9)">│</text><text 
class="terminal-319809203-r7" x="366" y="239.6" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-9)">check-base-operator-partial-arguments&#160;|&#160;check-base-operator-usage&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-31980920 [...]
+</text><text class="terminal-319809203-r4" x="0" y="264" textLength="12.2" 
clip-path="url(#terminal-319809203-line-10)">│</text><text 
class="terminal-319809203-r7" x="366" y="264" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-10)">check-boring-cyborg-configuration&#160;|&#160;check-breeze-top-dependencies-limited&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="264" textLength="12.2" [...]
+</text><text class="terminal-319809203-r4" x="0" y="288.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-11)">│</text><text 
class="terminal-319809203-r7" x="366" y="288.4" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-11)">check-builtin-literals&#160;|&#160;check-changelog-has-no-duplicates&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
+</text><text class="terminal-319809203-r4" x="0" y="312.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-12)">│</text><text 
class="terminal-319809203-r7" x="366" y="312.8" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-12)">check-daysago-import-from-utils&#160;|&#160;check-decorated-operator-implements-custom-name&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="312.8" textLength="12.2" 
clip-path="url(#terminal-31980920 [...]
+</text><text class="terminal-319809203-r4" x="0" y="337.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-13)">│</text><text 
class="terminal-319809203-r7" x="366" y="337.2" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-13)">check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;|&#160;check-executables-have-shebangs&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="337.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-13)">│</ [...]
+</text><text class="terminal-319809203-r4" x="0" y="361.6" textLength="12.2" 
clip-path="url(#terminal-319809203-line-14)">│</text><text 
class="terminal-319809203-r7" x="366" y="361.6" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-14)">|&#160;check-extra-packages-references&#160;|&#160;check-extras-order&#160;|&#160;check-for-inclusive-language&#160;|&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="361.6" textLength="12.2" 
clip-path="url(#terminal-319809203-lin [...]
+</text><text class="terminal-319809203-r4" x="0" y="386" textLength="12.2" 
clip-path="url(#terminal-319809203-line-15)">│</text><text 
class="terminal-319809203-r7" x="366" y="386" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-15)">check-hooks-apply&#160;|&#160;check-incorrect-use-of-LoggingMixin&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="terminal-319809203-r4" x="0" y="410.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-16)">│</text><text 
class="terminal-319809203-r7" x="366" y="410.4" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-16)">check-integrations-are-consistent&#160;|&#160;check-lazy-logging&#160;|&#160;check-merge-conflict&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="410.4" textLength="12.2" cli [...]
+</text><text class="terminal-319809203-r4" x="0" y="434.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-17)">│</text><text 
class="terminal-319809203-r7" x="366" y="434.8" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-17)">check-newsfragments-are-valid&#160;|&#160;check-no-providers-in-core-examples&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x= [...]
+</text><text class="terminal-319809203-r4" x="0" y="459.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-18)">│</text><text 
class="terminal-319809203-r7" x="366" y="459.2" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-18)">check-no-relative-imports&#160;|&#160;check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="459.2" textLength="12.2" 
clip-path="url(#terminal-319809203-lin [...]
+</text><text class="terminal-319809203-r4" x="0" y="483.6" textLength="12.2" 
clip-path="url(#terminal-319809203-line-19)">│</text><text 
class="terminal-319809203-r7" x="366" y="483.6" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-19)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="483.6" textLength="12.2" 
clip-path="url(#termina [...]
+</text><text class="terminal-319809203-r4" x="0" y="508" textLength="12.2" 
clip-path="url(#terminal-319809203-line-20)">│</text><text 
class="terminal-319809203-r7" x="366" y="508" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-20)">check-provider-yaml-valid&#160;|&#160;check-providers-init-file-missing&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class= [...]
+</text><text class="terminal-319809203-r4" x="0" y="532.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-21)">│</text><text 
class="terminal-319809203-r7" x="366" y="532.4" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-21)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="532.4" t [...]
+</text><text class="terminal-319809203-r4" x="0" y="556.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-22)">│</text><text 
class="terminal-319809203-r7" x="366" y="556.8" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-22)">check-revision-heads-map&#160;|&#160;check-safe-filter-usage-in-html&#160;|&#160;check-setup-order&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="556.8" textLength="12.2" clip-pat 
[...]
+</text><text class="terminal-319809203-r4" x="0" y="581.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-23)">│</text><text 
class="terminal-319809203-r7" x="366" y="581.2" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-23)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r [...]
+</text><text class="terminal-319809203-r4" x="0" y="605.6" textLength="12.2" 
clip-path="url(#terminal-319809203-line-24)">│</text><text 
class="terminal-319809203-r7" x="366" y="605.6" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-24)">check-system-tests-tocs&#160;|&#160;check-xml&#160;|&#160;codespell&#160;|&#160;compile-www-assets&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3 [...]
+</text><text class="terminal-319809203-r4" x="0" y="630" textLength="12.2" 
clip-path="url(#terminal-319809203-line-25)">│</text><text 
class="terminal-319809203-r7" x="366" y="630" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-25)">compile-www-assets-dev&#160;|&#160;create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="630" textLength="12.2" 
clip-path="url [...]
+</text><text class="terminal-319809203-r4" x="0" y="654.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-26)">│</text><text 
class="terminal-319809203-r7" x="366" y="654.4" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-26)">detect-private-key&#160;|&#160;doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;identity</text><text
 class="terminal-319809203-r4" x="1451.8" y="654.4" textLength="12.2" 
clip-path="url(#termina [...]
+</text><text class="terminal-319809203-r4" x="0" y="678.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-27)">│</text><text 
class="terminal-319809203-r7" x="366" y="678.8" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-27)">|&#160;insert-license&#160;|&#160;isort&#160;|&#160;lint-chart-schema&#160;|&#160;lint-css&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r [...]
+</text><text class="terminal-319809203-r4" x="0" y="703.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-28)">│</text><text 
class="terminal-319809203-r7" x="366" y="703.2" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-28)">lint-helm-chart&#160;|&#160;lint-javascript&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;lint-openapi&#160;|&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="703.2" textLength="12.2" 
clip-path="ur [...]
+</text><text class="terminal-319809203-r4" x="0" y="727.6" textLength="12.2" 
clip-path="url(#terminal-319809203-line-29)">│</text><text 
class="terminal-319809203-r7" x="366" y="727.6" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-29)">mixed-line-ending&#160;|&#160;pretty-format-json&#160;|&#160;pydocstyle&#160;|&#160;python-no-log-warn&#160;|&#160;pyupgrade&#160;|&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="727.6" textLength="12.2" 
clip-path="url(#te [...]
+</text><text class="terminal-319809203-r4" x="0" y="752" textLength="12.2" 
clip-path="url(#terminal-319809203-line-30)">│</text><text 
class="terminal-319809203-r7" x="366" y="752" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-30)">replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;run-flake8&#160;|&#160;run-mypy&#160;|&#160;run-shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="752" textLength="12.2" [...]
+</text><text class="terminal-319809203-r4" x="0" y="776.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-31)">│</text><text 
class="terminal-319809203-r7" x="366" y="776.4" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-31)">static-check-autoflake&#160;|&#160;trailing-whitespace&#160;|&#160;ts-compile-and-lint-javascript&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="776.4" textLength="12.2" cli [...]
+</text><text class="terminal-319809203-r4" x="0" y="800.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-32)">│</text><text 
class="terminal-319809203-r7" x="366" y="800.8" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-32)">update-breeze-cmd-output&#160;|&#160;update-breeze-readme-config-hash&#160;|&#160;update-extras&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="800.8" textLength= [...]
+</text><text class="terminal-319809203-r4" x="0" y="825.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-33)">│</text><text 
class="terminal-319809203-r7" x="366" y="825.2" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-33)">update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x= [...]
+</text><text class="terminal-319809203-r4" x="0" y="849.6" textLength="12.2" 
clip-path="url(#terminal-319809203-line-34)">│</text><text 
class="terminal-319809203-r7" x="366" y="849.6" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-34)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="849.6" textLength="12.2" 
clip-path="url(#terminal-31980920 [...]
+</text><text class="terminal-319809203-r4" x="0" y="874" textLength="12.2" 
clip-path="url(#terminal-319809203-line-35)">│</text><text 
class="terminal-319809203-r7" x="366" y="874" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-35)">update-setup-cfg-file&#160;|&#160;update-spelling-wordlist-to-be-sorted&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class= [...]
+</text><text class="terminal-319809203-r4" x="0" y="898.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-36)">│</text><text 
class="terminal-319809203-r7" x="366" y="898.4" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-36)">update-supported-versions&#160;|&#160;update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-319809203-r4" x="1451.8" y="898.4" textLength="12.2" 
clip-path="ur [...]
+</text><text class="terminal-319809203-r4" x="0" y="922.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-37)">│</text><text 
class="terminal-319809203-r7" x="366" y="922.8" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-37)">yamllint&#160;|&#160;yesqa)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
+</text><text class="terminal-319809203-r4" x="0" y="947.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-38)">│</text><text 
class="terminal-319809203-r5" x="24.4" y="947.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-38)">-</text><text 
class="terminal-319809203-r5" x="36.6" y="947.2" textLength="61" 
clip-path="url(#terminal-319809203-line-38)">-file</text><text 
class="terminal-319809203-r6" x="317.2" y="947.2" textLength="24.4" 
clip-path="url(#terminal-319809203 [...]
+</text><text class="terminal-319809203-r4" x="0" y="971.6" textLength="12.2" 
clip-path="url(#terminal-319809203-line-39)">│</text><text 
class="terminal-319809203-r5" x="24.4" y="971.6" textLength="12.2" 
clip-path="url(#terminal-319809203-line-39)">-</text><text 
class="terminal-319809203-r5" x="36.6" y="971.6" textLength="48.8" 
clip-path="url(#terminal-319809203-line-39)">-all</text><text 
class="terminal-319809203-r5" x="85.4" y="971.6" textLength="73.2" 
clip-path="url(#terminal-319809203 [...]
+</text><text class="terminal-319809203-r4" x="0" y="996" textLength="12.2" 
clip-path="url(#terminal-319809203-line-40)">│</text><text 
class="terminal-319809203-r5" x="24.4" y="996" textLength="12.2" 
clip-path="url(#terminal-319809203-line-40)">-</text><text 
class="terminal-319809203-r5" x="36.6" y="996" textLength="61" 
clip-path="url(#terminal-319809203-line-40)">-show</text><text 
class="terminal-319809203-r5" x="97.6" y="996" textLength="195.2" 
clip-path="url(#terminal-319809203-line-40 [...]
+</text><text class="terminal-319809203-r4" x="0" y="1020.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-41)">│</text><text 
class="terminal-319809203-r5" x="24.4" y="1020.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-41)">-</text><text 
class="terminal-319809203-r5" x="36.6" y="1020.4" textLength="61" 
clip-path="url(#terminal-319809203-line-41)">-last</text><text 
class="terminal-319809203-r5" x="97.6" y="1020.4" textLength="85.4" 
clip-path="url(#terminal-319809 [...]
+</text><text class="terminal-319809203-r4" x="0" y="1044.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-42)">│</text><text 
class="terminal-319809203-r5" x="24.4" y="1044.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-42)">-</text><text 
class="terminal-319809203-r5" x="36.6" y="1044.8" textLength="85.4" 
clip-path="url(#terminal-319809203-line-42)">-commit</text><text 
class="terminal-319809203-r5" x="122" y="1044.8" textLength="48.8" 
clip-path="url(#terminal-319 [...]
+</text><text class="terminal-319809203-r4" x="0" y="1069.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-43)">│</text><text 
class="terminal-319809203-r2" x="366" y="1069.2" textLength="292.8" 
clip-path="url(#terminal-319809203-line-43)">Mutually&#160;exclusive&#160;with&#160;</text><text
 class="terminal-319809203-r5" x="658.8" y="1069.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-43)">-</text><text 
class="terminal-319809203-r5" x="671" y="1069.2" textLength="6 [...]
+</text><text class="terminal-319809203-r4" x="0" y="1093.6" textLength="12.2" 
clip-path="url(#terminal-319809203-line-44)">│</text><text 
class="terminal-319809203-r7" x="366" y="1093.6" textLength="1073.6" 
clip-path="url(#terminal-319809203-line-44)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="terminal-319809203-r4" x="0" y="1118" textLength="1464" 
clip-path="url(#terminal-319809203-line-45)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="terminal-319809203-r2" x="1464" y="1118" textLength="12.2" 
clip-path="url(#terminal-319809203-line-45)">
+</text><text class="terminal-319809203-r4" x="0" y="1142.4" textLength="24.4" 
clip-path="url(#terminal-319809203-line-46)">╭─</text><text 
class="terminal-319809203-r4" x="24.4" y="1142.4" textLength="1415.2" 
clip-path="url(#terminal-319809203-line-46)">&#160;Common&#160;options&#160;────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="terminal-319809203-r4" x="1439.6" y="1142.4" textLength="24.4" 
clip-path="url(#terminal- [...]
+</text><text class="terminal-319809203-r4" x="0" y="1166.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-47)">│</text><text 
class="terminal-319809203-r5" x="24.4" y="1166.8" textLength="12.2" 
clip-path="url(#terminal-319809203-line-47)">-</text><text 
class="terminal-319809203-r5" x="36.6" y="1166.8" textLength="97.6" 
clip-path="url(#terminal-319809203-line-47)">-verbose</text><text 
class="terminal-319809203-r6" x="280.6" y="1166.8" textLength="24.4" 
clip-path="url(#terminal- [...]
+</text><text class="terminal-319809203-r4" x="0" y="1191.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-48)">│</text><text 
class="terminal-319809203-r5" x="24.4" y="1191.2" textLength="12.2" 
clip-path="url(#terminal-319809203-line-48)">-</text><text 
class="terminal-319809203-r5" x="36.6" y="1191.2" textLength="48.8" 
clip-path="url(#terminal-319809203-line-48)">-dry</text><text 
class="terminal-319809203-r5" x="85.4" y="1191.2" textLength="48.8" 
clip-path="url(#terminal-31980 [...]
+</text><text class="terminal-319809203-r4" x="0" y="1215.6" textLength="12.2" 
clip-path="url(#terminal-319809203-line-49)">│</text><text 
class="terminal-319809203-r5" x="24.4" y="1215.6" textLength="12.2" 
clip-path="url(#terminal-319809203-line-49)">-</text><text 
class="terminal-319809203-r5" x="36.6" y="1215.6" textLength="85.4" 
clip-path="url(#terminal-319809203-line-49)">-github</text><text 
class="terminal-319809203-r5" x="122" y="1215.6" textLength="134.2" 
clip-path="url(#terminal-31 [...]
+</text><text class="terminal-319809203-r4" x="0" y="1240" textLength="12.2" 
clip-path="url(#terminal-319809203-line-50)">│</text><text 
class="terminal-319809203-r5" x="24.4" y="1240" textLength="12.2" 
clip-path="url(#terminal-319809203-line-50)">-</text><text 
class="terminal-319809203-r5" x="36.6" y="1240" textLength="61" 
clip-path="url(#terminal-319809203-line-50)">-help</text><text 
class="terminal-319809203-r6" x="280.6" y="1240" textLength="24.4" 
clip-path="url(#terminal-319809203-lin [...]
+</text><text class="terminal-319809203-r4" x="0" y="1264.4" textLength="1464" 
clip-path="url(#terminal-319809203-line-51)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="terminal-319809203-r2" x="1464" y="1264.4" textLength="12.2" 
clip-path="url(#terminal-319809203-line-51)">
 </text>
     </g>
     </g>
diff --git 
a/scripts/ci/pre_commit/pre_commit_decorator_operator_implements_custom_name.py 
b/scripts/ci/pre_commit/pre_commit_decorator_operator_implements_custom_name.py
new file mode 100755
index 0000000000..975d2f3473
--- /dev/null
+++ 
b/scripts/ci/pre_commit/pre_commit_decorator_operator_implements_custom_name.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+import ast
+import itertools
+import pathlib
+import sys
+from typing import Iterator
+
+
+def iter_decorated_operators(source: pathlib.Path) -> Iterator[ast.ClassDef]:
+    mod = ast.parse(source.read_text("utf-8"), str(source))
+    for node in ast.walk(mod):
+        if not isinstance(node, ast.ClassDef):
+            continue
+        if not any(isinstance(base, ast.Name) and base.id == 
"DecoratedOperator" for base in node.bases):
+            continue  # Not a decorated operator.
+        yield node
+
+
+def check_missing_custom_operator_name(klass: ast.ClassDef) -> bool:
+    for node in ast.iter_child_nodes(klass):
+        if isinstance(node, ast.AnnAssign):
+            if isinstance(node.target, ast.Name) and node.target.id == 
"custom_operator_name":
+                return True
+        elif isinstance(node, ast.Assign):
+            if any(isinstance(t, ast.Name) and t.id == "custom_operator_name" 
for t in node.targets):
+                return True
+    return False
+
+
+def main(*args: str) -> int:
+    classes = 
itertools.chain.from_iterable(iter_decorated_operators(pathlib.Path(a)) for a 
in args[1:])
+    results = ((k.name, check_missing_custom_operator_name(k)) for k in 
classes)
+    failures = [name for name, success in results if not success]
+    for failure in failures:
+        print(f"Missing custom_operator_name in class: {failure}")
+    return len(failures)
+
+
+if __name__ == "__main__":
+    sys.exit(main(*sys.argv))

Reply via email to