2009-04-11 75 views
9

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

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

我想知道是否有人知道如何将内联c#intellisense添加到像现在在aspx文件中获得的服务。我希望这可能没有完成我自己特定于插件的整个c#语法。

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

UPDATE: 它看起来像火花视图引擎的家伙已经在这里取得了一些进展,我调查其执行

+0

你在看的时候发现什么有用火花视图引擎代码? – Jake 2009-04-20 19:56:18

+0

是的,看起来像他们下降到C++ http://whereslou.com/2008/12/03/ivsintellisenseless 我要看看我是否可以得到这在C#中,但有一些疯狂的未记录的接口支持 – whatupdave 2009-04-27 07:16:16

+0

是的,降级到ATL COM对于处理这种情况很有帮助,因为您可以跟踪对象上的QueryInterface调用以收集有关VS的期望值的提示。还有一个很好的技巧,你可以在注册表中为每个IID提供一个对象引用并调用QI,以便尽可能多地发现它暴露的接口。我没有意识到在c#中进行这种类型的COM级别探索的方法。 – loudej 2009-05-10 09:10:36

回答

2

我查了星火视图引擎,他们似乎已经做出了通用ATL的东西(所谓SparkLanguagePackageLib),其实似乎没有containiag什么火花具体。这似乎只是一个通用的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特定的东西,但是我找不到任何东西:everythig spark-related被拆分成一个单独的C#代码文件。我认为这是件好事,因为:

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

Btw。你还在研究这个NHaml智能感知库吗?如果没有,我会尝试修补它们的实现,希望它可以轻松转换为NHaml。

0

您可以轻松地通过add keywords创建或修改usertype.dat文件。有关附加到特定文件扩展名的某些说明,请查看here。这可能会让你至少有部分的方式,而不需要重做完整的c#语法。 (实际上,我并不确定在这种情况下'语法高亮'的意思,我相信,例如,你可以在编辑器中免费得到大括号高亮)。