Udostępnij za pośrednictwem


RazorEditorParser Klasa

Definicja

Analizator używany przez edytory, aby uniknąć ponownego analizowania całego dokumentu w każdej zmianie tekstu.

public ref class RazorEditorParser : IDisposable
public class RazorEditorParser : IDisposable
type RazorEditorParser = class
    interface IDisposable
Public Class RazorEditorParser
Implements IDisposable
Dziedziczenie
RazorEditorParser
Implementuje

Uwagi

Ten analizator ma na celu umożliwienie edytorom unikania konieczności martwienia się o analizowanie przyrostowe. Metodę CheckForStructureChanges(TextChange) można wywołać za pomocą każdej zmiany wprowadzonej przez użytkownika w edytorze, a analizator dostarczy wynik wskazujący, czy można było przyrostowo zastosować zmianę.

Ogólny przepływ pracy edytorów z tym analizatorem to:

  1. Użytkownik edytuje dokument.
  2. Edytor tworzy strukturę opisującą edycję TextChange i podając odwołanie do zaktualizowanego buforu tekstu.
  3. Edytor wywołuje CheckForStructureChanges(TextChange) przekazywanie tej zmiany.
  4. Analizator określa, czy można po prostu zastosować zmianę do istniejącego węzła drzewa analizy.
UWAGA: Dodatkowe flagi można zastosować do elementu PartialParseResult, aby enum uzyskać więcej informacji. Jednak flagi Accepted or Rejected zawsze będą obecne.

Zmiana może być analizowana przyrostowo tylko wtedy, Span gdy pojedyncze, unikatowe (zobacz Microsoft.AspNetCore.Razor.Parser.SyntaxTree) w drzewie składni można zidentyfikować jako właściciel całej zmiany. Jeśli na przykład zmiana nakłada się na wiele Spanwartości s, zmiana nie może być analizowana przyrostowo i konieczne jest pełne ponownej analizy. "SpanJest właścicielem" zmiany, jeśli zmiana występuje albo a) całkowicie w granicach lub b) jest to czysta wstawienie (patrz ) na końcuSpan, którego EditHandler może zaakceptować zmianę (patrz TextChangeCanAcceptChange(Span, TextChange)).

Gdy funkcja RazorEditorParser zwraca Acceptedwartość , zostanie natychmiast zaktualizowana CurrentParseTree . Oczekuje się jednak, że edytor zaktualizuje własne struktury danych niezależnie. Może to służyć CurrentParseTree do wykonania, gdy tylko edytor powróci z CheckForStructureChanges(TextChange), ale powinien (najlepiej) mieć logikę, aby to zrobić bez konieczności nowego drzewa.

Po Rejected powrocie przez CheckForStructureChanges(TextChange)program zadanie analizy w tle zostało już uruchomione. Po zakończeniu DocumentParseComplete tego zadania zdarzenie zostanie wyzwolone zawierające nowy wygenerowany kod, przeanalizuj drzewo i odwołanie do oryginalnego TextChange , które spowodowało ponowne przeanalizowanie, aby umożliwić edytorowi rozwiązanie nowego drzewa względem wszelkich zmian wprowadzonych od wywołania metody CheckForStructureChanges(TextChange).

Jeśli wywołanie do CheckForStructureChanges(TextChange) wystąpienia podczas ponownej analizy jest już w toku, ponowne analizowanie jest anulowane NATYCHMIAST i Rejected jest zwracane bez próby ponownej analizy. Oznacza to, że jeśli użytkownik wywołuje CheckForStructureChanges(TextChange)metodę , która zwraca Rejectedwartość , wywoła ją ponownie, zanim DocumentParseComplete zostanie wyzwolona, otrzyma tylko jedno DocumentParseComplete zdarzenie w przypadku drugiej zmiany.

Konstruktory

RazorEditorParser(RazorEngineHost, String)

Tworzy analizator edytora. Jedno wystąpienie powinno być używane dla aktywnego edytora. To wystąpienie może być współużytkowane przez ponowne analizy, ale nigdy nie powinno być udostępniane między dokumentami.

Właściwości

CurrentParseTree

Analizator używany przez edytory, aby uniknąć ponownego analizowania całego dokumentu w każdej zmianie tekstu.

FileName

Analizator używany przez edytory, aby uniknąć ponownego analizowania całego dokumentu w każdej zmianie tekstu.

Host

Analizator używany przez edytory, aby uniknąć ponownego analizowania całego dokumentu w każdej zmianie tekstu.

LastResultProvisional

Analizator używany przez edytory, aby uniknąć ponownego analizowania całego dokumentu w każdej zmianie tekstu.

Metody

CheckForStructureChanges(TextChange)

Określa, czy zmiana spowoduje zmianę strukturalną dokumentu, a jeśli nie, zastosuje ją do istniejącego drzewa. Jeśli nastąpi zmiana strukturalna, automatycznie uruchamia ponowne analizy.

Dispose()

Usuwa ten analizator. Powinno być wywoływane po zamknięciu okna edytora i zwalnianiu dokumentu.

Dispose(Boolean)

Analizator używany przez edytory, aby uniknąć ponownego analizowania całego dokumentu w każdej zmianie tekstu.

GetAutoCompleteString()

Analizator używany przez edytory, aby uniknąć ponownego analizowania całego dokumentu w każdej zmianie tekstu.

Zdarzenia

DocumentParseComplete

Zdarzenie zostało wyzwolone po zakończeniu pełnej ponownej analizy dokumentu.

Dotyczy