2016-07-19 10 views
0

Ich versuche derzeit, ein vorhandenes Resharper-Plug-in zu erweitern, das eine Syntaxhervorhebung für eine benutzerdefinierte Sprache enthält, und die aktuelle Sprachen-Schlüsselwort-Hervorhebung wird mit einer CSharpDaemonStageBase implementiert, die eine benutzerdefinierte CSharpIncrementalDaemonStageProcessBase erstellt.Resharper-Plugin-Hervorhebung schlägt bei bestimmten Typen fehl

Hervorhebungen durch zwingende VisitNode wie so erreicht:

public override void VisitNode(ITreeNode node, IHighlightingConsumer context) { 
    base.VisitNode(node, context); 

    DocumentRange highlightingRange = node.GetHighlightingRange(); 
    string highlightId = ... 
    if (highlightId != null) 
     context.AddHighlighting(new ICustomAttributeIdHighlighting_Impl(highlightId, highlightingRange)); 
    } 

highlightId (theoretisch) eine vordefinierte Farbe in Visual Studio sein könnte, und der Knoten soll nach Visual Studio Optionen hervorgehoben bekommen. Leider scheinen einige dieser IDs nicht zu funktionieren und führen zu keinerlei Hervorhebung.

Dies sind einige von denen, kann ich bestätigen, werden mit MEF/der ReSharper Plugin (diese Arbeit richtig) richtig registriert:

  • "HTML-Elementname"
  • "HTML-Attribut Name"
  • "HTML Attribut Wert"
  • "Keyword"
  • "Kommentar"
  • "String"
  • „Operator“
  • „Nummer“

Diese Werte scheinen alle gültige Markierung Ergebnisse produzieren, jedoch würde Ich mag einige Klasse/Interface-Referenzknoten markieren, und ich nichts, was ich kann Ergebnisse in Sachen finden hervorgehoben werden. Einige der Variationen habe ich versucht, und verwenden möchten:

  • „Benutzertypen“
  • „Benutzertypen (Interfaces)“
  • „Benutzertypen - Klassen“
  • „Benutzertypen - Interfaces“
  • "Klassenname"(irgendwo gelesen, dass dies der neue Name für VS2015 war, noch keine Würfel)
  • "Schnittstellenname"

Soweit ich das beurteilen kann, sollte ich in der Lage sein, jeden String-Wert zurückzugeben, der im Visual Studio auf eine gültige Farbe abgebildet wird, aber aus irgendeinem Grund funktioniert keiner von diesen. Jemand, den ich kenne, hat vorgeschlagen, dass es ein Problem in VS/MEF sein könnte.

Antwort

1

Die Hervorhebungs-IDs sind eigentlich ReSharper-Textmarker-IDs, keine Visual Studio-Textklassifizierungs-IDs - sie sind nicht austauschbar. Mit anderen Worten, alle von ReSharper verwendeten Attribut-IDs werden zuerst mit ReSharper unter Verwendung von Instanzen von RegisterHighlighterAttribute registriert. Während der Installation werden diese Textmarker (mit Vorder- und Hintergrundfarbe usw.) in Visual Studio als Textklassifizierungen registriert, so wie sie im Dialogfeld "Farben" von Fonts & angezeigt werden.

Es gibt Überschneidungen mit einigen Hervorhebungen, nämlich "Schlüsselwort", "Zeichenfolge", "Zahl", "Kommentar", "Text" usw. Diese ReSharper-IDs sind direkt mit bekannten Visual Studio-Klassifikationen verknüpft. Wenn Sie jedoch in den ReSharper-APIs verwendet werden, verwenden Sie ReSharper-IDs.

Zum Beispiel wird der gleiche Code für Project Rider verwendet, die C# IDE auf IntelliJ basiert, die ReSharper im Backend verwendet. Aber hier sind die ReSharper-Hervorhebungs-IDs den IntelliJ-Attributen zum Einfärben im IntelliJ-Editor zugeordnet. Wenn Sie Code in dotPeek anzeigen, werden die ReSharper-Hervorhebungs-IDs ebenfalls den in den Attributen definierten Farben zugeordnet.

Sie können vorhandene ReSharper-Hervorhebungen für verschiedene Bezeichnerarten verwenden, z. B. "ReSharper-Klassenbezeichner" oder "ReSharper-Schnittstellenbezeichner".

+0

Danke für die Klarstellung. Schade, ich kann die ausgewählte Farbe des Benutzers nicht automatisch anpassen. – caesay

+0

Sie können, indem Sie die ReSharper-Highlights verwenden - "ReSharper Class Identifier" usw. – citizenmatt

+0

Die stimmen nicht überein - "ReSharper Class Identifier" in meiner Installation entspricht standardmäßig dem C++ - Hervorhebungsschema, aber nicht C#. – caesay