使用C#intellisense的Visual Studio语言服务

时间:2009-04-11 03:55:13

标签: visual-studio plugins intellisense nhaml

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

为了澄清,NHaml是一种html模板语言,可以混合使用像aspx文件那样的代码元素。此插件添加了对IDE的支持,用于编辑NHaml文件,但基本上只添加语法高亮。

我想知道是否有人知道如何在服务中添加内联c#intellisense,就像你现在在aspx文件中那样。我希望如果没有完全针对插件执行整个c#语法,那将是可能的。

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

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

4 个答案:

答案 0 :(得分:2)

我检查了Spark View引擎,他们似乎已经制作了一个通用的ATL东西(称为SparkLanguagePackageLib),实际上似乎并没有包含任何Spark特有的东西。它似乎只是一个通用的C#intellisense库,需要以下内容:

  • 原始代码
  • 从原始代码生成的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的东西,但我找不到任何东西:everythig spark-related被拆分为一个单独的C#代码文件。我认为这很好,因为:

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

顺便说一下。你还在使用这个NHaml Intellisense图书馆吗?如果不是,我会尝试修补它们的实现,希望它可以很容易地转换为NHaml。

答案 1 :(得分:1)

答案 2 :(得分:1)

我终于设法修改代码以支持NHaml。这根本不是那么难。不幸的是,最初的NHaml库不支持所需的一切,所以我不得不为NHaml创建一个新的解析器。它不支持所有构造,但它支持大多数构造(足以使NHaml编程更容易)

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

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

答案 3 :(得分:0)

您可以通过创建或修改usertype.dat文件轻松add keywords。有关附加到特定文件扩展名的某些说明,请查看here。这可能至少部分地解决了这个问题,而无需重做完整的c#语法。

(事实上,在这种情况下,我不确定你的'语法高亮'是什么意思。例如,我确信你可以在编辑器中免费获得大括号匹配突出显示。)