Language-tools: VSCode で自動インポートに一貫性がない

作成日 2020年07月09日  ·  3コメント  ·  ソース: sveltejs/language-tools

バグの説明
これは純粋に美的です。 VScode でファイルまたはコンポーネントを自動的にインポートすると、新しいインポートがファイルに正しく追加されません。

  • それらは、既存のインポートの上に挿入されます。
  • .tsおよび.svelteファイルの異なる位置に挿入されます。
  • それらは、エディターの quoteStyle 設定を無視します。

    • たとえば、VSCode でtypescript.preferences.quoteStyle: singleを使用すると、インポートでは二重引用符が引き続き使用されます。

  • インデントがありません。

再現する
sveltejs/templateから新しいプロジェクトを作成し、空のTest.svelteコンポーネントを作成して、それをApp.svelte自動インポートします。 TypeScript プロジェクトでは、 .tsファイルからのインポートが、スクリプト タグの直後に改行なしで挿入されていることもわかります。

Example

予想される行動
自動インポートは、通常の.tsファイルの場合とまったく同じように機能することを期待していますが、スクリプト タグによるインデントがいくつかあります。

  • 特に既存のインポートに従って、適切なインデントで挿入します。
  • 既存のインポートの下に挿入します。
  • すべてのファイル タイプに対して一貫して挿入します。
  • 可能であれば、エディターの引用スタイルを使用します。

私のコードは、手動作業なしで次のようになっているはずです。

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

    export let name;
</script>

システム (次の情報を入力してください):

  • OS: Windows 10
  • IDE: VSCode、1.46.1
  • プラグイン/パッケージ: Svelte for VSCode、101.1.1
Fixed bug

全てのコメント3件

根本的な問題は、テンプレート内でのインポート中に、その時点でコードが無効になるため、svelte コンパイラがエラーをスローすることです。 そうすると、 svelte2tsxは有効なtsxファイルを生成できないため、スクリプトタグのコンテンツのみを使用することになります。 パーサーが有効なコードを出力する場合、 svelte2tsxは変換されたtsxファイルを生成します。 これにより、TypeScript はインポートを別の場所に挿入し、生成されたtsxから元のsvelteへのマッピングはそれを上部にインポートします。 これらの問題を良い方法で回避する方法がわかりません。 ただし、ユーザーの好み (引用スタイル) に従うことは可能です。 回避策として、「インポートの整理」コマンドを使用すると、よりきれいなフォーマットでインデントと引用符のスタイルが処理されます。

@dummdidummの説明と回避策に感謝します。 😄

それらを既存のインポートの下に挿入する方法があれば、現在の動作よりも大幅に改善されます。 拡張機能は (ビデオ チュートリアルのように) もう少し見やすくなり、さらに重要なことに、インポートは一貫性を感じます (最新のインポートを一番上に探すのは珍しいことです)。

Vetur で 3 つのインポート ( testtest2test3順) をテストしたところ、正しい位置に挿入されました。 比較した結果は次のとおりです。

Vetur:

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

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

VSCode の Svelte:

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

import { testStore } from "./test";


    export let name: string;

</script>

js/ts には別の問題があります。 ソースマップは、最後のインポートの次の行を元の位置にマップできません。

このページは役に立ちましたか?
0 / 5 - 0 評価