Logo

dev-resources.site

for different kinds of informations.

How to create custom snippets in Visual Studio 2022

Published at
8/27/2024
Categories
visualstudio
vs2022
Author
bellonedavide
Categories
2 categories in total
visualstudio
open
vs2022
open
Author
13 person written this
bellonedavide
open
How to create custom snippets in Visual Studio 2022

One of the best tricks to boost productivity is knowing your tools.

I'm pretty sure you've already used some predefined snippets in Visual Studio. For example, when you type ctor and hit Tab twice, VS automatically creates an empty constructor for the current class.

In this article, we will learn how to create custom snippets: in particular, we will design a snippet that automatically creates a C# Unit Test method with some placeholders and predefined Arrange-Act-Assert blocks.

Snippet Designer: a Visual Studio 2022 extension to add a UI to your placeholders

Snippets are defined in XML-like files with .snippet extension. But we all know that working with XMLs can be cumbersome, especially if you don't have a clear idea of the expected structure.

Therefore, even if not strictly necessary, I suggest installing a VS2022 extension called Snippet Designer 2022.

Snippet Designer 2022 in VS2022

This extension, developed by Matthew Manela, can be found on GitHub, where you can view the source code.

This extension gives you a UI to customize the snippet instead of manually editing the XML nodes. It allows you to customize the snippet, the related metadata, and even the placeholders.

Create a basic snippet in VS2022 using a .snippet file

As we saw, snippets are defined in a simple XML.

In order to have your snippets immediately available in Visual Studio, I suggest you create those files in a specific VS2022 folder under the path \Documents\Visual Studio 2022\Code Snippets\Visual C#\My Code Snippets\.

So, create an empty file, change its extension to .snippet, and save it to that location.

Save snippet file under the My Code Snippets folder in VS2022

Now, you can open Visual Studio (it's not necessary to open a project, but I'd recommend you to do so). Then, head to File > Open, and open the file you saved under the My Code Snippets directory.

Thanks to Snippet Designer, you will be able to see a nice UI instead of plain XML content.

Have a look at how I filled in the several parts to create a snippet that generates a variable named x, assigns to it a value, and then calls x++;

Simple snippet, with related metadata and annotations

Have a look at the main parts:

  • the body, which contains the snippet to be generated;
  • the top layer, where we specified:
    • the Snippet name: Int100; it's the display name of the shortcut
    • the code language: C#;
    • the shortcut: int100; it's the string you'll type in that allows you to generate the expected snippet;
  • the bottom table, which contains the placeholders used in the snippet; more on this later;
  • the properties tab, on the sidebar: here is where you specify some additional metadata, such as:
    • Author, Description, and Help Url of the snippet, in case you want to export it;
    • the kind of snippet: possible values are MethodBody, MethodDecl and TypeDecl. However, this value is supported only in Visual Basic.

Now, hit save and be ready to import it!

Just for completeness, here's the resulting XML:

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
      <Title>Int100</Title>
      <Author>
      </Author>
      <Description>
      </Description>
      <HelpUrl>
      </HelpUrl>
      <Shortcut>int100</Shortcut>
    </Header>
    <Snippet>
      <Code Kind="method decl" Language="csharp" Delimiter="$"><![CDATA[int x = 100;
x++;]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>
Enter fullscreen mode Exit fullscreen mode

Notice that the actual content of the snippet is defined in the CDATA block.

Import the snippet in Visual Studio

It's time to import the snippet. Open the Tools menu item and click on Code Snippets Manager.

Code Snippets Manager menu item, under Tools

From here, you can import a snippet by clicking the Import... button. Given that we've already saved our snippet in the correct folder, we'll find it under the My Code Snippets folder.

Code Snippets Manager tool

Now it's ready! Open a C# class, and start typing int100. You'll see our snippet in the autocomplete list.

Int100 snippet is now visible in Visual Studio

By hitting Tab twice, you'll see the snippet's content being generated.

How to use placeholders when defining snippets in Visual Studio

Wouldn't it be nice to have the possibility to define customizable parts of your snippets?

Let's see a real example: I want to create a snippet to create the structure of a Unit Tests method with these characteristics:

  • it already contains the AAA (Arrange, Act, Assert) sections;
  • the method name should follow the pattern "SOMETHING should DO STUFF when CONDITION". I want to be able to replace the different parts of the method name by using placeholders.

You can define placeholders using the $ symbol. You will then see the placeholders in the table at the bottom of the UI. In this example, the placeholders are $TestMethod$, $DoSomething$, and $Condition$. I also added a description to explain the purpose of each placeholder better.

TestSync snippet definition and metadata

The XML looks like this:

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
      <Title>Test Sync</Title>
      <Author>Davide Bellone</Author>
      <Description>Scaffold the AAA structure for synchronous NUnit tests</Description>
      <HelpUrl>
      </HelpUrl>
      <Shortcut>testsync</Shortcut>
    </Header>
    <Snippet>
      <Declarations>
        <Literal Editable="true">
          <ID>TestMethod</ID>
          <ToolTip>Name of the method to be tested</ToolTip>
          <Default>TestMethod</Default>
          <Function>
          </Function>
        </Literal>
        <Literal Editable="true">
          <ID>DoSomething</ID>
          <ToolTip>Expected behavior or result</ToolTip>
          <Default>DoSomething</Default>
          <Function>
          </Function>
        </Literal>
        <Literal Editable="true">
          <ID>Condition</ID>
          <ToolTip>Initial conditions</ToolTip>
          <Default>Condition</Default>
          <Function>
          </Function>
        </Literal>
      </Declarations>
      <Code Language="csharp" Delimiter="$" Kind="method decl"><![CDATA[[Test]
public void $TestMethod$_Should_$DoSomething$_When_$Condition$()
{
    // Arrange

    // Act

    // Assert

}]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>
Enter fullscreen mode Exit fullscreen mode

Now, import it as we already did before.

Then, head to your code, start typing testsync, and you'll see the snippet come to life. The placeholders we defined are highlighted. You can then fill in these placeholders, hit tab, and move to the next one.

Test sync snippet usage

Bonus: how to view all the snippets defined in VS

If you want to learn more about your IDE and the available snippets, you can have a look at the Snippet Explorer table.

You can find it under View > Tools > Snippet Explorer.

Snippet Explorer menu item

Here, you can see all the snippets, their shortcuts, and the content of each snippet. You can also see the placeholders highlighted in green.

List of snippets available in Snippet Explorer

It's always an excellent place to learn more about Visual Studio.

Further readings

As always, you can read more on Microsoft Docs. It's a valuable resource, although I find it difficult to follow.

πŸ”— Create a code snippet in Visual Studio | Microsoft docs

I prefer working with the UI. If you want to have a look at the repo of the extension we used in this article, here's the link:

πŸ”— SnippetDesigner extension | GitHub

This article first appeared on Code4IT 🐧

Wrapping up

There are some tips that may improve both the code quality and the developer productivity.

If you want to enforce some structures or rules, add such snippets in your repository; when somebody joins your team, teach them how to import those snippets.

I hope you enjoyed this article! Let's keep in touch on Twitter or LinkedIn! πŸ€œπŸ€›

Happy coding!

🐧

visualstudio Article's
30 articles in total
Favicon
Can Skater's Secure Depot of Private Keys be used as a tool designed for securely storing and managing private keys?
Favicon
Code Protection
Favicon
How to use OpenMP to parallelize C++ using Visual studio
Favicon
Getting started with .Net Aspire
Favicon
Integrating OpenCV with Visual Studio C++
Favicon
Version 9 of .Net is here
Favicon
EasyTdd 0.5.0: Streamlining Mocking with Incremental FluentMock
Favicon
From Legacy to .NET 8: Migrating with NDepend
Favicon
LocalDb Dev on Windows11 ARM
Favicon
How to create custom snippets in Visual Studio 2022
Favicon
Builder: Your Buddy in Test-Driven Development (TDD)
Favicon
AutoEntityGenerator – my first visual studio extension.
Favicon
C# | Visual Studio Extensions for C# Developers
Favicon
SonarQube | Working with SonarLint and SonarQube in Visual Studio
Favicon
Migrating a project from Visual studio to Rider
Favicon
How to embed your git bash into Visual Studio
Favicon
.NET Monthly Roundup - May 2024 - .NET at Build, .NET Aspire GA, and more!
Favicon
Quick Tipp: Dev Tunnels with Visual Studio
Favicon
EasyTdd 0.4.0 Release: Introducing the Incremental Builder
Favicon
Troubleshooting β€œThe File Does Not Have an App Associated with It” Error in Visual Studio
Favicon
Help Needed: "Object reference not set to an instance of an object" Error in Visual Studio
Favicon
Debugging with Precision: Conditional Breakpoints
Favicon
Simple Way To CreateYour NuGet Package: Step-by-Step Guide
Favicon
Easy Self-Hosted Git Installation on Ubuntu Server
Favicon
Effortless Remote Debugging with Dev Tunnel in Visual Studio 2022
Favicon
How to Use GitHub Copilot in Visual Studio 2024
Favicon
How to Enable Windows 11 Developer Mode?
Favicon
Visual Studio Live Share: Complete Guide 2024
Favicon
Gitlens Tutorial - Visual Studio Extension 2024
Favicon
Top 8 Best Visual Studio Extensions in 2024

Featured ones: