問題
Reactのツールを使用すると、次のようなコンポーネントにコメントできます。
/** Documentation that will appear on hover in other places where this is imported */
function MyComponent() { return null }
しかし、Svelteでは、これを行う方法が見つかりませんでした。
解決
VSCodeやVim / Neovim(coc.nvimを使用)などのエディターのホバードキュメントで取り上げられるコメントをどこに配置できるか知りたいです。
説明のために、ここではMyComponent
ホバリングしていますが、 import MyComponent
しか表示されません。
docstring Documentation that will appear on hover in other places where this is imported
をツールチップに含めたいのですが。
私はしばらくの間これをグーグルで検索し、TypeScriptでローカルセットアップを試しましたが、それを行う方法が見つかりません。 Svelteコンポーネントのメタデータに関する興味深い関連する議論を見つけましたが、議論は小道具の種類に関するものです。
編集:これがコンパイラに追加された方がよいかどうかを議論しているので、ここで同様の問題を作成しましたhttps://github.com/sveltejs/svelte/issues/5102
これはスクリプトタグのないコンポーネントにも役立つ可能性があるため、HTMLコメントを使用することをお勧めします。 次に、 svelte2tsx
は、特別なタグ( @doc
)で始まるHTMLコメントを検索し、コンテンツをjsdocとしてデフォルトのエクスポートの上に配置します。
意見は? 他のアイデア?
私はこれを実装することに本当に興味があります。 ただし、一部の開発者が毎日_非常に頻繁に_使用する機能であるため、慎重に設計する必要があると思います。
頭に浮かぶのは次のとおりです。
/**
* <strong i="6">@file</strong> Here is my documentation for this component
*/
ファイルの開始時。 しかし、HTMLコメントだけがそこで機能すると思いますよね?
また、他のタグにもっと似せるために、 <svelte:head>
似た<svelte:documentation>
タグがいいと思いますが、それはコンパイラーで実装する必要があります。
おそらく<svelte:options documentation="blabla" />
さえ?
これには、コンパイラでの作業とメインリポジトリの承認も必要になります。 オプションはコンパイラによって検証されました。
メインリポジトリで同様の問題を作成しました。結論に達することができるかどうかを見てみましょう:+1:
https://github.com/sveltejs/language-tools/pull/282がマージされると、その半分が実行され
ここで私がする必要があるのは、 @doc
HTMLコメントからdocstringを取得し、それをsvelte2tsxのaddComponentExport
に追加することです。
@dummdidumm現在、docstringは名前が付けられていないため、デフォルトのエクスポートに追加することはできません。
export default class {
$$prop_def = __sveltets_partial(render().props)
$$slot_def = render().slots
}
各ファイルのルートスコープに配置できるのはrender
とデフォルトのエクスポートだけなので、 Component
ような一般的な名前を付けるのは無害だと思います。 または、ファイルの名前から選択しますか?
はい、問題ありません。
このコードのいずれかがアプリケーションのランタイムの一部になることはありますか、それともツールのサポートのためだけにありますか?
ツーリングのためだけに。
そのデフォルトのエクスポートについて:インポートのオートコンプリートにどのように影響するかを確認する必要があります。
うーん。 現在、どのように機能するのかわかりません。 このようなTSのみの環境でエミュレートしようとすると、次のようになります。
// Component.ts
export default class {}
他のファイルではComponent
自動補完は得られませんが、Svelteではなんとか機能します。 私はおそらくLSPの関連コードを読む必要があります。
とにかく、私が代わりにこれを行う場合:
// Component.ts
export default class Component {}
次に、他のファイルでデフォルトのエクスポートの自動完了をComponent
として取得します。 ですから、今のところ、デフォルトのエクスポートにファイルと同じ名前を付けてから、ライブでテストするのが安全だと思います。
了解しました。2つのオプションを試しましたが、LSPを使用すると、コンポーネントのインポートのオートコンプリートで機能するのは次のとおりです。
export default class {
// etc
}
私が試したこと:
export default class Name
行に名前を追加します。〜どちらも機能しません。 現在、コンプリーションプロバイダー(https://github.com/sveltejs/language-tools/blob/master/packages/language-server/src/plugins/typescript/features/CompletionProvider.ts)を調べて、犯人は、TSのみの環境では、クラスの名前に基づいて、名前付きクラスのデフォルトのエクスポートの完了を取得するためです。
更新:クラスを宣言してから、別の行でデフォルトとしてエクスポートすると、エクスポートの名前がファイル名と同じである限り機能します。 私はこのオプションを選びます。
ええ、svelteコンポーネントのインポート完了には、基本的にインポート提案を構成する追加のコードがいくつかあります。 svelte2tsxにファイル名と同じ名前付きのデフォルトエクスポートがある場合、そのコードは破棄される可能性があります。