bazel-contrib / bazel-contrib/rules_python
Add Gazelle support for `importlib.import_module`?
- Langage dominant
- Starlark
- Étoiles
- 688
- Forks
- 721
- Merge moyen
- 15 h 7 min
- PR mergées (30 j)
- 76
Description
# 🚀 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.
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par l’analyseur Gazelle et la discussion dans rules_python#1931 référencée par l’issue. Évaluez les appels à importlib.import_module avec des chaînes constantes par rapport aux appels dynamiques au regard des préoccupations liées aux dépendances circulaires, puis établissez le comportement attendu ; le travail sera terminé lorsque la proposition aura un périmètre défini et un parcours de validation convenu.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- build-system
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 25/100