1

Visual Studio でカスタム言語のコード補完を作成しようとしています。構文の強調表示や中括弧の一致など、より単純なエディター操作のコードが既にあります。次に、コード補完に移りたいと思います。しかし、ちょっとした問題が発生しました。データ ソースです。

C# などの言語と同様に、複数のファイル間で暗黙的にコードを共有します。これは、1 つのファイルを完全にコーディングするには、他のファイルの内容を知る必要があることを意味します。より具体的には、単純にプロジェクトとプロジェクト アイテムを反復処理してファイルを開くことはできますが、これは次善のソリューションです。たとえば、ユーザーが行った未保存の変更を完全にコーディングすることはできません。別の理由として、構文の強調表示などに対するユーザーの要求を満たすために、コンテンツを字句解析または解析するという多くの処理作業を既に行っており、その作業を複製するつもりはありません。

プロジェクト内の他のファイルの内容にアクセスし、それらの ITextBuffers を取得して、既に行った作業を再利用するにはどうすればよいですか?

4

1 に答える 1

2

ITextBufferディスク上に存在するが現在 Visual Studio で開かれていないファイルには提供されません。ITextBufferを使用して、任意のファイルの のインスタンスを作成することができますITextDocumentFactoryService::CreateAndLoadDocument。これは文字列を受け取り、にITextDocumentアクセスできるインスタンスを返しますITextBuffer

現在開いている既存ITextBufferのファイルを見つけるには、次のようにします。

  • IVsRunningDocumentTable::FindDocument これはファイル パスを受け取り、そのファイルが現在開いている場合はそのファイルを表す Cookie を返します ()
  • IVsRunningDocumentTable::GetDocumentInfoこれは Cookie を受け取り、インスタンスを返しIVsTextLinesます ()
  • IVsEditorAdaptersFactoryService::GetDataBufferIVsTextLines受け取って返すITextBuffer()
于 2013-08-26T21:21:35.900 に答える