RazorEditorParser 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
편집기에서 각 텍스트 변경 시 전체 문서를 재분석하지 않도록 사용되는 파서입니다.
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
참조하세요. 그러나 또는 Rejected 플래그는 Accepted 항상 존재합니다.구문 트리에서 고유한 Span 단일 변경 내용(참조 Microsoft.AspNetCore.Razor.Parser.SyntaxTree)을 전체 변경 내용을 소유하는 것으로 식별할 수 있는 경우에만 변경 내용을 증분 방식으로 구문 분석할 수 있습니다. 예를 들어 변경 내용이 여러 Spans와 겹치는 경우 변경 내용을 증분 방식으로 구문 분석할 수 없으며 전체 재분석이 필요합니다. Span 변경이 발생하는 경우 "소유" 변경은 a) 완전히 경계 내에 있거나 b) 변경을 수락할 수 있는 EditHandler 의 Span 끝에 있는 순수 삽입(참조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 |
전체 문서 재분석이 완료된 경우 실행되는 이벤트입니다. |