다음을 통해 공유


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 참조하세요. 그러나 또는 Rejected 플래그는 Accepted 항상 존재합니다.

구문 트리에서 고유한 Span 단일 변경 내용(참조 Microsoft.AspNetCore.Razor.Parser.SyntaxTree)을 전체 변경 내용을 소유하는 것으로 식별할 수 있는 경우에만 변경 내용을 증분 방식으로 구문 분석할 수 있습니다. 예를 들어 변경 내용이 여러 Spans와 겹치는 경우 변경 내용을 증분 방식으로 구문 분석할 수 없으며 전체 재분석이 필요합니다. Span 변경이 발생하는 경우 "소유" 변경은 a) 완전히 경계 내에 있거나 b) 변경을 수락할 수 있는 EditHandlerSpan 끝에 있는 순수 삽입(참조TextChange)입니다(참조CanAcceptChange(Span, TextChange)).

RazorEditorParser 를 반환 Accepted하면 즉시 업데이트됩니다 CurrentParseTree . 그러나 편집기는 자체 데이터 구조를 독립적으로 업데이트해야 합니다. 편집기가 에서 CheckForStructureChanges(TextChange)반환되는 즉시 이 작업을 수행하는 데 사용할 CurrentParseTree 수 있지만( 이상적으로는) 새 트리를 필요로 하지 않고 이 작업을 수행하는 논리가 있어야 합니다.

Rejected 이 에서 CheckForStructureChanges(TextChange)반환되면 백그라운드 구문 분석 작업이 이미 시작되었습니다. 해당 작업이 완료되면 DocumentParseComplete 새로 생성된 코드, 구문 분석 트리 및 재분석의 원인이 된 원본 TextChange 에 대한 참조를 포함하는 이벤트가 발생하므로 편집기는 를 호출CheckForStructureChanges(TextChange)한 이후 변경된 내용에 대해 새 트리를 resolve 수 있습니다.

재분석이 이미 진행 중인 동안 에 대한 호출 CheckForStructureChanges(TextChange) 이 발생하면 재분석이 즉시 취소되고 Rejected 재분석 시도 없이 반환됩니다. 즉, 소비자가 를 반환Rejected하는 를 호출CheckForStructureChanges(TextChange)한 다음 가 실행되기 전에 DocumentParseComplete 다시 호출하는 경우 두 번째 변경에 대해 하나의 DocumentParseComplete 이벤트만 수신합니다.

생성자

RazorEditorParser(RazorEngineHost, String)

편집기 파서를 생성합니다. 활성 편집기당 하나의 instance 사용해야 합니다. 이 instance 재분석 간에 공유할 있지만 문서 간에 공유해서는 안 됩니다.

속성

CurrentParseTree

편집기에서 각 텍스트 변경 시 전체 문서를 재분석하지 않도록 사용되는 파서입니다.

FileName

편집기에서 각 텍스트 변경 시 전체 문서를 재분석하지 않도록 사용되는 파서입니다.

Host

편집기에서 각 텍스트 변경 시 전체 문서를 재분석하지 않도록 사용되는 파서입니다.

LastResultProvisional

편집기에서 각 텍스트 변경 시 전체 문서를 재분석하지 않도록 사용되는 파서입니다.

메서드

CheckForStructureChanges(TextChange)

변경 시 문서 구조도 변경되는지 여부를 확인하며 이 변경 사항을 기존 트리에 적용합니다. 구조가 변경되면 재분석을 자동으로 시작합니다.

Dispose()

이 파서가 삭제됩니다. 편집기 창이 닫혀 있고 문서가 언로드될 때 호출해야 합니다.

Dispose(Boolean)

편집기에서 각 텍스트 변경 시 전체 문서를 재분석하지 않도록 사용되는 파서입니다.

GetAutoCompleteString()

편집기에서 각 텍스트 변경 시 전체 문서를 재분석하지 않도록 사용되는 파서입니다.

이벤트

DocumentParseComplete

전체 문서 재분석이 완료된 경우 실행되는 이벤트입니다.

적용 대상