Como faço para personalizar o atalho de geração de campo privado do Visual Studio para construtores?

120

O VS 2017 (e talvez versões mais antigas) me dá este pequeno atalho de construtor útil para gerar um private readonlycampo e atribuí-lo.

Captura de tela:

insira a descrição da imagem aqui

Isso acaba gerando um membro privado chamado userServicee, em seguida, o atribui com:

this.userService = userService;

Isso vai contra o estilo de código que uso, que nomeia todos os membros privados com um prefixo, _resultando em uma atribuição que deve ser semelhante a:

_userService = userService;

Como posso fazer com que o VS obedeça a essa regra de estilo de código com seus atalhos de geração de código?

kspearrin
fonte
Isso não tem nada a ver com snippets, esse recurso é fornecido pelo serviço de análise de código. Disponível desde que Roslyn foi adicionada. Um sublinhado à esquerda é uma violação das Diretrizes de Programação do .NET Framework, não há como convencer um programador da Microsoft a mudar isso. É um estilo empurrado por Resharper, eles não gostam this.porque isso faz com que o programador não compre, considere usá-lo.
Hans Passant
18
@HansPassant Cada pedaço de código moderno que vi produzido pelas equipes da Microsoft segue esta _camelCaseconvenção para membros privados. Veja a CoreFX C # Coding diretrizes de estilo , ASP.NET Núcleo estilo de codificação e até mesmo código Rosyln si ... ??
kspearrin
5
@HansPassant Boas notícias ... alguém convenceu um programador da Microsoft a mudar isso. Veja a resposta abaixo.
kspearrin
Alguma ideia de como fazer isso no Visual Studio para Macs?
Jason V

Respostas:

229

Isso também pode ser feito diretamente no Visual Studio. Basta ir para Tools -> Options -> Text Editor -> C# -> Code Style -> Naming.

  1. Em primeiro lugar, você precisa definir um novo estilo de nomenclatura clicando no botão "Gerenciar estilos de nomenclatura":

VS2017 Caixa de diálogo de estilo de nomenclatura

  1. Em seguida, clique no sinal + para definir uma nova regra para "Campo privado ou interno", que usa seu novo estilo de nomenclatura:

Caixa de diálogo de opções do VS2017

  1. Reinicie o Visual Studio

  2. Depois disso, quando você aplicar a refatoração "Criar e inicializar campo", ele será nomeado com um sublinhado à esquerda.

Maciek
fonte
Estou no Visual Studio 15.8.8 e esta foi a única resposta aqui que funcionou para mim.
Jonathan Taylor
25
FYI: Você pode ter que reiniciar o VS depois disso.
Jeff
9
Funciona bem no VS 2019.
Matt Stannett
3
Nem todos os heróis usam capas. Ótima explicação. Funciona bem! THX.
datoml
1
Não é necessário reiniciar no VS 2019 Versão 16.5.4
Douglas HM
32

As configurações .editorconfig são a resposta de kspearrin não funcionou para mim, eu tive que usar estas (para VS2017 versão 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 = _

Peguei aqui: https://github.com/dotnet/roslyn/issues/22884#issuecomment-358776444

michael_hook
fonte
Esquisito. Agora estou usando o VS 2017 15.6 e minha resposta original ainda parece funcionar lá. Quem sabe ...
kspearrin
Eu atualizei para 15.6.3 e esta versão ainda funciona para mim. Estou usando a edição Community, talvez você não esteja?
michael_hook
Também não consigo fazer funcionar, estou usando o VS Pro 2017 versão 15.6.4
Eric Schneider
1
seguindo também: docs.microsoft.com/en-us/visualstudio/ide/…
Eric Schneider
Este funcionou para mim quando a resposta aceita não. VS Pro 15.7.5
Licht
24

Isso pode ser feito criando sua própria regra de nomenclatura do Roslyn Code Analyzer. Adicione um .editorconfigem sua solução para especificar convenções de nomenclatura customizadas.

Leia mais sobre eles aqui: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference

Para obter o efeito desejado da pergunta, o seguinte 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:

insira a descrição da imagem aqui

kspearrin
fonte
Este me parece ser o longo caminho para cumprir essa tarefa. Por favor, veja a resposta de @Maciek.
Eric
Este foi o único caminho de volta quando eu respondi originalmente. Parece que eles adicionaram uma IU para ele agora.
kspearrin
1
Editar .editorconfig é uma solução muito mais agradável do que fazê-lo por meio da IU.
gliljas
@Eric É o contrário. Ter que dizer a cada membro de sua equipe para configurar seu VS de uma certa maneira manualmente é definitivamente muito mais longo, tedioso e sujeito a erros do que fazer o check-in de um .editorconfigarquivo no Git e saber que a partir daquele momento todos terão suas configurações automaticamente ajustadas para seguir o estilo de codificação do projeto.
Daniel Liuzzi