Share via


RazorEditorParser Classe

Definizione

Parser utilizzato dagli editor per evitare di rianalizzare l'intero documento a ogni modifica del testo.

public ref class RazorEditorParser : IDisposable
public class RazorEditorParser : IDisposable
type RazorEditorParser = class
    interface IDisposable
Public Class RazorEditorParser
Implements IDisposable
Ereditarietà
RazorEditorParser
Implementazioni

Commenti

Questo parser è progettato per consentire agli editor di evitare di doversi preoccupare dell'analisi incrementale. Il CheckForStructureChanges(TextChange) metodo può essere chiamato con ogni modifica apportata da un utente in un editor e il parser fornirà un risultato che indica se è stato in grado di applicare in modo incrementale la modifica.

Il flusso di lavoro generale per gli editor con questo parser è:

  1. L'utente modifica il documento.
  2. L'editor compila una TextChange struttura che descrive la modifica e fornisce un riferimento al buffer di testo aggiornato .
  3. Le chiamate CheckForStructureChanges(TextChange) dell'editor passano tale modifica.
  4. Il parser determina se la modifica può essere semplicemente applicata a un nodo dell'albero di analisi esistente.
NOTA: è possibile applicare flag aggiuntivi a PartialParseResult, vedere che enum per altri dettagli. Tuttavia, i Accepted flag o Rejected saranno sempre presenti.

Una modifica può essere analizzata in modo incrementale solo se un singolo, univoco, Span (vedere Microsoft.AspNetCore.Razor.Parser.SyntaxTree) nell'albero della sintassi può essere identificato come proprietario dell'intera modifica. Ad esempio, se una modifica si sovrappone a più Spans, la modifica non può essere analizzata in modo incrementale e è necessaria una correzione completa. Una Span modifica "proprietaria" se si verifica la modifica a) interamente all'interno dei limiti o b) è un inserimento puro (vedere TextChange) alla fine di un oggetto Span il cui EditHandler può accettare la modifica (vedere CanAcceptChange(Span, TextChange)).

Quando restituisce RazorEditorParserAccepted, viene aggiornato CurrentParseTree immediatamente. Tuttavia, è previsto che l'editor aggiorni le proprie strutture di dati in modo indipendente. Può essere usato CurrentParseTree per eseguire questa operazione, non appena l'editor restituisce da CheckForStructureChanges(TextChange), ma deve (idealmente) avere logica per farlo senza bisogno del nuovo albero.

Quando Rejected viene restituito da CheckForStructureChanges(TextChange), è già stata avviata un'attività di analisi in background. Al termine dell'attività, l'evento DocumentParseComplete verrà generato contenente il nuovo codice generato, l'albero di analisi e un riferimento all'originale TextChange che ha causato il reparse, per consentire all'editor di risolvere il nuovo albero in base alle modifiche apportate dalla chiamata CheckForStructureChanges(TextChange)a .

Se si verifica una chiamata a CheckForStructureChanges(TextChange) mentre un reparse è già in corso, la reparse viene annullata IMMEDIATAMENTE e Rejected viene restituita senza tentare di eseguire nuovamente la riparazione. Ciò significa che se un consumer chiama CheckForStructureChanges(TextChange), che restituisce Rejected, lo chiama nuovamente prima DocumentParseComplete che venga generato, riceverà un DocumentParseComplete solo evento, per la seconda modifica.

Costruttori

RazorEditorParser(RazorEngineHost, String)

Costruisce il parser dell'editor. Un'istanza deve essere usata per ogni editor attivo. Questa istanza può essere condivisa tra le rieparse, ma non deve mai essere condivisa tra documenti.

Proprietà

CurrentParseTree

Parser utilizzato dagli editor per evitare di rianalizzare l'intero documento a ogni modifica del testo.

FileName

Parser utilizzato dagli editor per evitare di rianalizzare l'intero documento a ogni modifica del testo.

Host

Parser utilizzato dagli editor per evitare di rianalizzare l'intero documento a ogni modifica del testo.

LastResultProvisional

Parser utilizzato dagli editor per evitare di rianalizzare l'intero documento a ogni modifica del testo.

Metodi

CheckForStructureChanges(TextChange)

Determina se una modifica causerà un cambiamento strutturale del documento e, in caso contrario, la applica alla struttura ad albero esistente. Se si verifica un cambiamento strutturale, si avvia automaticamente un reparse.

Dispose()

Elimina questo parser. Deve essere chiamato quando la finestra dell'editor viene chiusa e il documento viene scaricato.

Dispose(Boolean)

Parser utilizzato dagli editor per evitare di rianalizzare l'intero documento a ogni modifica del testo.

GetAutoCompleteString()

Parser utilizzato dagli editor per evitare di rianalizzare l'intero documento a ogni modifica del testo.

Eventi

DocumentParseComplete

Evento generato quando viene eseguito un reparse completo del documento.

Si applica a