bazel-contrib / bazel-contrib/rules_python

Allow specifying custom stubs for Gazelle

Offen
#3,199 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Starlark
Sterne
688
Forks
721
Ø Merge
15 Std. 7 Min.
Gemergte PRs (30 T.)
76

Beschreibung

# 🚀 feature request

### Description

If a library does not provide type stubs, and if there isn't already a type stub library, you might need to write your own stubs (e.g. [kafka-python](https://pypi.org/project/kafka-python/)). Doing so is easy enough:

```py
py_library(
name = "kafka",
imports = ["."],
pyi_srcs = [
"kafka/__init__.pyi",
"kafka/consumer/fetcher.pyi",
"kafka/errors.pyi",
],
visibility = ["//visibility:public"],
)
```

Gazelle currently has a feature to automatically add stubs for a dependency (e.g. automatically add `types-request` whenever `request` is a dependency), but there's no way to register this target as being the type stubs for the `@pypi//kafka` library. Furthermore, adding it manually will remove it without `# keep`

### Describe the solution you'd like

First, in `gazelle_python.yaml`, add a `stub_mapping` section that explicitly maps package to stubs

```yaml
stub_mapping:
requests: types_requests
```

Then instead of [guessing which type packages to include](https://github.com/bazel-contrib/rules_python/blob/bb2aad2d1e3f883c9cdc2264e0b4a2815233db57/gazelle/python/resolve.go#L258-L269), refer to this explicit mapping.

After this refactor, update `modules_mapping` to register additional stubs:

```py
modules_mapping(
name = "modules_map",
include_stub_packages = True,
wheels = all_whl_requirements,
extra_stubs = {
"kafka-python": "//my_stubs:kafka",
},
)
```

This would get added to the new `stub_mapping` section in `gazelle_python.yaml` and everything should Just Work.

### Describe alternatives you've considered

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit gazelle_python.yaml und der Logik zur Auswahl von Type-Paketen in gazelle/python/resolve.go, insbesondere mit den verlinkten Zeilen. Verfolge dann modules_mapping und dessen Optionen include_stub_packages und extra_stubs. Die Aufgabe ist abgeschlossen, wenn ein explizites stub_mapping benutzerdefinierte Stubs registrieren kann und Gazelle dieses Mapping beibehält und verwendet, anstatt Type-Pakete zu erraten.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
build-system
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.