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