Vai al contenuto
Home » Estensione OpenAI e Visual Studio

Estensione OpenAI e Visual Studio

Come piccolo esercizio per le dita, ho pensato che un’estensione di Visual Studio sarebbe stata utile per spiegare il codice – grazie a OpenAI, non dovrebbe essere un problema.

Non lo era.

Per prima cosa ho installato l’Extensibilty Template Pack 2022 per Visual Studio 2022.
Dopodiché, si può iniziare:

La prima cosa che ho fatto è stata aggiungere una finestra degli strumenti. Una finestra degli strumenti non è altro che un controllo utente XAML e una classe che deriva da BaseToolWindow.

  public class ExplicareToolWindow : BaseToolWindow<ExplicareToolWindow>
    {
        public override string GetTitle(int toolWindowId) => "Explicare";

        public override Type PaneType => typeof(Pane);

        public override async Task<FrameworkElement> CreateAsync(int toolWindowId, CancellationToken cancellationToken)
        {

           var dte = await Package.GetServiceAsync(typeof(EnvDTE.DTE)) as EnvDTE80.DTE2;

            return new ExplicareToolWindowControl(dte,Package);
        }

        [Guid("b8381bcb-59d1-4b5c-9951-fdbfb44990c9")]
        internal class Pane : ToolWindowPane
        {
            public Pane()
            {
                BitmapImageMoniker = KnownMonikers.ToolWindow;
            }
        }
    }

ExplicareToolWindowControl(dte,Package); è il vero e proprio UserControl, nel quale possiamo includere qualsiasi elemento dell’interfaccia utente.
Ora ho aggiunto solo un pulsante che ho chiamato “Spiegami”.
Ho creato rapidamente e in modo sporco un evento click del pulsante nel code-behind.
Ora leggete il testo dall’editor di Visual Studio:

 var textSelection = (TextSelection)MyDTE.ActiveDocument.Selection;

                if (String.IsNullOrEmpty(textSelection.Text))
                {
                    TextDocument doc = (TextDocument)(MyDTE.ActiveDocument.Object("TextDocument"));

                    var p = doc.StartPoint.CreateEditPoint();
                    TextToExplain = p.GetText(doc.EndPoint);

                }
                else
                {
                    TextToExplain = textSelection.Text;

                }

Quindi la parte più difficile è ormai alle spalle: chiamare l’API OpenAI. In realtà è abbastanza semplice

  var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");


                var response = client.PostAsync("https://api.openai.com/v1/completions", content).Result;
                if (response.IsSuccessStatusCode)
                {
                    string responseStr = await response.Content.ReadAsStringAsync();

                    var result = JsonConvert.DeserializeObject<OpenAIResponse>(responseStr);
                    explained = result.choices[0].text;
                }
                else
                {
                    throw new BadRequestExecption();
                }

L’intero sorgente è su Git Hub gpiwonka/Explicare: una piccola estensione per Visual Studio per comprendere meglio il codice utilizzando OpenAI. (github.com)

Disponibile anche come estensione: Explicare – Mercato di Visual Studio

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *