Meziantou.Analyzer
2.0.183
Um analisador de Roslyn para aplicar algumas boas práticas em C# em termos de design, uso, segurança, desempenho e estilo.
Instale o pacote NUGET https://www.nuget.org/packages/meziantou.analyzer/
Se você já está usando outros analisadores, pode verificar quais regras são duplicadas com analisadores conhecidos
| Eu ia | Categoria | Descrição | Gravidade | Está ativado | Correção de código |
|---|---|---|---|---|---|
| MA0001 | Uso | StringComparison está faltando | ✔️ | ✔️ | |
| MA0002 | Uso | IequityComparer <string> ou icomparer <string> está faltando | ✔️ | ✔️ | |
| MA0003 | Estilo | Adicione o nome do parâmetro para melhorar a legibilidade | ✔️ | ✔️ | |
| MA0004 | Uso | Use Task.configureawait | ✔️ | ✔️ | |
| MA0005 | Desempenho | Use Array.Empty <T> () | ✔️ | ✔️ | |
| MA0006 | Uso | Use String.equals em vez de operador de igualdade | ✔️ | ✔️ | |
| MA0007 | Estilo | Adicione uma vírgula após o último valor | ✔️ | ✔️ | |
| MA0008 | Desempenho | Adicione o StructLayOutattribute | ✔️ | ✔️ | |
| MA0009 | Segurança | Adicionar tempo limite de avaliação regex | ✔️ | ||
| MA0010 | Projeto | Marcar atributos com attributeUsageattribute | ✔️ | ✔️ | |
| MA0011 | Uso | IFORMATPROVER está faltando | ✔️ | ||
| MA0012 | Projeto | Não aumente o tipo de exceção reservada | ✔️ | ||
| MA0013 | Projeto | Os tipos não devem estender o sistema.ApplicationException | ✔️ | ||
| MA0014 | Projeto | Não aumente o tipo de system.ApplicationException | ✔️ | ||
| MA0015 | Uso | Especifique o nome do parâmetro na ArgumentException | ✔️ | ||
| MA0016 | Projeto | Prefira usar a abstração de coleção em vez de implementação | ✔️ | ||
| MA0017 | Projeto | Tipos abstratos não devem ter construtores públicos ou internos | ✔️ | ✔️ | |
| MA0018 | Projeto | Não declare membros estáticos em tipos genéricos (depreciados; use CA1000 em vez disso) | ✔️ | ||
| MA0019 | Uso | Use EventArgs.Empty | ✔️ | ✔️ | |
| MA0020 | Desempenho | Use métodos diretos em vez de métodos LINQ | ✔️ | ✔️ | |
| MA0021 | Uso | Use StringComparer.gethashcode em vez de String.gethashcode | ✔️ | ✔️ | |
| MA0022 | Projeto | Retorne tarefa.FromResult em vez de retornar nulo | ✔️ | ✔️ | |
| MA0023 | Desempenho | Adicione regexoptions.explicitcapture | ✔️ | ||
| MA0024 | Uso | Use um StringComparer explícito quando possível | ✔️ | ✔️ | |
| MA0025 | Projeto | Implementar a funcionalidade em vez de lançar no notimpleledException | ✔️ | ||
| MA0026 | Projeto | Corrija o comentário para TODO | ✔️ | ||
| MA0027 | Uso | Prefira remover uma exceção implicitamente | ✔️ | ✔️ | |
| MA0028 | Desempenho | Otimize o uso do StringBuilder | ✔️ | ✔️ | |
| MA0029 | Desempenho | Combine métodos LINQ | ✔️ | ✔️ | |
| MA0030 | Desempenho | Remova a chamada de ordem inútil por | ✔️ | ✔️ | |
| MA0031 | Desempenho | Otimize enumerable.Count () Uso | ✔️ | ✔️ | |
| MA0032 | Uso | Use uma sobrecarga com um argumento de cancelamento | |||
| MA0033 | Projeto | Não marque os campos de instância com threadstaticattribute | ✔️ | ||
| MA0035 | Uso | Não use métodos de rosqueamento perigoso | ✔️ | ||
| MA0036 | Projeto | Tornar a classe estática | ✔️ | ✔️ | |
| MA0037 | Uso | Remova a declaração vazia | ✔️ | ✔️ | |
| MA0038 | Projeto | Faça do método estático (preterido, use CA1822 em vez disso) | ✔️ | ✔️ | |
| MA0039 | Segurança | Não escreva seu próprio método de validação de certificado | ✔️ | ||
| MA0040 | Uso | Encaminhar o parâmetro cancelationToken para métodos que tomam um | ✔️ | ✔️ | |
| MA0041 | Projeto | Faça da propriedade estática (depreciada, use o CA1822) | ✔️ | ✔️ | |
| MA0042 | Projeto | Não use chamadas de bloqueio em um método assíncrono | ✔️ | ✔️ | |
| MA0043 | Uso | Use o nome do operador na ArgumentException | ✔️ | ✔️ | |
| MA0044 | Desempenho | Remova a chamada inútil da tostragem | ✔️ | ✔️ | |
| MA0045 | Projeto | Não use chamadas de bloqueio em um método de sincronização (precisa fazer o método de chamada assíncrono) | ✔️ | ||
| MA0046 | Projeto | Use EventHandler <T> para declarar eventos | ✔️ | ||
| MA0047 | Projeto | Declarar tipos em namespaces | ✔️ | ||
| MA0048 | Projeto | O nome do arquivo deve corresponder ao nome do tipo | ✔️ | ||
| MA0049 | Projeto | Nome do tipo não deve corresponder ao espaço para nome | ✔️ | ||
| MA0050 | Projeto | Validar argumentos corretamente nos métodos de iterador | ✔️ | ✔️ | |
| MA0051 | Projeto | O método é muito longo | ✔️ | ||
| MA0052 | Desempenho | Substitua constante enum.toString por nome de | ✔️ | ✔️ | |
| MA0053 | Projeto | Faça da classe selada | ✔️ | ✔️ | |
| MA0054 | Projeto | Incorpor | ✔️ | ||
| MA0055 | Projeto | Não use o Finalizador | ✔️ | ||
| MA0056 | Projeto | Não ligue | ✔️ | ||
| MA0057 | Nomeação | O nome da classe deve terminar com 'atributo' | ✔️ | ||
| MA0058 | Nomeação | O nome da classe deve terminar com 'exceção' | ✔️ | ||
| MA0059 | Nomeação | O nome da classe deve terminar com 'EventArgs' | ✔️ | ||
| MA0060 | Projeto | O valor retornado por stream.read/stream.readasync não é usado | ✔️ | ||
| MA0061 | Projeto | As substituições de método não devem alterar os valores padrão | ✔️ | ✔️ | |
| MA0062 | Projeto | As enumes não flags não devem ser marcadas com "Flagsattribute" | ✔️ | ||
| MA0063 | Desempenho | Use onde antes do pedido | ✔️ | ||
| MA0064 | Projeto | Evite travar em instância de acesso ao público | ✔️ | ||
| MA0065 | Desempenho | ValueType padrão. | ✔️ | ||
| MA0066 | Desempenho | Hash Table Type é usado em uma tabela de hash | ✔️ | ||
| MA0067 | Projeto | Use Guid.Empty | ✔️ | ✔️ | |
| MA0068 | Projeto | Nome do parâmetro inválido para atributo Nullable | ✔️ | ||
| MA0069 | Projeto | Campos estáticos não constantes não devem ser visíveis | ✔️ | ||
| MA0070 | Projeto | Atributos obsoletos devem incluir explicações | ✔️ | ||
| MA0071 | Estilo | Evite usar outra pessoa redundante | ✔️ | ✔️ | |
| MA0072 | Projeto | Não jogue de um bloco finalmente | ✔️ | ||
| MA0073 | Estilo | Evite comparação com Bool Constant | ✔️ | ✔️ | |
| MA0074 | Uso | Evite métodos implícitos sensíveis à cultura | ✔️ | ✔️ | |
| MA0075 | Projeto | Não use tons de tons de cultura implícitos | ✔️ | ||
| MA0076 | Projeto | Não use a toque de toque de cultura implícita em cordas interpoladas | ✔️ | ||
| MA0077 | Projeto | Uma classe que fornece iguais (t) deve implementar iequatable <T> | ✔️ | ✔️ | |
| MA0078 | Desempenho | Use 'elenco' em vez de 'selecionar' para lançar | ✔️ | ✔️ | |
| MA0079 | Uso | Encaminhar o cancelamento usando .withCancellation () | ✔️ | ✔️ | |
| MA0080 | Uso | Use um token de cancelamento usando .WithCancellation () | |||
| MA0081 | Projeto | As substituições de método não devem omitir os params -chave | ✔️ | ✔️ | |
| MA0082 | Projeto | Nan não deve ser usado em comparações | ✔️ | ||
| MA0083 | Projeto | Os parâmetros construtoraRucument devem existir nos construtores | ✔️ | ||
| MA0084 | Projeto | Variáveis locais não devem ocultar outros símbolos | ✔️ | ||
| MA0085 | Uso | Delegados anônimos não devem ser usados para cancelar a inscrição em eventos | ✔️ | ||
| MA0086 | Projeto | Não jogue de um finalizador | ✔️ | ||
| MA0087 | Projeto | Os parâmetros com atributos [DefaultParameTervalue] também devem ser marcados [opcionais] | ✔️ | ||
| MA0088 | Projeto | Use [DefaultParameterValue] em vez de [DefaultValue] | ✔️ | ||
| MA0089 | Desempenho | Otimizar o uso do método da string | ✔️ | ✔️ | |
| MA0090 | Projeto | Remova mais vazio/finalmente bloqueie | ✔️ | ||
| MA0091 | Uso | O remetente deve ser 'isto', por exemplo, eventos | ✔️ | ✔️ | |
| MA0092 | Uso | O remetente deve ser 'nulo' para eventos estáticos | ✔️ | ||
| MA0093 | Uso | EventArgs não deve ser nulo | ✔️ | ✔️ | |
| MA0094 | Projeto | Uma classe que fornece compareto (t) deve implementar icomparable <T> | ✔️ | ||
| MA0095 | Projeto | Uma classe que implementa iEquatable <T> deve substituir iguais (objeto) | ✔️ | ||
| MA0096 | Projeto | Uma classe que implementa o ICOMPARABLE <T> também deve implementar iequatable <T> | ✔️ | ||
| MA0097 | Projeto | Uma classe que implementa IComparable <T> ou icomparable deve substituir os operadores de comparação | ✔️ | ||
| MA0098 | Desempenho | Use indexador em vez de métodos LINQ | ✔️ | ✔️ | |
| MA0099 | Uso | Use o valor explícito da enumeração em vez de 0 | ✔️ | ||
| MA0100 | Uso | Aguarde tarefa antes de descartar recursos | ✔️ | ||
| MA0101 | Uso | String contém um caractere de extremidade implícita | ? | ✔️ | ✔️ |
| MA0102 | Projeto | Faça do membro readonly | ✔️ | ✔️ | |
| MA0103 | Uso | Use seqüenceequal em vez de operador de igualdade | ✔️ | ✔️ | |
| MA0104 | Projeto | Não crie um tipo com um nome do BCL | |||
| MA0105 | Desempenho | Use os parâmetros lambda em vez de usar um fechamento | ✔️ | ||
| MA0106 | Desempenho | Evite o fechamento usando uma sobrecarga com o parâmetro 'Factoryargument' | ✔️ | ||
| MA0107 | Projeto | Não use objeto sensível à cultura.ToString | |||
| MA0108 | Uso | Remova o valor de argumento redundante | ✔️ | ✔️ | |
| MA0109 | Projeto | Considere adicionar uma sobrecarga com um span <t> ou memória <t> | |||
| MA0110 | Desempenho | Use o gerador de origem regex | ✔️ | ✔️ | |
| MA0111 | Desempenho | Use String.create em vez de formatablestring | ✔️ | ✔️ | |
| MA0112 | Desempenho | Use 'contagem> 0' em vez de 'qualquer ()' | |||
| MA0113 | Projeto | Use DateTime.unixepoch | ✔️ | ✔️ | |
| MA0114 | Projeto | Use DateTeTimeOffset.unixepoch | ✔️ | ✔️ | |
| MA0115 | Uso | Parâmetro de componente desconhecido | ✔️ | ||
| MA0116 | Projeto | Os parâmetros com atributos [SupplyParameterFromQuery] também devem ser marcados como [parâmetro] | ✔️ | ✔️ | |
| MA0117 | Projeto | Os parâmetros com atributos [EditorRequired] também devem ser marcados como [parâmetro] | ✔️ | ✔️ | |
| MA0118 | Projeto | Os métodos [jsinvokable] devem ser públicos | ✔️ | ||
| MA0119 | Projeto | JSruntime não deve ser usado em oninacionalizado ou oninializedasync | ✔️ | ||
| MA0120 | Desempenho | Use InvokeVoidasync quando o valor retornado não for usado | ✔️ | ✔️ | |
| MA0121 | Projeto | Não substitua o valor do parâmetro | |||
| MA0122 | Projeto | Parâmetros com atributos [SupplyParameterFromQuery] são válidos apenas em componentes rotáveis (@page) | ✔️ | ||
| MA0123 | Projeto | O número da sequência deve ser uma constante | ✔️ | ||
| MA0124 | Projeto | Tipo de parâmetro de log não é válido | ✔️ | ||
| MA0125 | Projeto | A lista de tipos de parâmetros de log contém um tipo inválido | ✔️ | ||
| MA0126 | Projeto | A lista de tipos de parâmetros de log contém um duplicado | ✔️ | ||
| MA0127 | Uso | Use string.equals em vez de é padrão | |||
| MA0128 | Uso | Use 'é' Operador 'em vez de sequencequal | ✔️ | ✔️ | |
| MA0129 | Uso | Aguarde tarefa ao usar a declaração | ✔️ | ||
| MA0130 | Uso | GetType () não deve ser usado no System.Type Instâncias | ✔️ | ||
| MA0131 | Uso | ArgumentNulLexception.THOWIFNULL não deve ser usado com tipos não indicáveis | ✔️ | ||
| MA0132 | Projeto | Não se converta implicitamente para o DateTimeOffset | ✔️ | ||
| MA0133 | Projeto | Use DateTimeOffset em vez de confiar na conversão implícita | ✔️ | ||
| MA0134 | Uso | Observe o resultado de chamadas assíncronas | ✔️ | ||
| MA0135 | Projeto | O parâmetro de log não tem tipo configurado | |||
| MA0136 | Uso | String cru contém um personagem implícito de fim de linha | ? | ✔️ | |
| MA0137 | Projeto | Use sufixo 'assíncrono' quando um método retornar um tipo aguardável | |||
| MA0138 | Projeto | Não use sufixo 'assíncrono' quando um método não retornar um tipo aguardável | |||
| MA0139 | Projeto | Tipo de parâmetro de log não é válido | ✔️ | ||
| MA0140 | Projeto | Ambos se e mais ramo têm código idêntico | ✔️ | ||
| MA0141 | Uso | Use a correspondência de padrões em vez de operadores de desigualdades para verificação nula | ✔️ | ||
| MA0142 | Uso | Use a correspondência de padrões em vez de operadores de igualdade para verificação nula | ✔️ | ||
| MA0143 | Projeto | Os parâmetros do construtor primário devem ser reado | ✔️ | ||
| MA0144 | Desempenho | Use System.operatingsystem para verificar o sistema operacional atual | ✔️ | ||
| MA0145 | Uso | A assinatura para o método [inseguroTorttribute] não é válido | ✔️ | ||
| MA0146 | Uso | O nome deve ser definido explicitamente nas funções locais | ✔️ | ||
| MA0147 | Uso | Evite o método do vazio assíncrono para o delegado | ✔️ | ||
| MA0148 | Uso | Use a correspondência de padrões em vez de operadores de igualdade por valor discreto | ✔️ | ||
| MA0149 | Uso | Use a correspondência de padrões em vez de operadores de desigualdades por valor discreto | ✔️ | ||
| MA0150 | Projeto | Não chame o objeto padrão.ToString explicitamente | ✔️ | ||
| MA0151 | Uso | DebuggerDisplay deve conter membros válidos | ✔️ | ||
| MA0152 | Desempenho | Use o Unwrap em vez de usar aguardar duas vezes | ✔️ | ||
| MA0153 | Projeto | Não registre símbolos decorados com dataclassificationAttribute diretamente | ✔️ | ||
| MA0154 | Projeto | Use Langword no comentário XML | ✔️ | ✔️ | |
| MA0155 | Projeto | Não use métodos assíncronos nulos | |||
| MA0156 | Projeto | Use o sufixo 'assíncrono' quando um método retornar | |||
| MA0157 | Projeto | Não use o sufixo 'assíncrono' quando um método não retornar IasSyncenumerable <T> | |||
| MA0158 | Desempenho | Use System.Threading.lock | ✔️ | ||
| MA0159 | Desempenho | Use 'Order' em vez de 'Orderby' | ✔️ | ✔️ | |
| MA0160 | Desempenho | Uso containsKey em vez de trygetValue | ✔️ | ||
| MA0161 | Uso | Usashellexecute deve ser explicitamente definido | |||
| MA0162 | Uso | Use Process.start sobrecarga com ProcessstartInfo | |||
| MA0163 | Uso | Useshellexecute deve ser falso ao redirecionar a entrada ou saída padrão | ✔️ | ||
| MA0164 | Estilo | Use parênteses para não tornar o padrão mais claro | ✔️ | ✔️ | |
| MA0165 | Uso | Faça string interpolada | ? | ✔️ | ✔️ |
| Eu ia | Regra suprimida | Justificação |
|---|---|---|
MAS0001 | CA1822 | Suprimir CA1822 nos métodos decorados com atributos BenchmarkDotNet. |
MAS0002 | CA1822 | Suprimir CA1822 nos métodos decorados com um atributo System.Text.json, como [JSONPROPERTYNAME] ou [JSONINCLUDE]. |
MAS0003 | IDE0058 | Suprimir IDE0058 em tipos conhecidos |