web-dev-qa-db-fra.com

Pourquoi Golang Intellisense est-il lent dans VS Code lors du changement d'importations?

J'ai le ms-vscode.go Extension Go installée dans ma configuration VS Code et j'utilise le serveur de langue gopls. Le serveur de langue semble bien fonctionner avec les opérations Intellisense, sauf lorsque je modifie des importations, moment auquel il y a un décalage considérable car chaque modification de l'importation prend plusieurs secondes pour se mettre à jour.

Par exemple, ce qui suit est une relecture de la saisie manuelle import "net/http" lettre par lettre (plutôt que copier/coller). Le clip s'exécute à une vitesse de 20x, il faut donc environ 1,8 minutes entre le moment où j'arrête de taper l'instruction d'importation et le moment où le serveur de langue obtient l'erreur correcte de "net/http" imported but not used:

enter image description here

Est-ce que je fais quelque chose de mal?

Mes paramètres liés à go:

  "go.useLanguageServer": true,
  "go.alternateTools": {
      "go-langserver": "gopls"
  },

La sortie de gopls révèle que beaucoup de temps est passé dans go list:

4.037297s for ...go "list" "-e" "-json" "-compiled=true" "-test=true" "-export=false" "-deps=true" "-find=false" "--" ...

pour chaque changement.

6
tbhartman

Cela pourrait être dû au fait que:

Avant janvier 2020 et gopls 0.3.0, vous pouvez essayer de voir si le problème persiste avec saibing/tools, en utilisant Go 1.13 en mode module.

git clone https://github.com/saibing/tools
cd tools/gopls
go install

Assurez-vous que votre ~/go/bin (en utilisant la valeur par défaut GOPATH) montre un nouvel exécutable gopls avec un horodatage récent.

Relancez ensuite VSCode.

Remarque: Microsoft/vscode-go problème 2484 (La fonctionnalité "Go: Saisie semi-automatique de packages non importés" lors de l'utilisation de modules Go ") vient également d'être résolue (janvier 2020):

Activation du paramètre go.autocompleteUnimportedPackages utilisé pour fournir des compléments pour les packages non importés.
Lorsqu'un tel élément d'achèvement a été sélectionné par l'utilisateur, non seulement le mot actuel a été terminé, mais une instruction d'importation est ajoutée dans le fichier de ce package.

Cela fonctionne maintenant avec les modules Go.

Encore une fois, gopls 0.3.0 devrait aider.


Mes paramètres gopls:

"gopls": {
    "usePlaceholders": true, // add parameter placeholders when completing a function
    "enhancedHover": true, // experimental to improve quality of hover (will be on by default soon)
},

Mais aussi:

"[go]": {
    "editor.snippetSuggestions": "none",
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
        "source.organizeImports": true
    },
},
"go.lintTool": "golangci-lint",
"go.useLanguageServer": true,
"go.languageServerExperimentalFeatures": {
    "format": true,
    "autoComplete": true
},
1
VonC