Aller au contenu

Configurer VS Code pour l'auto-import des classes Forge

Ce guide configure VS Code et Pylance pour qu'ils résolvent et proposent automatiquement (Ctrl + ., puis « Ajouter l'import »)
les classes du framework Forge (paquet core, fourni par forge-mvc) dans un projet Forge nu.

Pourquoi cette configuration est nécessaire

Le code du framework (core.mvc.controller.BaseController, etc.) n'est pas présent dans le dépôt du projet.
Il est installé dans le .venv via le paquet forge-mvc.
Sans réglage, Pylance ne sait ni où le chercher, ni à quelle profondeur l'indexer, donc l'auto-import ne fonctionne pas.

Cette aide est optionnelle : Forge ne dépend pas de VS Code.
Elle améliore seulement le confort d'écriture des contrôleurs et des classes applicatives.

Vue d'ensemble

Pour la liste complète des extensions et de la configuration VS Code du projet, voir Environnement VS Code de Forge.


Prérequis

  • Le projet dispose d'un environnement virtuel avec forge-mvc installé :
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt   # contient forge-mvc==…
  • Les extensions VS Code Python (ms-python.python) et Pylance (ms-python.vscode-pylance) sont installées.

Vérifier d'abord que l'import fonctionne côté interpréteur.
Si cette commande échoue, le problème vient de l'installation, pas de VS Code :

.venv/bin/python -c "from core.mvc.controller import BaseController; print('OK')"

Configuration

Créer (ou compléter) le fichier .vscode/settings.json à la racine du projet :

{
  "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
  "python.analysis.autoImportCompletions": true,
  "python.analysis.indexing": true,
  "python.analysis.packageIndexDepths": [
    { "name": "core", "depth": 4, "includeAllSymbols": true }
  ]
}

Rôle de chaque clé

Clé Rôle
python.defaultInterpreterPath Pointe Pylance vers le Python du .venv, là où core est installé.
python.analysis.autoImportCompletions Active les suggestions d'import dans l'autocomplétion.
python.analysis.indexing Active l'indexation des paquets installés, nécessaire à l'auto-import.
python.analysis.packageIndexDepths Au pluriel. Force Pylance à indexer le paquet core en profondeur.

Pourquoi depth: 4 ?

Par défaut, Pylance n'indexe les paquets installés qu'au niveau 1 (le __init__.py racine).
Or les classes Forge sont imbriquées plus profondément, par exemple :

core / mvc / controller / base_controller.py   →  niveau 3

depth: 4 couvre largement l'arborescence de core.
includeAllSymbols: true indexe tous les symboles, pas seulement ceux listés dans __all__.

Piège fréquent : le pluriel

Le paramètre s'écrit packageIndexDepths (avec un s).
Écrit au singulier (packageIndexDepth), il est silencieusement ignoré et l'auto-import ne fonctionne pas.


Activation (étapes obligatoires)

Les réglages ne sont pris en compte qu'après ces deux actions :

  1. Sélectionner l'interpréteur : Ctrl + Shift + P, puis Python: Select Interpreter, et choisir ./.venv/bin/python.
    La barre d'état (en bas) doit afficher .venv (3.x.x).

  2. Recharger la fenêtre (indispensable après toute modification de settings.json) : Ctrl + Shift + P, puis Developer: Reload Window.

Patienter une quinzaine de secondes : Pylance ré-indexe core en arrière-plan.


Vérification

  1. Dans un contrôleur, écrire une classe qui hérite d'une classe Forge sans l'importer :
class WelcomeController(BaseController):

    @staticmethod
    def index(request):
        return Response.text("Bonjour Forge")
  1. BaseController est souligné (signalé comme non défini).
  2. Placer le curseur sur BaseController, puis Ctrl + . : la correction rapide « Ajouter l'import "BaseController" depuis core.mvc.controller »
    doit apparaître.
    La sélectionner insère l'import en haut du fichier.

Dépannage

L'auto-import n'apparaît toujours pas ?
Vérifier dans l'ordre :

  1. L'interpréteur : la barre d'état doit afficher .venv, pas un « Python 3.x »
    système.
    Sinon, relancer Python: Select Interpreter, puis recharger la fenêtre.

  2. Pylance a-t-il relu la configuration ?
    Ouvrir Affichage → Sortie, canal Pylance (ou « Serveur de langage Python »).
    Après un rechargement, une ligne Indexing … indexed N files doit apparaître.
    Si N reste très bas (proche du seul nombre de fichiers du projet), l'indexation de core n'a pas eu lieu : recharger à nouveau la fenêtre.

  3. Configuration réellement appliquée ?
    Le settings.json doit avoir été enregistré avant le dernier rechargement.
    Toute édition postérieure exige un nouveau Developer: Reload Window.

  4. Repli si l'interpréteur reste mal détecté : ajouter explicitement le chemin des paquets (adapter la version de Python) :

"python.analysis.extraPaths": ["${workspaceFolder}/.venv/lib/python3.12/site-packages"]
  1. Vérifier que core est bien installé dans le .venv (voir la commande des prérequis).

Suivi de version

.vscode/settings.json peut être versionné : il documente la configuration attendue et profite à toute l'équipe.
En revanche, .venv/ doit rester dans le .gitignore.