rules_python icon indicating copy to clipboard operation
rules_python copied to clipboard

Add Gazelle support for `importlib.import_module`?

Open dougthor42 opened this issue 1 month ago • 1 comments

🚀 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().

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.

dougthor42 avatar Jun 02 '24 20:06 dougthor42