bazel-contrib / bazel-contrib/rules_python

Add Gazelle support for `importlib.import_module`?

未关闭
#1,938 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
gazelle help wanted
主要语言
Starlark
星标
688
派生
721
平均合并
15 小时 7 分钟
30 天内合并 PR
76

描述

# 🚀 feature request

### Relevant Rules

+ gazelle

### Description

First off, I want to say that I'm not sure if this is a good idea or not. So feel free to shoot it down 🤣.

In https://github.com/bazelbuild/rules_python/pull/1931#issuecomment-2141255218, it was said that the gazelle parser only needs to know about a subset of the python language:

> + comments
> + `if __name__ == "__main__"`
> + `from foo import bar`
> + `import foo`

However, there's another way to import other python code: [`importlib.import_module()`](https://docs.python.org/3/library/importlib.html#importlib.import_module).

**Should Gazelle parse these and attempt to add dependencies for them?**

#### Issues

There are a couple pretty big issues with trying to do so:

1. In my experience, `importlib.import_module` is typically used as a way to work around circular dependencies. So having Gazelle parse them would just result in a broken build, probably frustrating users more than helping.
2. There's no way to figure out what the runtime value would be.
+ So we could anything that's a string constant:
`import_module("foo.bar.baz")`
but not
`module = input("Enter a module name: "); import_module(module)` or even
`module = "foo.bar.baz"; import_module(module)`

#### Benefits

Umm... I guess if `import_module` is used in a _very specific_ way, then it would make making build files easier.

### Describe the solution you'd like

N/A

### Describe alternatives you've considered

Manually adding dependencies after running Gazelle. Not a big deal, IMO.

贡献指南

打开贡献指南

调研方向

从 Gazelle parser 以及 issue 引用的 rules_python#1931 讨论开始。针对循环依赖方面的担忧,评估使用常量字符串的 importlib.import_module 调用与动态调用,然后确定预期行为;当提案的范围已经确定并且验证路径达成一致时,即视为完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
python
领域
build-system
Issue 类型
功能
难度
5/5
预计耗时
一周以上
活跃度
停滞
描述清晰度
需要澄清
新手友好度
25/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。