RazorEditorParser Clase

Definición

Analizador que usa el editor para evitar que se analice de nuevo todo el documento en cada cambio de texto.

public ref class RazorEditorParser : IDisposable
public class RazorEditorParser : IDisposable
type RazorEditorParser = class
    interface IDisposable
Public Class RazorEditorParser
Implements IDisposable
Herencia
RazorEditorParser
Implementaciones

Comentarios

Este analizador está diseñado para permitir a los editores evitar tener que preocuparse por el análisis incremental. CheckForStructureChanges(TextChange)Se puede llamar al método con todos los cambios realizados por un usuario en un editor y el analizador proporcionará un resultado que indica si se puede aplicar incrementalmente el cambio.

El flujo de trabajo general de los editores con este analizador es el siguiente:

  1. El usuario edita el documento.
  2. El editor crea una TextChange estructura que describe la edición y proporciona una referencia al búfer de texto actualizado .
  3. Llamadas CheckForStructureChanges(TextChange) del editor que pasan ese cambio.
  4. El analizador determina si el cambio se puede aplicar simplemente a un nodo de árbol de análisis existente.
Nota: se pueden aplicar marcas adicionales al PartialParseResult , vea esa enumeración para obtener más detalles. Sin embargo, Accepted las Rejected marcas o siempre estarán presentes.

Un cambio solo se puede analizar de forma incremental si un único, único, Span (vea Microsoft.AspNetCore.Razor.Parser.SyntaxTree ) en el árbol de sintaxis se puede identificar como propiedad del cambio completo. Por ejemplo, si un cambio se superpone con varios Span s, el cambio no se puede analizar de forma incremental y es necesario un reanálisis completo. Un Span "propietario" es un cambio si el cambio se produce en su totalidad dentro de los límites de o b) es una inserción pura (vea TextChange ) al final de un Span cuyo EditHandler puede aceptar el cambio (vea CanAcceptChange(Span, TextChange) ).

Cuando RazorEditorParser devuelve Accepted , se actualiza CurrentParseTree inmediatamente. Sin embargo, se espera que el editor actualice sus propias estructuras de datos de forma independiente. Puede usar CurrentParseTree para hacer esto, tan pronto como el editor vuelve de CheckForStructureChanges(TextChange) , pero debe tener (idealmente) tener lógica para hacerlo sin necesidad del nuevo árbol.

Cuando Rejected es devuelto por CheckForStructureChanges(TextChange) , ya se ha iniciado una tarea de análisis en segundo plano. Cuando la tarea finaliza, se DocumentParseComplete desencadena el evento que contiene el nuevo código generado, el árbol de análisis y una referencia al original TextChange que causó el reanálisis, para permitir que el editor resuelva el nuevo árbol con los cambios realizados desde la llamada a CheckForStructureChanges(TextChange) .

Si una llamada a se CheckForStructureChanges(TextChange) produce mientras un reanálisis ya está en curso, el reanálisis se cancela inmediatamente y Rejected se devuelve sin intentar volver a analizar. Esto significa que, si un consumidor llama a CheckForStructureChanges(TextChange) , que devuelve Rejected , lo llama de nuevo antes DocumentParseComplete de que se desencadene, solo recibirá un DocumentParseComplete evento, para el segundo cambio.

Constructores

RazorEditorParser(RazorEngineHost, String)

Construye el analizador de editor. Se debe usar una instancia de por cada editor activo. Esta instancia se puede compartir entre reanálisis, pero nunca debe compartirse entre documentos.

Propiedades

CurrentParseTree
FileName
Host
LastResultProvisional

Métodos

CheckForStructureChanges(TextChange)

Determina si un cambio dará lugar a un cambio estructural en el documento y, si no lo hará, lo aplica al árbol existente. Si se produciría un cambio estructural, se inicia automáticamente un reanálisis.

Dispose()

Desecha este analizador. Se debe llamar a cuando se cierra la ventana del editor y se descarga el documento.

Dispose(Boolean)
GetAutoCompleteString()

Eventos

DocumentParseComplete

Evento generado cuando se completa un reanálisis completo del documento.

Se aplica a