RazorEditorParser Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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:
- Użytkownik edytuje dokument.
- Edytor tworzy strukturę opisującą edycję TextChange i podając odwołanie do zaktualizowanego buforu tekstu.
- Edytor wywołuje CheckForStructureChanges(TextChange) przekazywanie tej zmiany.
- Analizator określa, czy można po prostu zastosować zmianę do istniejącego węzła drzewa analizy.
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. |