sidcore-dev/unused-imports-cli
GitHub: sidcore-dev/unused-imports-cli
一个轻量级、无依赖的命令行工具,利用 Python ast 模块扫描文件并报告未被使用的导入语句。
Stars: 0 | Forks: 0
# unused-imports-cli
[](https://github.com/sidcore-dev/unused-imports-cli/actions/workflows/ci.yml)
[](https://github.com/sidcore-dev/unused-imports-cli/releases)
[](https://opensource.org/licenses/MIT)
一个小巧、无依赖的命令行工具,它使用 `ast` 模块扫描 Python 文件,并报告那些已绑定但在文件中其他任何地方都未被引用的导入。
## 为什么需要
随着代码的演进,未使用的导入会悄无声息地堆积起来 —— 重构删除了某些东西的最后一次使用,而 `import` 行却被遗留下来。它们虽然无害但很碍眼,而且仅仅为了捕获这一个问题去使用大多数完整的 linter 显得过于笨重。`unused-imports-cli` 只做一件事:将它指向文件或目录,它就会准确地告诉你哪些导入没有发挥实际作用。
## 安装
```
pip install .
```
这会在你的 PATH 上安装一个 `unused-imports-cli` 命令。
## 用法
```
unused-imports-cli src/
```
示例输出:
```
src/app/utils.py:3: unused import 'json'
src/app/utils.py:7: unused import 'os.path as osp'
src/app/models.py:1: unused import 'typing.Optional'
```
接受任何单个文件和目录的组合;目录会递归搜索 `.py` 文件(跳过 `.git`、`__pycache__`、`.venv`、`venv`、`.tox`、`build`、`dist` 和 `.eggs`)。
```
unused-imports-cli app.py lib/ tests/test_app.py
```
### 检测工作原理
- 处理 `import x`、`import x as y`、`from x import y` 和 `from x import y as z`(包括像 `from . import y` 这样的相对导入)。
- 如果一个导入的绑定名称出现在文件中的其他任何地方 —— 包括函数、类、装饰器和类型注解内部 —— 或者如果它是通过静态 `__all__ = [...]` 列表重新导出的,则该导入将被视为“已使用”。
- 检测是基于文件作用域的,而不是函数作用域:即使某个导入与其导入位置无关,只要它在文件中的其他地方被使用,就不会被标记。
- `from x import *` 会被跳过而不是进行猜测,因为无法知道它引入了哪些名称。
- 仅在字符串类型提示(例如 `-> "Foo"`)中引用的名称不会被检测为已使用 —— 这是一个已知的限制。
### 退出代码
- `0` — 未发现未使用的导入
- `1` — 发现一个或多个未使用的导入
- `2` — 无法读取文件或解析失败
```
unused-imports-cli src/ || echo "found unused imports!"
```
## 开发
```
pip install -e .
python -m unittest discover -s tests -v
```
## 许可证
保留所有权利。本代码仅公开供查看和参考 —— 未授予使用、复制、修改或重新分发它的许可。详情请参阅 [LICENSE](LICENSE)。
标签:Apache Flink, Python, 云安全监控, 代码规范检查, 文档结构分析, 无后门, 逆向工具, 静态分析