9

去年我为 Visual Studio 编写了一个语言服务,它为 NHaml 文件添加了语法高亮:http: //github.com/snappycode/hamleditor

澄清一下,NHaml 是一种 html 模板语言,它可以像 aspx 文件一样混入代码元素。这个插件增加了对编辑 NHaml 文件的 IDE 的支持,但基本上只增加了语法高亮。

我想知道是否有人知道如何像现在在 aspx 文件中那样将内联 c# 智能感知添加到服务中。我希望不用自己为插件专门编写整个 c# 语法就可以做到这一点。

有没有人写过混合语言的语言服务?

更新:看起来火花视图引擎的家伙在这里取得了一些进展,我正在调查他们的实施

4

4 回答 4

2

我检查了 Spark View Engine,他们似乎制作了一个通用的 ATL 东西(称为 SparkLanguagePackageLib),实际上似乎不包含任何 Spark 特定的东西。它似乎只是一个需要以下内容的通用 C# 智能感知库:

  • 原始代码
  • 从原始代码生成的 C# 源代码
  • 两者之间的位置映射(例如,第 2 行 pos 5 上的代码在输出中映射到第 4 行 pos 10 等)
  • 其他一些东西,比如绘画(?)

之后,您可以致电:

events.OnGenerated(
    primaryText, // original source code
    entry.SourceCode, // generated sourcecode
    cMappings, // mappings between the two
    ref mappings[0], // ?
    cPaints, // ?
    ref paints[0]); // ?

我试图在该 C++ 库中找到特定于 Spark 的东西,但我找不到任何东西:所有与 spark 相关的东西都被拆分为一个单独的 C# 代码文件。我认为这很好,因为:

  • 您不需要编辑 C++ 文件
  • 如果安装了 spark 视图引擎的智能感知支持,它也可以被其他视图引擎使用
  • 您只需要创建一个类,该类在原始 naml 文件和生成的 C# 对应文件之间进行映射。

顺便提一句。你还在研究这个 NHaml Intellisense 库吗?如果没有,我会尝试修补他们的实现,希望它可以轻松转换为 NHaml。

于 2009-06-20T22:45:29.097 回答
1

这看起来可能会有所帮助

http://www.codeproject.com/KB/recipes/VSLanguageService.aspx

于 2009-04-17T02:28:38.777 回答
1

我终于设法修改代码以支持 NHaml。一点也不难。不幸的是,原来的 NHaml 库不支持所需的一切,所以我不得不为 NHaml 创建一个新的解析器。它不支持所有的结构,但它支持大多数(足以使 NHaml 编程更容易)

下载:http: //github.com/sztupy/nhamlsense

截屏: http ://www.youtube.com/watch?v= 8jTZ2zC9eYc

于 2010-02-08T02:39:56.643 回答
0

您可以通过创建或修改 usertype.dat 文件轻松添加关键字。在此处查看有关附加到特定文件扩展名的一些说明。这可能会让您至少部分完成,而无需重做完整的 c# 语法。

(事实上​​,在这种情况下,我不确定您所说的“语法突出显示”究竟是什么意思。我敢肯定,例如,您可以在编辑器中免费获得大括号匹配突出显示)。

于 2009-04-12T20:50:10.267 回答