## 事象
以下のようなファイルがある。
```console
.
├── sub1.py
└── sub2.py
```
`sub1.py`
```python
from typing import TYPE_CHECKING
import sub2
if TYPE_CHECKING:
sub2.hoge()
def fuga():
pass
```
`sub2.py`
```python
import sub1
def hoge():
sub1.fuga()
```
これは[[循環インポート]]になってしまうので、`sub1.py` では[[basedpyright]]が `reportImportCycles` のエラーを出す。
```error
Cycle detected in import chain
/Users/tadashi-aikawa/tmp/python-sandbox/sub1.py
/Users/tadashi-aikawa/tmp/python-sandbox/sub2.py [reportImportCycles]
```
ただ、今回のように[[TYPE_CHECKING]]を利用して[[型ヒント]]を設定する場合は、[[循環インポート]]が必要になるケースもある。その場合に[[行で特定の警告を無視 (basedpyright)|行で特定の警告を無視]]しようとしてしても効果がない。
```python
from typing import TYPE_CHECKING # pyright: ignore[reportImportCycles]
import sub2
if TYPE_CHECKING:
sub2.hoge()
```
これをなんとかしたい。
### 環境
| 対象 | バージョン |
| ---------------- | ---------- |
| [[macOS]] | 15.7.2 |
| [[basedpyright]] | 1.37.1 |
## 原因
`reportImportCycles` はファイル単位にかかるルールだから?
## 解決方法
[[ファイルレベルの型制御 (basedpyright)|ファイルレベルの型制御]]で `reportImportCycles` を無効化する。
```python
# pyright: reportImportCycles=false
```
## 参考
- [DetachHead/basedpyright](https://github.com/DetachHead/basedpyright/issues/960)