views:

158

answers:

2

I want to write a Visual Studio snippet which allows me to quickly create a class of the form:

public SomeClass
{
    public SomeType SomeProperty { get; private set; }
    public SomeClass(SomeType someProperty) { SomeProperty = someProperty; }
}

I want the parameter on the constructor to have the same name as the property, but lower-cased. I don't want to have to type the name twice. How do I do this?

I've already looked at the XML for snippets and I discovered that there are certain functions that can be used. For example, the built-in "switch" code snippet contains the following instruction:

<Function>GenerateSwitchCases($expression$)</Function>

According to this MSDN documentation page, there are three built-in functions that you can use in this <Function> tag. Unfortunately, neither of them does what I want (lower-case the first letter). Is it possible to define a function that I can then use in my snippet?

+1  A: 

No this is not possible in Visual Studio today. The definition and execution of snippet functions is directly controlled by the C# language service. It is not currently an extensibility point. It is being considered for a future version of the product though.

JaredPar
Is it? Are you sure? There is a comment on a Microsoft Connect post that said this is considered "for the next version", but that comment is from 2005 and there have been two next versions since...
Timwi
@Timwi, 100% sure.
JaredPar
For clarity, my comment was referring to your last sentence in which you claimed "It is being considered for a future version". I am unconvinced that this is the case.
Timwi
@Timwii, I can assure you it's actively being considered for a future version of the product. Like always no assurances can be made but it is something that we are investigating.
JaredPar
A: 

Check out this article on creating a code snippet that defines variables that can be used several times and have to be typed only once: http://www.switchonthecode.com/tutorials/csharp-tutorial-visual-studio-code-snippets

<Snippet>
  <Declarations>
    <Literal>
      <ID>startTime</ID>
      <ToolTip>Beginning Time Variable</ToolTip>
      <Default>startTime</Default>
    </Literal>
    <Literal>
      <ID>message</ID>
      <ToolTip>Replace This With Your Description</ToolTip>
      <Default>My function</Default>
    </Literal>
    <Literal Editable="false">
      <ID>DiagnosticsDebug</ID>
      <Function>
        SimpleTypeName(global::System.Diagnostics.Debug)
      </Function>
    </Literal>
  </Declarations>
  <Code Language="CSharp">
    <![CDATA[
   long $startTime$ = Environment.TickCount;
   $selected$ $end$
   $DiagnosticsDebug$.WriteLine(String.Format(
       "$message$ took {0} ticks.", Environment.TickCount - $startTime$));
   ]]>
  </Code>
</Snippet>