10

Ich habe eine Visual Studio-Erweiterung erstellt, die Intellisense für meine domänenspezifische Sprache bereitstellt, indem ich von Microsoft.VisualStudio.Language.Intellisense.ICompletionSource erbt.Stoppen Sie die Intellisense-Sitzung vorzeitig.

Das funktioniert ok, außer dass ein gültiges Zeichen in den Schlüsselwörtern meiner Sprache den Unterstrich '_' enthält.

Wenn Intellisense aufspringt, können Sie mit der Eingabe beginnen und der Inhalt der IntelliSense-Box wird gefiltert, um nur die Elemente anzuzeigen, die mit dem beginnen, was Sie eingegeben haben.

Wenn der Benutzer jedoch einen Unterstrich eingibt, scheint dies auf eine spezielle Art behandelt zu werden, anstatt die Liste der verfügbaren Intellisense-Objekte weiter zu filtern, wird das aktuelle Objekt festgeschrieben und die Intellisense-Sitzung beendet.

Gibt es eine Möglichkeit, dieses Verhalten zu stoppen, so dass Unterstreichungen wie normale alphanumerische Zeichen behandelt werden können?

Antwort

4

Ich bin nicht sicher, welche Sprache Sie verwenden, aber in Ihrer Exec Methode klingt es wie Sie so etwas wie (C#) tun:

if (nCmdID == (uint)VSConstants.VSStd2KCmdID.RETURN || nCmdID == (uint)VSConstants.VSStd2KCmdID.TAB || (char.IsWhiteSpace(typedChar) || char.IsPunctuation(typedChar)) 

Die Ursache ist hier, dass _ Interpunktion betrachtet , also char.IsPunctuation(typedChar) gibt true zurück, wobei das aktuelle Element festgeschrieben wird.

Das Update - (char.IsPunctuation(typedChar) && typedChar != '_'):

if (nCmdID == (uint)VSConstants.VSStd2KCmdID.RETURN || nCmdID == (uint)VSConstants.VSStd2KCmdID.TAB || (char.IsWhiteSpace(typedChar) || (char.IsPunctuation(typedChar) && typedChar != '_') || typedChar == '=')) 

Zur Info: Ich habe dies durch das Debuggen dieser Erweiterung getestet - https://github.com/kfmaurice/nla. Ohne diese Änderung hat es sich auch verpflichtet, einen Unterstrich einzugeben.

2

Wenn Sie gehen in Extras-> Optionen-> Text Editor-> JavaScript-> IntelliSense-> Referenzen sollte nach unten für die Referenzgruppe ein Tropfen (je nachdem, welche Art von Projekt, das Sie benötigen Um dies zu ändern)

Sobald Sie die richtige Gruppe haben, werden Sie feststellen, dass es einige Standard enthalten Intellisense-Referenzdateien. Versuchen Sie, die underscorefilter.js

dieses here gefunden zu entfernen. Lassen Sie mich wissen, ob das für Sie funktioniert.

2

Es gibt Kette von Plugins von Visual Studio verwendet, und einige andere Plugin verarbeitet Unterstrich vor Ihrem Plugin. Versuchen Sie einen Vorschlag von destructi6n.