¿Cómo personalizo el acceso directo de generación de campos privados de Visual Studio para constructores?
VS 2017 (y tal vez versiones anteriores) me brinda este pequeño y práctico atajo de constructor para generar un private readonly
campo y asignarlo.
Captura de pantalla:
Esto termina generando un miembro privado llamado userService
y luego le asigna:
this.userService = userService;
Esto va en contra del estilo de código que uso, que consiste en nombrar a todos los miembros privados con un prefijo, lo que _
da como resultado una asignación que debería verse así:
_userService = userService;
¿Cómo puedo hacer para que VS obedezca esta regla de estilo de código con sus atajos de generación de código?
Esto también se puede lograr directamente en Visual Studio. Sólo ve a Tools -> Options -> Text Editor -> C# -> Code Style -> Naming
.
- En primer lugar, debe definir un nuevo estilo de nombre haciendo clic en el botón "Administrar estilos de nombre":
- Luego haga clic en el signo + para definir una nueva regla para "Campo privado o interno", que utilice su nuevo estilo de nomenclatura:
Reiniciar Visual Studio
Después de eso, cuando aplique la refactorización "Crear e inicializar campo", se nombrará con un guión bajo inicial.
La configuración de .editorconfig es la respuesta de kspearrin no funcionó para mí. Tuve que usar estas (para VS2017 Versión 15.4.0):
[*.{cs,vb}]
dotnet_naming_rule.private_members_with_underscore.symbols = private_fields
dotnet_naming_rule.private_members_with_underscore.style = prefix_underscore
dotnet_naming_rule.private_members_with_underscore.severity = suggestion
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_style.prefix_underscore.capitalization = camel_case
dotnet_naming_style.prefix_underscore.required_prefix = _
Los obtuve de aquí: https://github.com/dotnet/roslyn/issues/22884#issuecomment -358776444
Esto se puede lograr creando su propia regla de nomenclatura de Roslyn Code Analyzer. Agregue un .editorconfig
en su solución para especificar convenciones de nomenclatura personalizadas.
Lea más sobre ellos aquí: https://learn.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference
Para obtener el efecto deseado de la pregunta, lo siguiente funcionará:
[*.{cs,vb}]
dotnet_naming_rule.private_members_with_underscore.symbols = private_fields
dotnet_naming_rule.private_members_with_underscore.style = prefix_underscore
dotnet_naming_rule.private_members_with_underscore.severity = suggestion
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_symbols.private_fields.required_modifiers = readonly
dotnet_naming_style.prefix_underscore.capitalization = camel_case
dotnet_naming_style.prefix_underscore.required_prefix = _
Resultado:
Leí las soluciones anteriores y por mucho que parezcan correctas, la única forma de hacer que la configuración funcione correctamente en VS2022 es ordenar correctamente las entradas .editorconfig, de la siguiente manera:
# Use underscores for private fields
[*.{cs,vb}]
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_style.prefix_underscore.capitalization = camel_case
dotnet_naming_style.prefix_underscore.required_prefix = _
dotnet_naming_rule.private_fields_with_underscore.symbols = private_fields
dotnet_naming_rule.private_fields_with_underscore.style = prefix_underscore
dotnet_naming_rule.private_fields_with_underscore.severity = warning