나는 semantic highlighting plugin for VS에서 작업 중입니다. 여기에서 웹 Example을 볼 수 있습니다.구문 분석 시맨틱 하이라이팅을위한 C# 코드 구문 분석
목표 : 모든 변수를 가져 와서 각각에 대해 서로 다른 분류를 작성하십시오.
문제 : C# 렉서를 작성하지 않고 코드에서 변수를 가져 오는 중입니다.
나의 현재 접근법은 ITagger를 사용합니다. 나는 ITagger로 전달되는 모든 범위의 태그를 얻기 위해 ITagAggregator를 사용합니다. 그런 다음 필자는 그것들을 걸러 내고 변수, 메소드 이름, 클래스 이름, 사용법 및 특성을 포함하는 "식별자"분류로만 범위를 만듭니다.
public class Classifier : ITagger<ClassificationTag> {
public IEnumerable<ITagSpan<ClassificationTag>> GetTags(NormalizedSnapshotSpanCollection spans) {
ITextSnapshot snapshot = spans[0].Snapshot;
var tags = _aggregator.GetTags(spans).Where((span) => span.Tag.ClassificationType.Classification.Equals("identifier")).ToArray();
foreach(var classifiedSpan in tags) {
foreach(SnapshotSpan span in classifiedSpan.Span.GetSpans(snapshot)) {
//generate classification based on variable name
yield return new TagSpan<ClassificationTag>(span, new ClassificationTag(_classification));
}
}
}
}
메타 데이터의 무리에 번들 된 모든 변수의 목록을 얻을 수있는 내장 C#을 렉서를 사용하는 것이 훨씬 쉬울 것이다. 이 데이터를 플러그인 개발에 사용할 수 있습니까? 내가 그것을 얻을 수있는 대안적인 방법이 있습니까?
흥미 롭습니다. 이것은 실제로 모든 기능을 사용하기 위해 VS 2014로 업데이트 할 필요가 없음을 의미합니다. 유용한 추가 사례가 있으십니까? –
@Jedy; 특히 당신이 정확히 알고 싶은 것은 무엇입니까? 내 대답에 "자동화 개체 모델 차트"를 추가하여 매우 유용하며 쉽게 찾을 수 없습니다. 탐색하는 데 도움이됩니다. 특히, "CODE 요소"를 참조하십시오. 당신은 아마도 당신이 원하는'CodeVariable'에 접근 할 수 있습니다. 추신 : 귀하의 * 특정 * 경우, 그것은 "기본 C# 분류 자"를 사용하는 것이 현명 할 수도 있습니다.이 경우 식별자 만 알고 싶다면. –