2

下午好,VS2010擴展:自定義文檔格式

我創建了一個Visual Studio包,註冊Verilog語言爲有效的內容類型。

我有語法突出顯示,概述,智能縮進,等工作。

但是,我希望能夠讓Visual Studio通過Edit->Advanced->Format Document/Selection自動格式化整個文檔。目前這些選項是不可見的,我期望我必須讓VS2010知道(以某種方式)可以調用這些方法,並提供正確的方法來執行此格式。

我似乎無法找到VS2010 SDK和文檔格式的任何參考。我希望ISmartIndent是我正在尋找的解決方案,但似乎這個代碼只在空行上運行,或者當按下回車鍵時。

有沒有人有任何關於如何解決這個問題的提示或想法?

感謝,

Giawa

編輯:我使用的是VS2010推出的管理擴展框架來實現這一目標。我正在用C#編寫(並在我的問題中添加了c#標籤)。由於

+0

是否有無論如何你可以發佈你的擴展到codeplex?聽起來很酷,其他人也可能從中受益。 – Mrchief

+0

@Mrchief:我很想去,但這將取決於我的僱主。他們可能會讓我發佈一些較酷的代碼片段(例如使用MEF評論塊的語法突出顯示)。 – Giawa

+1

你有沒有看過[關於「重新格式化代碼」的MSDN部分?](http://msdn.microsoft.com/zh-cn/library/bb164633.aspx)(具體來說,['ProvideLanguageServiceAttribute.EnableFormatSelection']( http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.providelanguageserviceattribute.enableformatselection.aspx))。 –

回答

2

MEF是不是爲了實現創造一個語言服務的任務,以正確的方式。相反,託管軟件包框架(MPF)應該用於註冊語言服務並執行諸如語法突出顯示,概述,解析,格式化,解析等任務。

因爲我的問題是關於格式化的,所以我會介紹在我的答案中有一點點。您必須覆蓋您爲語言服務創建的自定義Source對象中的ReformatSpan方法。在MSDN webpages for VS2005上也有一個很好的例子(適用於VS2010)。

您也可以通過直接調用ReformatSpan方法隨時強制格式化。下面是我的代碼工作的例子:

Region region = service.GetRegionContainingLine((line > 0 ? line - 1 : 0)); 

if (region != null) 
{ 
    using (EditArray mgr = new EditArray(this, service.LastActiveTextView, true, "Reformat Brace")) 
     this.ReformatSpan(mgr, region.ToSpan()); 
} 

感謝@James McNellis指着我在正確的方向。

1
+0

我已經有了完整的大綱支持,它允許編輯器摺疊代碼塊(例如Verilog中的註釋/模塊/等)。這也是我在智能縮進中使用的,但它不能幫助我解決「格式化文檔」和「格式選擇」的問題...... – Giawa

+0

它可能與將擴展鏈接到內容相關聯嗎? – Mrchief

+0

另外,我認爲這與創建自己的語言服務提供商有關。沒有任何確切的參考,但... – Mrchief