mirror of
https://github.com/astral-sh/ruff
synced 2026-01-21 13:30:49 -05:00
<!-- Thank you for contributing to Ruff/ty! To help us out with reviewing, please consider the following: - Does this pull request include a summary of the change? (See below.) - Does this pull request include a descriptive title? (Please prefix with `[ty]` for ty pull requests.) - Does this pull request include references to any relevant issues? --> ## Summary This PR is related to https://github.com/apache/airflow/issues/48389. In Airflow 3, the function signature for `airflow.Dataset`, `airflow.datasets.Dataset`, and `airflow.sdk.Asset` has changed. Below is the function signature for `airflow.sdk.Asset`. The second positional argument is `uri` which is of type `str`. In the older version, the second positional argument can be a dictionary which is the `extra: 'dict | None' = None` argument. Therefore, we need to flag this in Airflow 3. ```python Asset(name: 'str | None' = None, uri: 'str | None' = None, *, group: 'str | None' = None, extra: 'dict | None' = None, watchers: 'list[AssetWatcher | SerializedAssetWatcher] | None' = None) -> 'None' ``` As this is a check on constructor call, we need to create a new method `check_constructor_arguments`, instead of on method call. The new rule check whether the index 1 (the second argument) is a dictionary (either a literal or a `dict()` call). ## Test Plan The `AIR303.py` test file have been updated with new test cases. The snapshot has been updated and all other test cases passed. @Lee-W , could you please review it when you have a chance, and let me know if you have further feedback. Thanks!