Language-tools: Les importations automatiques sont incohérentes dans VSCode

Créé le 9 juil. 2020  ·  3Commentaires  ·  Source: sveltejs/language-tools

Décrivez le bogue
C'est purement esthétique. Lors de l'importation automatique d'un fichier ou d'un composant dans VScode, les nouvelles importations ne sont pas ajoutées correctement aux fichiers.

  • Ils sont insérés _au-dessus_ des importations existantes.
  • Ils sont insérés dans des positions différentes pour les fichiers .ts et .svelte .
  • Ils ignorent les préférences quoteStyle de l'éditeur.

    • Par exemple, avec typescript.preferences.quoteStyle: single dans VSCode, les importations utiliseront toujours des guillemets doubles.

  • Ils manquent d'indentation.

Reproduire
Créez un nouveau projet à partir de sveltejs/template , créez un composant vierge Test.svelte et importez-le automatiquement dans App.svelte . Dans les projets TypeScript, vous pouvez également voir que les importations à partir .ts fichiers

Example

Comportement prévisible
Je m'attends à ce que l'importation automatique fonctionne exactement comme dans un fichier .ts normal, mais avec une certaine indentation due à la balise de script.

  • Insérer avec une indentation appropriée, en particulier selon les importations existantes.
  • Insérez ci-dessous les importations existantes.
  • Insérez systématiquement pour tous les types de fichiers.
  • Utilisez le style de citation de l'éditeur si disponible.

Mon code aurait dû ressembler à ceci sans aucun travail manuel:

<script lang="ts">
    import Test from './Test.svelte';
    import { testStore } from './test';

    export let name;
</script>

Système (veuillez compléter les informations suivantes) :

  • Système d'exploitation : Windows 10
  • IDE : VSCode, 1.46.1
  • Plugin / Package: Svelte pour VSCode, 101.1.1
Fixed bug

Tous les 3 commentaires

Le problème sous-jacent est que lors de l'importation à l'intérieur du modèle, le compilateur svelte lancera des erreurs car à ce stade, le code n'est pas valide. De cette façon, svelte2tsx ne peut pas produire un fichier tsx valide, nous nous contentons donc d'utiliser uniquement le contenu de la balise de script. Si l'analyseur génère un code valide, svelte2tsx produira un fichier tsx converti. Cela rend les importations tapuscrit insert en un point différent et notre cartographie de la généré tsx à l' original svelte les importations au sommet. Je ne sais pas comment nous pouvons contourner ces problèmes dans le bon sens. Adhérer aux préférences de l'utilisateur (style de citation) devrait cependant être faisable. Comme solution de contournement, vous pouvez utiliser la commande "Organiser les importations", et la mise en forme plus jolie prendra en charge les styles d'indentation et de guillemets.

Merci @dummdidumm pour la clarification et la solution de contournement! 😄

S'il existe un moyen de les insérer sous les importations existantes, ce serait une amélioration considérable par rapport à la façon dont cela fonctionne actuellement. L'extension serait un peu plus présentable (comme dans les didacticiels vidéo), et plus important encore, les importations sembleraient cohérentes (il est inhabituel de rechercher la dernière importation en haut).

Je viens de tester trois importations ( test , test2 , test3 dans cet ordre) avec Vetur et elles ont été insérées dans les bonnes positions. Voici les résultats pour comparaison :

Vétur :

<script lang="ts">
  import Vue from 'vue';
import { testStore1 } from './test';
import { testStore2 } from './test2';
import { testStore3 } from './test3';

  export default Vue.extend({ /*...*/ });
</script>

Svelte pour VSCode :

<script lang="ts">import { testStore3 } from "./test3";
import { testStore2 } from "./test2";

import { testStore } from "./test";


    export let name: string;

</script>

Le js/ts a un autre problème. Le sourcemap ne peut pas mapper la ligne suivante de la dernière importation à sa position d'origine.

Cette page vous a été utile?
0 / 5 - 0 notes