RazorEditorParser Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Средство синтаксического анализа, используемое редакторами, чтобы избежать повторного синтаксического анализа всего документа при каждом изменении текста.
public ref class RazorEditorParser : IDisposable
public class RazorEditorParser : IDisposable
type RazorEditorParser = class
interface IDisposable
Public Class RazorEditorParser
Implements IDisposable
- Наследование
-
RazorEditorParser
- Реализации
Комментарии
Это средство синтаксического анализа позволяет редакторам не беспокоиться о добавочном синтаксическом анализе. Метод CheckForStructureChanges(TextChange) можно вызывать с каждым изменением, сделанным пользователем в редакторе, и средство синтаксического анализа предоставит результат, указывающий, удалось ли ему постепенно применить изменение.
Общий рабочий процесс для редакторов с этим анализатором:
- Пользователь редактирует документ.
- Редактор создает структуру, TextChange описывающую изменение и предоставляющую ссылку на обновленный текстовый буфер.
- Редактор вызывает передачу CheckForStructureChanges(TextChange) этого изменения.
- Средство синтаксического анализа определяет, можно ли просто применить изменение к существующему узлу дерева синтаксического анализа.
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 |
Событие, инициируемое после завершения полного синтаксического анализа документа. |