Skip to content

Naming and default value forms

Vlada Shubina edited this page Nov 4, 2022 · 3 revisions

sourceName default value forms

When selecting a sourceName for a template you're authoring, keep in mind the default value forms applied to this symbol:

  • identity - the value as entered by user.
  • namespace - the value transformed in a way to be a correct .NET namespace. Details
  • class name - the value transformed in a way to be a correct .NET class name. Details
  • lower case namespace - same as namespace, but lower case.
  • lower case class name - same as class name, but lower case.

A good choice for sourceName is the value that produces distinct values under the below transformations, for example Template.1:

Form Source Transformed value
identity Template.1 Template.1
namespace Template.1 Template._1
class name Template.1 Template__1
lower case namespace Template.1 template._1
lower case class name Template.1 template__1

In this case, you can use the transformed value to force using the form, for example:

namespace Template._1; //uses `namespace` form

public class Template__1  //uses `class` form
{
   var str = "My template name is Template.1"; //uses `identity` form
}

In this case, if user use My-App as the name, the generated content will be as follows:

Form Source Transformed value
identity My-App My-App
namespace My-App My_App
class name My-App My_App
lower case namespace My-App my_app
lower case class name My-App my_app
namespace My_App; //uses `namespace` form

public class My_App  //uses `class` form
{
   var str = "My template name is My-App"; //uses `identity` form
}

An example of wrong sourceName is template1, in this case all form transformations result in template1. Referring to previous example:

namespace template1; //intent to use `namespace` form

public class template1  //intent to use `class` form
{
   var str = "My template name is template1"; //intent to use `identity` form
}

In this case, if the user use My-App as the name, the generated content may be as follows:

namespace My-App; //intent to use `namespace` form, but `identity` was used instead. It is not guaranteed which of `My-App`, `My_App`, `my_app` will be used here.

public class My-App //intent to use `class` form, but `identity` was used instead
{
   var str = "My template name is My_App"; //intent to use `identity` form, but `namespace` was used instead
}

As the result, this code won't compile as namespace and class are not using correct names.

For more details on value forms, refer to the article.