2014-03-24 47 views
2

有沒有辦法在Visual Studio代碼編輯器(C/C++或C#)中以編程方式確定當前插入符的位置是在註釋塊內(在「//」之後還是在/ * * /之間)?我試圖用IContentType這樣的:如何在Visual Studio中確定當前脫字符位置是否在註釋塊中?

if (m_textView.TextBuffer.ContentType.TypeName == "comment") 

但似乎ContentType.BaseTypes只包含與整個文件更一般的內容類型(如「文本」,「代碼」,「C/C++」)。

回答

2

您應該可以使用IClassifierAggregatorService訪問編輯器中用於語法高亮顯示的分類。如果你不打我,今天晚上我會發佈一個更完整的例子,顯示脫字號下的文本的提取IClassificationType

1

ContentType屬性是指ITextBuffer實例的內容。這通常是C#,文本,代碼等......它不包含語義信息,如評論或關鍵字

不幸的是,目前沒有好的API公開此信息。註釋是特定於語言的結構,目前Visual Studio中唯一的通用語言API是代碼模型,我不相信它支持註釋。

未來的API如Roslyn將提供您正在尋找的信息。這將無法使用,直到至少的Visual Studio 2013

編輯

還有的是一些猜想至於是否IClassificationType可以用來獲取有關意見後,信息的發佈。在高層次上,這確實可以被使用,儘管它可能是我會避免做的事情。過去我曾多次試圖從分類器中按需獲取信息。你可以遇到很多微妙的性能問題。

+0

@JaredPar - 謝謝你的回答。我認爲,只要語言服務包正確突出顯示註釋,就可以從某些語言服務接口(IVsProvideColorableItems或其他)獲取所需的信息。 –

+0

@ 280Z28 - 我發現一個看起來與問題相關的界面,但仍不知道如何使用它:IStandardClassificationService –

+0

@ 280Z28 - 謝謝。使用此類並調用GetClassifier(),然後調用GetClassificationSpans(),當插入符號位於註釋塊中時,將獲得跨度類型「註釋」。 –

相關問題