VS.NET - Macro

Supponiamo di avere inserito le seguenti variabili protette nella nostra classe:

 

      class Foo

      {

            protected string m_FooString;

            protected int m_FooInt;

 

            ...

 

            // Che inizializziamo nel costruttore

 

            public Foo()

            {

                  m_FooString = String.Empty;

                  m_FooInt = 0;

            }

 

            // Alle quali successivamente aggiungiamo le seguenti proprietà

 

            public string FooString

            {

                  get { return m_FooString; }

                  set { this.m_FooString = value; }

            }

 

            ...

 

      }

 

Fin qui tutto semplice vero? Tuttavia, pensiamo per un attimo di ripetere questa operazione per una 20 di variabili e per una decina di classi - a meno di avere dei plug-in/utility/etc. appositi - in questo caso tale compito diventa arduo.

 

In questo caso possono darci una mano le macro di VS.NET

 

Ad esempio per l'inizializzazione possiamo utilizzare una macro che trasformi la seguente riga:

 

            protected string m_Foo;

 

in

 

            m_Foo = String.Empty;

 

Ecco la macro:

 

    Sub init_string()

        DTE.ActiveDocument.Selection.WordRight(True, 2)

        DTE.ActiveDocument.Selection.Delete()

        DTE.ActiveDocument.Selection.EndOfLine()

        DTE.ActiveDocument.Selection.CharLeft()

        DTE.ActiveDocument.Selection.Text = " = String.Empty"

        DTE.ActiveDocument.Selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)

        DTE.ActiveDocument.Selection.LineDown()

    End Sub

 

Mentre per gli interi va bene questa:

 

    Sub init_number()

        DTE.ActiveDocument.Selection.WordRight(True, 2)

        DTE.ActiveDocument.Selection.Delete()

        DTE.ActiveDocument.Selection.EndOfLine()

        DTE.ActiveDocument.Selection.CharLeft()

        DTE.ActiveDocument.Selection.Text = " = 0"

        DTE.ActiveDocument.Selection.EndOfLine()

        DTE.ActiveDocument.Selection.LineDown()

        DTE.ActiveDocument.Selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)

    End Sub

 

Poi supponiamo di voler trasformare la seguente riga:

            protected string m_Foo;

 

in

 

            public string Foo

            {

                  set { return m_Foo; }

                  get { this.m_Foo = value; }

            }

 

allora la macro è la seguente:

 

    Sub getset()

        DTE.ActiveDocument.Selection.WordRight(True)

        DTE.ActiveDocument.Selection.Text = "public "

        DTE.ActiveDocument.Selection.WordRight()

        DTE.ActiveDocument.Selection.EndOfLine(True)

        DTE.ActiveDocument.Selection.CharLeft(True)

        DTE.ActiveDocument.Selection.Copy()

        DTE.ActiveDocument.Selection.CharLeft()

        DTE.ActiveDocument.Selection.Delete(2)

        DTE.ActiveDocument.Selection.EndOfLine()

        DTE.ActiveDocument.Selection.DeleteLeft()

        DTE.ActiveDocument.Selection.NewLine()

        DTE.ActiveDocument.Selection.Text = "{"

        DTE.ActiveDocument.Selection.NewLine()

        DTE.ActiveDocument.Selection.Text = "get { return "

        DTE.ActiveDocument.Selection.Paste()

        DTE.ActiveDocument.Selection.Text = "; }"

        DTE.ActiveDocument.Selection.NewLine()

        DTE.ActiveDocument.Selection.Text = "set { this."

        DTE.ActiveDocument.Selection.Paste()

        DTE.ActiveDocument.Selection.Text = " = value; }"

        DTE.ActiveDocument.Selection.NewLine()

        DTE.ActiveDocument.Selection.Text = "}"

        DTE.ActiveDocument.Selection.NewLine()

        DTE.ActiveDocument.Selection.LineDown()

    End Sub

 

Attenzione!!!

1) In Questo caso la macro presuppone che la varibiale sia definita nello stile

2) Tutte le macro proposte presuppongono che ci troviamo all'inizio della riga da trasformare, es:

 

            protected string m_Foo;

 

si presuppone che il cursore si trovi davanti alla p (di protected) prima di eseguire la macro.

 

 

Spero di essere stato d'aiuto a qualcuno, se avete altre macro da proporre non avete che da commentare

Print | posted on venerdì 3 settembre 2004 02:34

Comments on this post

# re: VS.NET - Macro

Requesting Gravatar...
Ho modificato il codice secondo il tuo consiglio, 10x.
Left by Nietzsche on set 03, 2004 10:58
Comments have been closed on this topic.