Freigeben über


RazorEditorParser Klasse

Definition

Parser, der von Editoren verwendet wird, um eine erneute Analyse des gesamten Dokuments bei jeder Textänderung zu vermeiden.

public ref class RazorEditorParser : IDisposable
public class RazorEditorParser : IDisposable
type RazorEditorParser = class
    interface IDisposable
Public Class RazorEditorParser
Implements IDisposable
Vererbung
RazorEditorParser
Implementiert

Hinweise

Dieser Parser ist so konzipiert, dass Sich Editoren keine Gedanken über inkrementelle Analyse machen müssen. Die CheckForStructureChanges(TextChange) Methode kann mit jeder Änderung aufgerufen werden, die von einem Benutzer in einem Editor vorgenommen wird, und der Parser gibt ein Ergebnis an, das angibt, ob die Änderung inkrementell angewendet werden konnte.

Der allgemeine Workflow für Editoren mit diesem Parser lautet:

  1. Das Dokument wird vom Benutzer bearbeitet.
  2. Der Editor erstellt eine TextChange Struktur, die die Bearbeitung beschreibt und einen Verweis auf den aktualisierten Textpuffer bereitstellt.
  3. Der Editor ruft auf CheckForStructureChanges(TextChange) , die diese Änderung übergeben.
  4. Der Parser bestimmt, ob die Änderung einfach auf einen vorhandenen Analysestrukturknoten angewendet werden kann.
HINWEIS: Zusätzliche Flags können auf PartialParseResultden angewendet werden. Weitere Informationen finden Sie unter enum . Die Accepted Flags oder Rejected sind jedoch IMMER vorhanden.

Eine Änderung kann nur inkrementell analysiert werden, wenn eine einzelne eindeutige Span (siehe Microsoft.AspNetCore.Razor.Parser.SyntaxTree) in der Syntaxstruktur als Besitzer der gesamten Änderung identifiziert werden kann. Wenn sich eine Änderung beispielsweise mit mehreren Spans überschneidet, kann die Änderung nicht inkrementell analysiert werden, und eine vollständige Analyse ist erforderlich. Ein Span "besitzt" eine Änderung, wenn die Änderung entweder a) vollständig innerhalb ihrer Grenzen oder b) eine reine Einfügung (siehe TextChange) am Ende einer Span ist, deren EditHandler Änderung die Änderung akzeptieren kann (siehe CanAcceptChange(Span, TextChange)).

Wenn der RazorEditorParser zurückgibt Accepted, wird es sofort aktualisiert CurrentParseTree . Es wird jedoch erwartet, dass der Editor seine eigenen Datenstrukturen unabhängig aktualisiert. Dies kann CurrentParseTree verwendet werden, sobald der Editor von CheckForStructureChanges(TextChange)zurückgibt, aber er sollte (idealerweise) über Logik dafür verfügen, ohne die neue Struktur zu benötigen.

Wenn Rejected von CheckForStructureChanges(TextChange)zurückgegeben wird, wurde bereits eine Hintergrundanalyseaufgabe gestartet. Wenn diese Aufgabe abgeschlossen ist, wird das Ereignis ausgelöst, das DocumentParseComplete den neu generierten Code, die Analysestruktur und einen Verweis auf das Original TextChange enthält, das die Analyse verursacht hat, damit der Editor die neue Struktur mit allen Änderungen auflösen kann, die seit dem Aufrufen CheckForStructureChanges(TextChange)vorgenommen wurden.

Wenn ein Aufruf von CheckForStructureChanges(TextChange) auftritt, während eine Analyse bereits ausgeführt wird, wird die Analyse SOFORT abgebrochen und Rejected ohne erneute Überprüfung zurückgegeben. Das bedeutet, wenn ein Consumer aufruft CheckForStructureChanges(TextChange), der zurückgibt Rejected, und dann erneut aufruft, bevor DocumentParseComplete er ausgelöst wird, empfängt er nur ein DocumentParseComplete Ereignis, für die zweite Änderung.

Konstruktoren

RazorEditorParser(RazorEngineHost, String)

Erstellt den Editorparser Pro aktivem Editor sollte eine instance verwendet werden. Diese instance kann für Analysevorgänge freigegeben werden, sollte aber niemals zwischen Dokumenten freigegeben werden.

Eigenschaften

CurrentParseTree

Parser, der von Editoren verwendet wird, um eine erneute Analyse des gesamten Dokuments bei jeder Textänderung zu vermeiden.

FileName

Parser, der von Editoren verwendet wird, um eine erneute Analyse des gesamten Dokuments bei jeder Textänderung zu vermeiden.

Host

Parser, der von Editoren verwendet wird, um eine erneute Analyse des gesamten Dokuments bei jeder Textänderung zu vermeiden.

LastResultProvisional

Parser, der von Editoren verwendet wird, um eine erneute Analyse des gesamten Dokuments bei jeder Textänderung zu vermeiden.

Methoden

CheckForStructureChanges(TextChange)

Bestimmt, ob eine Änderung eine Strukturänderung am Dokument verursacht, und wendet sie an der vorhandenen Struktur an, wenn dies nicht der Fall ist. Startet automatisch eine neue Analyse, wenn eine Strukturänderung auftreten würde.

Dispose()

Verfügt über diesen Parser. Sollte aufgerufen werden, wenn das Editorfenster geschlossen und das Dokument entladen wird.

Dispose(Boolean)

Parser, der von Editoren verwendet wird, um eine erneute Analyse des gesamten Dokuments bei jeder Textänderung zu vermeiden.

GetAutoCompleteString()

Parser, der von Editoren verwendet wird, um eine erneute Analyse des gesamten Dokuments bei jeder Textänderung zu vermeiden.

Ereignisse

DocumentParseComplete

Ereignis, das bei Abschluss einer erneuten vollständigen Analyse des Dokuments ausgelöst wird.

Gilt für: