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

wha*_*ave 9 intellisense plugins nhaml visual-studio

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

为了澄清,NHaml是一种html模板语言,可以混合代码元素,如aspx文件即可.此插件添加了对IDE的支持以编辑NHaml文件,但基本上只添加语法突出显示.

我想知道是否有人知道如何在服务中添加内联c#intellisense,就像你现在在aspx文件中那样.我希望没有完成我自己特定的插件的整个c#语法,这是可能的.

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

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

Szt*_*upY 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]); // ?
Run Code Online (Sandbox Code Playgroud)

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

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

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