次の方法で共有


RazorEditorParser クラス

定義

テキストが変更されるたびにドキュメント全体を再解析しないようにするために、エディターが使用するパーサー。

public ref class RazorEditorParser : IDisposable
public class RazorEditorParser : IDisposable
type RazorEditorParser = class
    interface IDisposable
Public Class RazorEditorParser
Implements IDisposable
継承
RazorEditorParser
実装

注釈

このパーサーは、エディターが増分解析について心配する必要を回避できるように設計されています。 メソッドは CheckForStructureChanges(TextChange) 、エディター内のユーザーによって行われたすべての変更で呼び出すことができ、パーサーは変更を増分適用できたかどうかを示す結果を提供します。

このパーサーを使用するエディターの一般的なワークフローは次のとおりです。

  1. ユーザーがドキュメントを編集します。
  2. エディターは、 TextChange 編集を記述し、 更新 されたテキスト バッファーへの参照を提供する構造を構築します。
  3. エディターは、その変更を渡す を呼び出します CheckForStructureChanges(TextChange)
  4. パーサーは、変更を既存の解析ツリー ノードに単純に適用できるかどうかを判断します。
注: 追加のフラグは に PartialParseResult適用できます。詳細については、 を enum 参照してください。 ただし、 Accepted または Rejected フラグは常に存在します。

変更を増分解析できるのは、構文ツリーの 1 つの一意 Span の (を参照) Microsoft.AspNetCore.Razor.Parser.SyntaxTreeが変更全体を所有していると識別できる場合のみです。 たとえば、変更が複数 Spanの s と重複する場合、変更を段階的に解析することはできず、完全な再解析が必要です。 変更Spanが完全に境界内に存在する場合は変更を "所有" します。b) は、変更を受け入れ可能な の末尾SpanEditHandlerにある純粋な挿入 (を参照TextChange) です (を参照)。CanAcceptChange(Span, TextChange)

RazorEditorParser を返 Acceptedすと、すぐに更新されます CurrentParseTree 。 ただし、エディターは独自のデータ構造を個別に更新する必要があります。 CurrentParseTreeエディターが からCheckForStructureChanges(TextChange)戻るとすぐにこれを行うことができますが、(理想的には) 新しいツリーを必要とせずにこれを行うためのロジックが必要です。

Rejectedが によってCheckForStructureChanges(TextChange)返されると、バックグラウンド解析タスクが既に開始されています。 そのタスクが完了すると、 DocumentParseComplete 新しく生成されたコード、解析ツリー、および再解析の原因となった元 TextChange のへの参照を含むイベントが発生し、エディターが を呼び出 CheckForStructureChanges(TextChange)してから行われた変更に対して新しいツリーを解決できるようになります。

再解析が既に進行中に の CheckForStructureChanges(TextChange) 呼び出しが発生した場合、再解析は即時に取り消され、 Rejected 再解析を試みることなく返されます。 つまり、コンシューマーが を呼び出 CheckForStructureChanges(TextChange)して を返 Rejectedした場合、発生する前に DocumentParseComplete もう一度呼び出すと、2 番目の変更に対して 1 つの DocumentParseComplete イベントのみが受信されます。

コンストラクター

RazorEditorParser(RazorEngineHost, String)

エディター パーサーを構築します。 アクティブなエディターごとに 1 つのインスタンスを使用する必要があります。 このインスタンスは再解析間で共有 できますが 、ドキュメント間で共有 しないでください

プロパティ

CurrentParseTree

テキストが変更されるたびにドキュメント全体を再解析しないようにするために、エディターが使用するパーサー。

FileName

テキストが変更されるたびにドキュメント全体を再解析しないようにするために、エディターが使用するパーサー。

Host

テキストが変更されるたびにドキュメント全体を再解析しないようにするために、エディターが使用するパーサー。

LastResultProvisional

テキストが変更されるたびにドキュメント全体を再解析しないようにするために、エディターが使用するパーサー。

メソッド

CheckForStructureChanges(TextChange)

変更によってドキュメントの構造が変化するかどうかを判断します。変化しない場合は、これを既存のツリーに適用します。 構造が変化する場合は、自動的に再解析を開始します。

Dispose()

このパーサーを破棄します。 エディター ウィンドウが閉じられ、ドキュメントがアンロードされたときに呼び出す必要があります。

Dispose(Boolean)

テキストが変更されるたびにドキュメント全体を再解析しないようにするために、エディターが使用するパーサー。

GetAutoCompleteString()

テキストが変更されるたびにドキュメント全体を再解析しないようにするために、エディターが使用するパーサー。

イベント

DocumentParseComplete

ドキュメントの完全な再解析が完了する場合、イベントは発生しません。

適用対象