2012-05-05 11 views
25

Desidero scrivere un'aggiunta a intellisense in Visual Studio.Estensione Intellisense personalizzata

E 'possibile estendere del tutto, dalla mia ricerca non ho trovato alcun campione o documentazione sulle estensioni intellisense.

Come posso ottenere intellisense per mostrare un messaggio semplice HelloWorld nel modo seguente (in cui viene aggiunto ciao mondo in fase di esecuzione per l'intellisense per String):

enter image description here

+7

@oded Ive appena trascorso un paio d'ore guardando attraverso Google, MSDN ect e havent stato in grado di trovare qualsiasi cosa sull'estensione intellisense, hai qualche consiglio su dove cercarlo? –

+0

Mi dispiace Luke, non penso che il [forum di estensibilità di Visual Studio] (http://social.msdn.microsoft.com/Forums/en-US/vsx/threads) sarebbe un buon punto di partenza. Ma tu potresti _ riformulare la domanda per non chiedere link e in realtà essere una domanda di programmazione in argomento. – Oded

+1

Inoltre, un esempio di ciò che vorresti aggiungere ad Intellisense sarebbe di grande aiuto. Esistono diverse tecniche che potrebbero essere necessarie ... –

risposta

29

Così in Visual Studio 2010 e più tardi , le API di estensibilità a cui si desidera sono nello spazio dei nomi Microsoft.VisualStudio.Languages.IntelliSense. Ad un livello elevato, si desidera esportare MEF a ICompletionSourceProvider che fornirà gli elementi necessari. Ci sono due buoni post sul blog here e here che dimostrano la tecnica di base.

Ci sono due problemi in cui ti imbatterai se volessi rendere il tuo screenshot realtà. (Questo è il motivo per cui ho chiesto lo scenario, dato che il mio consiglio qui sarebbe cambiato.) In primo luogo, questo metodo non consente legalmente di aggiungere un set di completamento esistente, ma ne fornisce uno nuovo. Nell'interfaccia utente questo appare come due schede, come le schede comuni/Tutte nell'editor di Visual Basic. Questa è una limitazione dell'API corrente. Potresti provare a modificare uno dei set di completamento esistenti nel tuo AugmentCompletionSource ma non ho idea se funzioni. In ogni caso è decisamente non supportato.

In secondo luogo, è davvero difficile sapere quando e dove raccomandare le cose. Nel tuo esempio hai detto "IntelliSense per string". Purtroppo, non ci sono API (attualmente) in VS che ti permettono di sapere qual è la cosa prima del punto. Potresti fare delle semplici euristiche o provare ad implementare un parser che sia Good Enough ™ per il tuo scenario, ma per ora devi accettare che non avrai risultati perfetti.

Il progetto Roslyn mira a risolvere il secondo problema, quindi potrebbe essere utile esplorare ulteriormente. Dal momento che prevediamo che molte persone vorranno estendere il completamento, stiamo anche pensando di offrire altre API di estensibilità in modo da non dover eseguire il rollforward di un ICompletionSourceProvider, ma tali API non sono nel CTP corrente.

[Disclaimer:. Sono un membro del team che lavora su Roslyn IntelliSense]

+0

Grazie, sono sicuro che questo è ciò che ho dopo, è un vero peccato che tu non avere accesso a cose prima del., che API deve essere lì da qualche parte per regolare VS intellisense a lavorare in modo triste è non pubblico.Ive usa roba Roslyn prima quindi mi prenderò un crack con qualcosa per capire qual è il soggetto –

+0

@Jason, ho provato ad aggiungere un altro intellisense per javascript '[Ordine (Prima =" Alto ")] \t [Export (typeof (ICompletionSourceProvider)), ContentType ("JavaScript"), nome ("EnhancedJavaScriptCompletion")] \t interno classe chiusa JavaScriptCompletionSourceProvider: ICompletionSourceProvider \t { } ' ma nevers passi nel debugger, anche se i punti di interruzione sembra che il codice sia stato caricato. Potete aiutarmi per favore? – Adaptabi

+1

@DotNetWise: dovresti creare una nuova domanda in modo che altri possano rispondere alla domanda. ;-) –