2009-04-11 25 views
9

Letztes Jahr schrieb ich einen Sprachdienst für Visual Studio, der Syntaxhervorhebung für NHaml-Dateien hinzufügte: http://github.com/snappycode/hamleditor.Visual Studio-Sprachdienst mit C# intellisense

Um zu verdeutlichen, ist NHaml eine HTML-Vorlage Sprache, die Code-Elemente wie eine Aspx-Datei mischen kann. Dieses Plugin fügt der IDE Unterstützung für die Bearbeitung von NHaml-Dateien hinzu, fügt jedoch im Grunde nur Syntax-Highlighting hinzu.

Ich frage mich, ob jemand weiß, wie Sie inline C# intellisense zum Dienst hinzufügen, wie Sie jetzt in einer aspx-Datei erhalten. Ich hoffe, dass es möglich wäre, ohne die ganze C# Grammatik zu machen, die für das Plugin spezifisch ist.

Hat jemand einen Sprachdienst geschrieben, der Sprachen mischt?

UPDATE: Es sieht aus wie die Funken Ansicht Motor Jungs einige Einbrüche hier gemacht haben, suche ich deren Umsetzung

+0

Haben Sie etwas nützlich finden, wenn sie bei der Suche Spark View Motorcode? – Jake

+0

Ja, sieht aus, als ob sie auf C++ runtergefallen sind http://whereslou.com/2008/12/03/ivsintellissenseless Ich werde sehen, ob ich das in C# gehen kann, aber es gibt einige verrückte undokumentierte Schnittstellen zu Unterstützung – whatupdave

+0

Yeah, Downshifting zu ATL COM war hilfreich, um die Situation in den Griff zu bekommen, weil Sie QueryInterface-Aufrufe für Ihre Objekte verfolgen konnten, um Hinweise darüber zu erhalten, welche Erwartungen VS hatte. Es gibt auch einen anderen netten Trick, wo Sie eine Objektreferenz nehmen und QI für jedes IID in der Registrierung anrufen, um so viele von ihr herausgestellte Schnittstellen zu entdecken, wie Sie können. Ich kenne keine Möglichkeit, diese Art von COM-Level-Exploration in C# zu machen. – loudej

Antwort

2

ich die Spark-Ansicht-Engine überprüft, und sie scheinen eine generische ATL Sachen gemacht zu haben (so genannte SparkLanguagePackageLib), das scheint in der Tat nichts containiag Funken spezifisch. Es scheint nur eine generische C# intellisense Bibliothek zu sein, dass die folgende benötigt:

  • Der ursprüngliche Code
  • Die C# Quelle, die von dem ursprünglichen Code
  • Die Positionszuordnungen zwischen den beiden (zum Beispiel erzeugt wird der code on line 2 Pos 5 wird in der Ausgabe abgebildet 4 Pos 10, etc.)
  • einige andere Dinge Zeile, wie Bilder()

Und danach können Sie anrufen:

Ich habe versucht, Spark-spezifische Sachen in dieser C++ - Bibliothek zu finden, aber ich konnte nichts finden: alles, was Funken betrifft, wird in eine separate C# -Codedatei aufgeteilt. Ich denke, das ist gut, weil:

  • Sie haben keine C++ Dateien bearbeiten müssen
  • Wenn die Funken Ansicht Motors Intellisense-Unterstützung ist es auch
  • Sie von anderen Ansicht Motoren verwendet werden kann, installiert nur Es muss eine Klasse erstellt werden, die zwischen der ursprünglichen nhaml-Datei und dem generierten C# -Volumen besteht.

Btw. Arbeiten Sie noch an dieser NHaml Intellisense-Bibliothek? Wenn nicht, werde ich versuchen, ihre Implementierung zu patchen, in der Hoffnung, dass sie leicht in NHaml umgewandelt werden kann.

+0

Irgendwelche Updates zu diesem Thema? hat jemand erfolgreich die Funkenklasse nach nhaml portiert? –

+0

cMapping ist das Größenargument für das Mappings-Array, das ref [0] ist die Adresse des Arrays zu Interop. Gleiches gilt für Lacke und Farben. Mapping ist genau richtig - es ist ein Array von Substring-Offset-Paaren für jedes kleine Fenster, in dem Code in der Vorlage als Code in der generierten Datei angezeigt wird. Paint ist ein Array von Teilstring-Offsets und Farbtypen in der ursprünglichen Quelle. Diese Information wird verwendet, um den Rest des Nicht-Code-Textes zu färben. Um ehrlich zu sein, war der größte Schmerz die Überarbeitung des Parse/Gen-Codes, um alle Input/Output-Text-Offsets mitzunehmen und zu erfassen. – loudej

+0

@loudej: Danke für die Klarstellung! @Martijn: Ich habe es bereits geschafft, das Zeug in NHaml umzuschreiben, aber unglücklicherweise verwendet NHaml eine alternative Methode zur Syntaxanalyse/Codegenerierung als Spark, also muss ich lernen, wie es funktioniert. Ich möchte es nicht mit zu viel Zeug aufblähen. – SztupY

0

Sie können leicht add keywords durch die Schaffung oder eine usertype.dat-Datei ändern. Überprüfen Sie here für einige Richtungen zum Anhängen an bestimmte Dateierweiterungen. Das könnte Ihnen zumindest einen Teil des Weges bringen, ohne die komplette C# Syntax zu wiederholen.

(In der Tat, ich bin mir nicht sicher, was Sie genau mit 'Syntax-Highlighting' in diesem Zusammenhang bedeuten. Ich bin mir sicher, dass Sie zum Beispiel Brace-Match-Hervorhebung kostenlos im Editor erhalten).

+0

Der Kontext ist, er hat ein Plugin für Visual Studio entwickelt, das Syntax-Highlighting (hübsche Farben) bietet, um Brace-Matching zu liefern, müssen Sie den Code analysieren und visuell Studio sagen, wo das Klammerpaar/tuples sind. –

1

Endlich habe ich es geschafft, den Code zu modifizieren, um NHaml zu unterstützen. Es war überhaupt nicht so schwer. Leider unterstützt die ursprüngliche NHaml-Bibliothek nicht alles, was benötigt wurde. Daher musste ich einen neuen Parser für NHaml erstellen. Es werden nicht alle der Konstrukte unterstützen, aber es unterstützt die meisten von ihnen

Download (genug NHaml Programmierung einfacher zu machen): http://github.com/sztupy/nhamlsense

Screen: http://www.youtube.com/watch?v=8jTZ2zC9eYc

+1

Super Arbeit SztupY! – whatupdave

Verwandte Themen