4

src \ servicesコードを読んだ後、これは言語サービスのホストが満たさなければならないインターフェースのようです。

//
// Public interface of the host of a language service instance.
//
export interface ILanguageServiceHost extends TypeScript.ILogger {
    getCompilationSettings(): TypeScript.CompilationSettings;
    getScriptCount(): number;
    getScriptId(scriptIndex: number): string;
    getScriptSourceText(scriptIndex: number, start: number, end: number): string;
    getScriptSourceLength(scriptIndex: number): number;
    getScriptIsResident(scriptIndex: number): bool;
    getScriptVersion(scriptIndex: number): number;
    getScriptEditRangeSinceVersion(scriptIndex: number, scriptVersion: number): TypeScript.ScriptEditRange;
}

ドキュメントやサンプルを見つけることができませんでした。いくつかの方法は自明ですが、他の方法は特にそうではありません。

getScriptId()
getScriptIsResident()
getScriptVersion()
getScriptEditRangeSinceVersion()

言語サービスAPIを使用する準備はできていますか?誰かが上記の方法の目的を簡単に説明できますか?

4

1 に答える 1

7

免責事項:言語サービスホスティングAPIは、将来のバージョンで変更される予定です。変更の完全な範囲がどのようになるかはわかりません。状況はほぼ同じになると思いますが、ほぼ確実に重大な変更があります。

src\harness\harness.tsまた、参照できる言語サービスの単体テストに使用されるホスティングAPIの完全なTypeScript実装があります。リストした関数の概念的な内訳は次のとおりです。

getScriptId()

ファイル(スクリプト)ごとに一意の文字列を返す必要がありますが、呼び出しから呼び出しまで変更されません。スクリプトのファイル名を返すとうまくいくでしょう。

getScriptIsResident()

コンパイラには、変更できない「常駐」ファイルの概念があります(たとえば、lib.d.ts)。常駐ステータスは、パフォーマンス上の理由で使用されます。たとえば、常駐ファイルから生成された型は不変と見なされます(これが、lib.d.tsで定義された型を拡張しようとするとVisual Studioで奇妙に見える理由です)。ここですべてのファイルを安全に返すことができfalseます。または、ファイルが不変であることがわかっている場合は、を返すことができますtrue。「常駐」ファイルの概念は、改良されたタイプチェッカーがオンラインになると、コンパイラの将来のバージョンで廃止されます。

getScriptVersion()

ここでは、スクリプトのソーステキストが変更されるたびに増分される単調に増加する数値を返す必要があります。言語サービスはこの番号を使用して、ファイルの再解析/再入力チェックを実行する必要があるかどうかを判断します。

getScriptEditRangeSinceVersion()

この関数は、現在から指定された以前のバージョン番号(上記を参照)までの間に発生した編集範囲のリスト(できれば自明)を返す必要がありますgetScriptVersion。明らかにこれを実装するのは少し面倒ですが、ここで戻ることは許可されてTypeScript.ScriptEditRange.unknown()います。その時点で、言語サービスはファイルの完全な再解析を実行します(パフォーマンスに大きな影響があるため、インタラクティブなコンテキストでは慎重に実行してください)。

于 2013-01-08T18:18:26.727 に答える