2010-07-01 5 views
3

노아 리차드의 diff 색칠 표본을 기반으로하는 VS2010의 새로운 구문 색칠 기능으로 작업하고 있습니다. 목표는 SpecFlow (http://www.specflow.org)에 대한 구문 색을 만드는 것입니다.VS2010 구문 색 지정 : 이전 분류 유형을 얻는 방법

필자의 경우 구문 요소를 찾는 것은 상당히 복잡하며 줄 단위가 아닙니다. 따라서 GetClassificationSpans를 구현할 때 전체 파일을 다시 구문 분석하지 않고 변경된 텍스트의 시작 부분을 가져 와서 해당 지점의 내용을 파싱합니다.

이전 분류를 ClassificationTags로 사용할 수 있다고 생각했습니다. IBufferTagAggregatorFactoryService 클래스를 사용하여이 작업을 수행했습니다.

작동하지만 이것이 최선의 방법인지는 확실하지 않습니다. 전체 분류 자 ​​클래스에 대해서만 태그 애그리 게이터를 생성합니까, 아니면 GetClassificationSpans가 호출 될 때마다 만들 수 있습니까? 구문 분석 상태를 기억할 특별한 태그를 만들까요?

어쨌든 올바른 방법이 아니며, 다른 제안에도 관심이 있습니다.

브롬, 가스파르

편집 : 나는 주제에 좋은 기사 시리즈를 발견했습니다 http://www.hill30.com/MikeFeingoldBlog/index.php/2009/07/31/django-editor-in-vs-2010-part-1-colors/

답변

4

기본적으로, 당신이 국가에게 자신을 기억해야합니다. 대부분의 VS 언어 서비스는 텍스트 변경시 업데이트되는 각 줄의 시작 부분에 대해 상태 쿠키를 유지합니다.

언제든지 분류기 수집기 또는 태그 애그리 게이터를 통해 분류를 가져 오는 것은 항상 현재 분류기/태그 생성기로 호출되므로 캐시 된 유형의 유형을 반환하지 않습니다 (또는 "마지막 "분류가 반환 됨). 편집기는 실제로이 정보를 캐시하지 않으며 분류 자의 정보가 포맷 된 보이는 선에 제공하는 정보에 대해 벙어리 패스 스루로 작동합니다. 당신이 분류에서 그것을 할 경우

또한, (어느 쪽 IClassifierProvider 또는 ITaggerProvider에서 제공), 당신은 다시 호출하는합니다 (aggregator로 호출하여 GetClassificationSpans로 분류가 응답 특히, 성가신 재귀 자신을 설정하는 몇 가지 이전 텍스트에 대한 분류 자로 등).

  1. ITagger<IClassificationTag> 같은 "분류"를 구현하고,에서를 제공합니다 : 다른 분류를 소비하는을 필요로 당신의 분류가 제대로 (그리고 자신의 분류를) 일 경우, 해당를 작성하는 유일한 안전한 방법은에 것은 IViewTaggerProvider.
  2. IBufferTagAggregatorFactoryService에서 ITagAggregator<IClassificationTag>을 잡고 단 한 번만 가져옵니다.
  3. 태그 작성기에 IDisposable을 구현하고 Dispose()에 태그 애그리 게이터를 배치하십시오.
+0

답을위한 thx! 주 쿠키에 대해 : 거기에 기본 제공 인프라가 있습니까 아니면 그냥 내 자신의 모델에 저장해야합니까? –

+0

이전 인터페이스 ('IVsColorizer')에는 새 인터페이스가 없었기 때문에 자신 만의 모델을 작성해야합니다. 그래도 문제가 생기면 알려주세요. 예전의'IVsColorizer'를 shimming 할 때 모델을 작성해야 분류 작업을 할 수있었습니다. –