Поделиться через


RazorEditorParser Класс

Определение

Средство синтаксического анализа, используемое редакторами, чтобы избежать повторного синтаксического анализа всего документа при каждом изменении текста.

public ref class RazorEditorParser : IDisposable
public class RazorEditorParser : IDisposable
type RazorEditorParser = class
    interface IDisposable
Public Class RazorEditorParser
Implements IDisposable
Наследование
RazorEditorParser
Реализации

Комментарии

Это средство синтаксического анализа позволяет редакторам не беспокоиться о добавочном синтаксическом анализе. Метод CheckForStructureChanges(TextChange) можно вызывать с каждым изменением, сделанным пользователем в редакторе, и средство синтаксического анализа предоставит результат, указывающий, удалось ли ему постепенно применить изменение.

Общий рабочий процесс для редакторов с этим анализатором:

  1. Пользователь редактирует документ.
  2. Редактор создает структуру, TextChange описывающую изменение и предоставляющую ссылку на обновленный текстовый буфер.
  3. Редактор вызывает передачу CheckForStructureChanges(TextChange) этого изменения.
  4. Средство синтаксического анализа определяет, можно ли просто применить изменение к существующему узлу дерева синтаксического анализа.
ПРИМЕЧАНИЕ. Дополнительные флаги можно применить к PartialParseResult, см enum . дополнительные сведения. Однако флаги Accepted или Rejected всегда будут присутствовать.

Изменение может быть проанализировано только в том случае, если одно уникальное Span (см. Microsoft.AspNetCore.Razor.Parser.SyntaxTree) в дереве синтаксиса может быть идентифицировано как владение всем изменением. Например, если изменение перекрывается с несколькими Span, изменение не может быть проанализировано поэтапно и требуется полный повторный анализ. Объект Span "владеет" изменением, если изменение происходит: а) полностью в пределах его границ или б) является чистой вставкой (см. TextChange) в конце Span объекта , который EditHandler может принять изменение (см CanAcceptChange(Span, TextChange). ).

Когда объект RazorEditorParser возвращает Acceptedзначение , он обновляется CurrentParseTree немедленно. Тем не менее, ожидается, что редактор будет обновлять собственные структуры данных независимо друг от друга. Он может использовать CurrentParseTree для этого, как только редактор возвращается из CheckForStructureChanges(TextChange), но он должен (в идеале) иметь логику для этого без необходимости нового дерева.

Если Rejected возвращается CheckForStructureChanges(TextChange), фоновая задача синтаксического анализа уже запущена. По завершении этой задачи будет запущено событие, DocumentParseComplete содержащее новый созданный код, дерево синтаксического анализа и ссылку на исходный TextChange объект, вызвавшего повторное анализ, чтобы редактор разрешил новое дерево с любыми изменениями, внесенными с момента вызова CheckForStructureChanges(TextChange).

Если вызов выполняется CheckForStructureChanges(TextChange) во время повторного просмотра, он немедленно отменяется и Rejected возвращается без попыток повторного просмотра. Это означает, что если потребитель вызывает CheckForStructureChanges(TextChange), который возвращает Rejected, а затем вызывает его еще раз перед DocumentParseComplete срабатыванием, он получит только одно DocumentParseComplete событие для второго изменения.

Конструкторы

RazorEditorParser(RazorEngineHost, String)

Создает средство синтаксического анализа редактора. Для каждого активного редактора следует использовать один экземпляр. Этот экземпляр можно совместно использовать для повторного просмотра, но никогда не должен использоваться совместно между документами.

Свойства

CurrentParseTree

Средство синтаксического анализа, используемое редакторами, чтобы избежать повторного синтаксического анализа всего документа при каждом изменении текста.

FileName

Средство синтаксического анализа, используемое редакторами, чтобы избежать повторного синтаксического анализа всего документа при каждом изменении текста.

Host

Средство синтаксического анализа, используемое редакторами, чтобы избежать повторного синтаксического анализа всего документа при каждом изменении текста.

LastResultProvisional

Средство синтаксического анализа, используемое редакторами, чтобы избежать повторного синтаксического анализа всего документа при каждом изменении текста.

Методы

CheckForStructureChanges(TextChange)

Определяет, приведет ли изменение к изменению структуры документа. Если это не так, применяет это изменение к существующему дереву. Если произойдет изменение структуры, автоматически начинается повторный синтаксический анализ.

Dispose()

Удаляет это средство синтаксического анализа. Должен вызываться при закрытии окна редактора и выгрузке документа.

Dispose(Boolean)

Средство синтаксического анализа, используемое редакторами, чтобы избежать повторного синтаксического анализа всего документа при каждом изменении текста.

GetAutoCompleteString()

Средство синтаксического анализа, используемое редакторами, чтобы избежать повторного синтаксического анализа всего документа при каждом изменении текста.

События

DocumentParseComplete

Событие, инициируемое после завершения полного синтаксического анализа документа.

Применяется к