9

昨年、NHaml ファイルの構文強調表示を追加した Visual Studio 用言語サービスを作成しました: http://github.com/snappycode/hamleditor

明確にするために、NHaml は、aspx ファイルのようにコード要素を混在させることができる HTML テンプレート言語です。このプラグインは、NHaml ファイルを編集するためのサポートを IDE に追加しますが、基本的には構文の強調表示のみを追加します。

aspxファイルで取得したように、インラインc#インテリセンスをサービスに追加する方法を誰かが知っているかどうか疑問に思っていました。プラグインに固有の c# 文法全体を自分で実行しなくても、それが可能になることを願っています。

言語を混在させる言語サービスを作成した人はいますか?

更新: Spark ビュー エンジンの連中がここに侵入したようです。私はその実装を調査しています。

4

4 に答える 4

2

Spark View Engine をチェックしたところ、一般的な ATL のもの (SparkLanguagePackageLib と呼ばれる) が作成されたようで、実際には Spark 固有のものは何も含まれていないようです。以下を必要とする単なる一般的な C# インテリセンス ライブラリのようです。

  • 元のコード
  • 元のコードから生成される C# ソース
  • 2 つの間の位置マッピング (たとえば、2 行目の 5 番目のコードは、出力で 4 行目の 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 ビュー エンジンの Intellisense サポートがインストールされている場合、他のビュー エンジンでも使用できます。
  • 元の nhaml ファイルと生成された 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 に答える