2009-04-11 62 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#語法。 (實際上,我並不確定在這種情況下'語法高亮'的意思,我相信,例如,你可以在編輯器中免費得到大括號高亮)。

相關問題