2012-02-27 11 views
2

私は言語サービスに取り組んでおり、ユーザがコードをより速くタイプした後に解析したいと考えています。言語サービス:解析を強制する方法はありますか?

今はMSDNに記載されているParseReason.CheckOnIdleメカニズムに依存していますが、ユーザーがコードを入力してから長時間と呼ばれることがよくあります。場合によっては、カーソルを別の行に移動してより速くトリガーすることもできます。

私がしたいのは、ユーザーがファイルに入力したことを検出した後、強制的にファイルを解析することです。私はユーザーが入力しているときを検出することができますが、ParseRequestでパーサーをトリガーする方法がわかりません。

+0

LanguageServiceクラスにCreateParseRequestメソッドがあることに気付きました。だから私はParseReason.CheckでOnCaretMovedから呼び出すことを試みたが、私のParseSourceメソッドを呼び出さない...混乱した。 –

答えて

0

私は同様の問題に遭遇していました。私はVSで開いていないファイルをスキャンしたかったのです。私ができる最良の方法は、VSによって呼び出されるように私の解析機能を抽象化することでしたが、VSを経由せずに私の望むときはいつでも、私の拡張機能に別の内部関数によって呼び出されました。 ParseRequestでの直接VS呼び出し。

あなたがそれをやるより良い方法を見つけたら、私は好奇心が強いでしょう。

0

Sourceの実装でBeginParse()を呼び出すことができます。これにより、ParseRequestが生成され、構文解析の理由がCheckになります。自分の言語サービスのOnIdleタイマーをオフにしてテストしたところ、正常に動作しているようです。

ユーザのキー入力を検出するコードがLanguageService実装のインスタンスにアクセスできる場合は、service.GetSource(...).BeginParse()を使用できます。それがSourceへのアクセス権を持っている場合は、さらに簡単です。

関連する問題