【问题标题】:VS2010 Extensibility: Custom document formattingVS2010 可扩展性:自定义文档格式
【发布时间】:2011-07-20 20:42:39
【问题描述】:

下午好,

我创建了一个将 Verilog 语言注册为有效内容类型的 Visual Studio 包。

我的语法高亮、大纲、智能缩进等都能正常工作。

但是,我希望能够让 Visual Studio 通过Edit->Advanced->Format Document/Selection 自动格式化整个文档。目前这些选项是不可见的,我希望我必须让 VS2010 知道(以某种方式)可以调用这些方法,并提供正确的方法来进行这种格式化。

我似乎在 VS2010 SDK 和文档中找不到任何有关格式化的参考。我希望ISmartIndent 是我正在寻找的解决方案,但似乎这段代码只在空行上运行,或者在按下回车键时运行。

有人对我如何解决这个问题有任何提示或想法吗?

谢谢,

贾瓦

编辑:我正在使用 VS2010 引入的托管扩展框架来完成此操作。我正在用 C# 编写(并且刚刚在我的问题中添加了 c# 标签)。谢谢

【问题讨论】:

  • 无论如何你可以将你的扩展发布到 codeplex 吗?听起来很酷,其他人也可以从中受益。
  • @Mrchief:我很乐意,但这取决于我的雇主。他们可能会让我发布一些更酷的 sn-ps(例如使用 MEF 的注释块的语法突出显示)。
  • 还没有看到这篇文章 - 正在研究它。 MPF 似乎与 MEF(我目前正在使用的)有很大不同。看起来我可能应该采用 MPF 方法来实现完整的语言支持。我正在检查它们是否兼容,但我不明白为什么它们不兼容。
  • @James McNellis:看起来我确实需要使用 MPF,这是最不幸的。我的很多代码都必须为语言服务重新编写。无论如何,你的建议是正确的。如果您愿意,可以将其作为答案提交,我会将其标记为正确。谢谢

标签: c# visual-studio visual-studio-2010 visual-studio-extensions


【解决方案1】:

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 为我指明了正确的方向。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 我已经获得了完整的大纲支持,它允许编辑器折叠代码块(例如 Verilog 中的 cmets/modules/etc)。这也是我在智能缩进中使用的,但它并不能帮助我解决使“格式文档”和“格式选择”可用的问题......
    • 它是否与将扩展链接到内容相关联?
    • 另外,我认为这与创建自己的语言服务提供商有关。虽然没有任何确切的参考...
    • 我已经将扩展程序链接到内容,没有任何问题。我只需要弄清楚如何为 Visual Studio 导出正确的方法,以了解格式文档/选择可用于此 contentType。
    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多