Meziantou.Analyzer
2.0.183
Un analizador de Roslyn para hacer cumplir algunas buenas prácticas en C# en términos de diseño, uso, seguridad, rendimiento y estilo.
Instale el paquete Nuget https://www.nuget.org/packages/meziantou.analyzer/
Si ya está utilizando otros analizadores, puede verificar qué reglas se duplican con analizadores conocidos
| Identificación | Categoría | Descripción | Gravedad | Está habilitado | Corrección de código |
|---|---|---|---|---|---|
| MA0001 | Uso | Falta StringComparison | ✔️ | ✔️ | |
| MA0002 | Uso | Falta iEqualityComparer <String> o Icomparer <String> | ✔️ | ✔️ | |
| MA0003 | Estilo | Agregue el nombre del parámetro para mejorar la legibilidad | ✔️ | ✔️ | |
| MA0004 | Uso | Usar tarea.configueawait | ✔️ | ✔️ | |
| MA0005 | Actuación | Use Array.empty <t> () | ✔️ | ✔️ | |
| MA0006 | Uso | Use string.equals en lugar de operador de igualdad | ✔️ | ✔️ | |
| Ma0007 | Estilo | Agregue una coma después del último valor | ✔️ | ✔️ | |
| MA0008 | Actuación | Agregar structLayoutattribute | ✔️ | ✔️ | |
| MA0009 | Seguridad | Agregar tiempo de espera de evaluación de regex | ✔️ | ||
| Ma0010 | Diseño | Marque los atributos con AttributeUsageAttribute | ✔️ | ✔️ | |
| Ma0011 | Uso | Falta iformatProvider | ✔️ | ||
| MA0012 | Diseño | No recaude el tipo de excepción reservada | ✔️ | ||
| MA0013 | Diseño | Los tipos no deben extender el sistema. | ✔️ | ||
| Ma0014 | Diseño | No aumente el tipo de sistema. | ✔️ | ||
| MA0015 | Uso | Especifique el nombre del parámetro en ArgumentException | ✔️ | ||
| Ma0016 | Diseño | Prefiere usar la abstracción de la recolección en lugar de la implementación | ✔️ | ||
| Ma0017 | Diseño | Los tipos de resúmenes no deben tener constructores públicos o internos | ✔️ | ✔️ | |
| Ma0018 | Diseño | No declare miembros estáticos en tipos genéricos (en desuso; use CA1000 en su lugar) | ✔️ | ||
| Ma0019 | Uso | Usa eventargs.empty | ✔️ | ✔️ | |
| Ma0020 | Actuación | Use métodos directos en lugar de métodos LINQ | ✔️ | ✔️ | |
| Ma0021 | Uso | Use StringComparer.GethashCode en lugar de String.gethashCode | ✔️ | ✔️ | |
| Ma0022 | Diseño | Tarea de devolución. | ✔️ | ✔️ | |
| Ma0023 | Actuación | Agregar regexOptions.explicitCapture | ✔️ | ||
| Ma0024 | Uso | Use un StringComparer explícito cuando sea posible | ✔️ | ✔️ | |
| Ma0025 | Diseño | Implementar la funcionalidad en lugar de lanzar NoteMemementEdException | ✔️ | ||
| Ma0026 | Diseño | Arreglar el comentario | ✔️ | ||
| Ma0027 | Uso | Prefiere volver a recubrir una excepción implícitamente | ✔️ | ✔️ | |
| Ma0028 | Actuación | Optimizar el uso de StringBuilder | ✔️ | ✔️ | |
| Ma0029 | Actuación | Combinar métodos LINQ | ✔️ | ✔️ | |
| Ma0030 | Actuación | Eliminar la llamada inútil de pedidos | ✔️ | ✔️ | |
| MA0031 | Actuación | Optimizar enumerable.count () uso | ✔️ | ✔️ | |
| Ma0032 | Uso | Use una sobrecarga con un argumento de CancellationToken | |||
| Ma0033 | Diseño | No etiquete los campos de instancia con ThreadStaticAttribute | ✔️ | ||
| MA0035 | Uso | No use métodos de roscado peligrosos | ✔️ | ||
| Ma0036 | Diseño | Hacer clase estática | ✔️ | ✔️ | |
| Ma0037 | Uso | Eliminar la declaración vacía | ✔️ | ✔️ | |
| Ma0038 | Diseño | Hacer método estático (en desuso, use CA1822 en su lugar) | ✔️ | ✔️ | |
| Ma0039 | Seguridad | No escriba su propio método de validación de certificado | ✔️ | ||
| Ma0040 | Uso | Reenviar el parámetro cancelationToken a los métodos que toman uno | ✔️ | ✔️ | |
| MA0041 | Diseño | Haga una propiedad estática (en desuso, use CA1822 en su lugar) | ✔️ | ✔️ | |
| Ma0042 | Diseño | No use llamadas de bloqueo en un método async | ✔️ | ✔️ | |
| Ma0043 | Uso | Use NameOf Operator en ArgumentException | ✔️ | ✔️ | |
| MA0044 | Actuación | Eliminar la llamada inútil de tostración | ✔️ | ✔️ | |
| Ma0045 | Diseño | No use llamadas de bloqueo en un método de sincronización (necesita hacer que el método de llamadas async) | ✔️ | ||
| Ma0046 | Diseño | Use EventHandler <t> para declarar eventos | ✔️ | ||
| Ma0047 | Diseño | Declarar tipos en espacios de nombres | ✔️ | ||
| Ma0048 | Diseño | El nombre del archivo debe coincidir el nombre del tipo | ✔️ | ||
| Ma0049 | Diseño | El nombre del tipo no debe coincidir con el espacio de nombres | ✔️ | ||
| Ma0050 | Diseño | Validar los argumentos correctamente en los métodos de iterador | ✔️ | ✔️ | |
| MA0051 | Diseño | El método es demasiado largo | ✔️ | ||
| Ma0052 | Actuación | Reemplace constante enum.tostring con nombre | ✔️ | ✔️ | |
| Ma0053 | Diseño | Hacer sellado | ✔️ | ✔️ | |
| Ma0054 | Diseño | Incrustar la excepción atrapada como innerexcepción | ✔️ | ||
| Ma0055 | Diseño | No use finalizador | ✔️ | ||
| Ma0056 | Diseño | No llame a miembros innecesables en el constructor | ✔️ | ||
| Ma0057 | Nombramiento | El nombre de la clase debe terminar con 'atributo' | ✔️ | ||
| Ma0058 | Nombramiento | El nombre de la clase debe terminar con 'excepción' | ✔️ | ||
| Ma0059 | Nombramiento | El nombre de la clase debe terminar con 'EventArgs' | ✔️ | ||
| Ma0060 | Diseño | El valor devuelto por stream.read/stream.readasync no se usa | ✔️ | ||
| Ma0061 | Diseño | Las anulaciones del método no deben cambiar los valores predeterminados | ✔️ | ✔️ | |
| Ma0062 | Diseño | Los enums sin flags no deben marcarse con "flagsattribute" | ✔️ | ||
| Ma0063 | Actuación | Use donde antes del pedido | ✔️ | ||
| Ma0064 | Diseño | Evite el bloqueo en un caso de acceso público | ✔️ | ||
| Ma0065 | Actuación | ValueType predeterminado. Equals o hashcode se usa para la igualdad de estructura | ✔️ | ||
| Ma0066 | Actuación | Tipo de tabla hash se usa en una tabla hash | ✔️ | ||
| Ma0067 | Diseño | Use Guid.empty | ✔️ | ✔️ | |
| Ma0068 | Diseño | Nombre del parámetro no válido para atributo anulable | ✔️ | ||
| Ma0069 | Diseño | Los campos estáticos no constantes no deben ser visibles | ✔️ | ||
| Ma0070 | Diseño | Los atributos obsoletos deben incluir explicaciones | ✔️ | ||
| Ma0071 | Estilo | Evite usar redundante de lo contrario | ✔️ | ✔️ | |
| Ma0072 | Diseño | No arrojes desde un bloque finalmente | ✔️ | ||
| Ma0073 | Estilo | Evite la comparación con Bool Constant | ✔️ | ✔️ | |
| Ma0074 | Uso | Evitar métodos implícitos sensibles a la cultura | ✔️ | ✔️ | |
| Ma0075 | Diseño | No use tostring implícito sensible a la cultura | ✔️ | ||
| Ma0076 | Diseño | No use tostring implícito sensible a la cultura en cuerdas interpoladas | ✔️ | ||
| Ma0077 | Diseño | Una clase que proporciona iguales (t) debe implementar iEquatable <t> | ✔️ | ✔️ | |
| Ma0078 | Actuación | Use 'Cast' en lugar de 'Seleccionar' para lanzar | ✔️ | ✔️ | |
| Ma0079 | Uso | Reenviar la cancelación de Cancellation usando .WithCancellation () | ✔️ | ✔️ | |
| Ma0080 | Uso | Use un token de cancelación usando .WithCancellation () | |||
| Ma0081 | Diseño | Las anulaciones de métodos no deben omitir la palabra clave Params | ✔️ | ✔️ | |
| Ma0082 | Diseño | Nan no debe usarse en comparaciones | ✔️ | ||
| Ma0083 | Diseño | Los parámetros de constructoraRgument deben existir en los constructores | ✔️ | ||
| Ma0084 | Diseño | Las variables locales no deben ocultar otros símbolos | ✔️ | ||
| Ma0085 | Uso | Los delegados anónimos no deben usarse para darse de baja de los eventos | ✔️ | ||
| Ma0086 | Diseño | No arrojes de un finalizador | ✔️ | ||
| Ma0087 | Diseño | Los parámetros con los atributos [DefaultParamTervalue] también deben estar marcados [opcionales] | ✔️ | ||
| Ma0088 | Diseño | Use [DefaultParametervalue] en lugar de [DefaultValue] | ✔️ | ||
| Ma0089 | Actuación | Optimizar el uso del método de cadena | ✔️ | ✔️ | |
| Ma0090 | Diseño | Eliminar vacío más/finalmente bloque | ✔️ | ||
| MA0091 | Uso | El remitente debe ser 'esto' por ejemplo eventos | ✔️ | ✔️ | |
| Ma0092 | Uso | El remitente debe ser 'nulo' para eventos estáticos | ✔️ | ||
| Ma0093 | Uso | EventArgs no debe ser nulo | ✔️ | ✔️ | |
| Ma0094 | Diseño | Una clase que proporciona comparación (t) debe implementar iComParable <T> | ✔️ | ||
| Ma0095 | Diseño | Una clase que implementa iEquatable <T> debería anular igual (objeto) | ✔️ | ||
| Ma0096 | Diseño | Una clase que implementa icomparable <t> también debe implementar iEquatable <t> | ✔️ | ||
| Ma0097 | Diseño | Una clase que implementa icomparable <t> o icomparable debe anular a los operadores de comparación | ✔️ | ||
| Ma0098 | Actuación | Use indexador en lugar de métodos LINQ | ✔️ | ✔️ | |
| Ma0099 | Uso | Use el valor explícito de enum en lugar de 0 | ✔️ | ||
| MA0100 | Uso | Esperar la tarea antes de deshacerse de los recursos | ✔️ | ||
| MA0101 | Uso | La cadena contiene un personaje de fin de línea implícito | ? | ✔️ | ✔️ |
| MA0102 | Diseño | Hacer que el miembro lea | ✔️ | ✔️ | |
| MA0103 | Uso | Use secuencequal en lugar de operador de igualdad | ✔️ | ✔️ | |
| MA0104 | Diseño | No cree un tipo con un nombre del BCL | |||
| MA0105 | Actuación | Use los parámetros Lambda en lugar de usar un cierre | ✔️ | ||
| MA0106 | Actuación | Evite el cierre utilizando una sobrecarga con el parámetro 'FactoryArgument' | ✔️ | ||
| MA0107 | Diseño | No use objeto sensible a la cultura. | |||
| MA0108 | Uso | Eliminar el valor de argumento redundante | ✔️ | ✔️ | |
| MA0109 | Diseño | Considere agregar una sobrecarga con un tramo <t> o memoria <t> | |||
| MA0110 | Actuación | Use el generador de fuente de regex | ✔️ | ✔️ | |
| MA0111 | Actuación | Use string.create en lugar de formattableString | ✔️ | ✔️ | |
| MA0112 | Actuación | Use 'Count> 0' en lugar de 'Any ()' | |||
| MA0113 | Diseño | Use Datetime.unixepoch | ✔️ | ✔️ | |
| MA0114 | Diseño | Use DatetimeOffset.unixepoch | ✔️ | ✔️ | |
| MA0115 | Uso | Parámetro de componente desconocido | ✔️ | ||
| MA0116 | Diseño | Los parámetros con los atributos [SupplyParameterFromQuery] también deben marcarse como [Parámetro] | ✔️ | ✔️ | |
| MA0117 | Diseño | Los parámetros con los atributos [EditorRequired] también deben marcarse como [Parámetro] | ✔️ | ✔️ | |
| MA0118 | Diseño | Los métodos [jsinvokable] deben ser públicos | ✔️ | ||
| MA0119 | Diseño | JSRUNTIME no debe usarse en ininicializado o en ininitializedAsync | ✔️ | ||
| MA0120 | Actuación | Use InvokeVoidAsync cuando no se use el valor devuelto | ✔️ | ✔️ | |
| MA0121 | Diseño | No sobrescribir el valor del parámetro | |||
| MA0122 | Diseño | Los parámetros con los atributos [SupplyParameterFromQuery] solo son válidos en componentes enrutables (@Page) | ✔️ | ||
| MA0123 | Diseño | El número de secuencia debe ser una constante | ✔️ | ||
| MA0124 | Diseño | El tipo de parámetro de registro no es válido | ✔️ | ||
| MA0125 | Diseño | La lista de tipos de parámetros de registro contiene un tipo no válido | ✔️ | ||
| MA0126 | Diseño | La lista de tipos de parámetros de registro contiene un duplicado | ✔️ | ||
| MA0127 | Uso | Usar string.equals en lugar de es patrón | |||
| MA0128 | Uso | Use 'is' operador en lugar de secuencequal | ✔️ | ✔️ | |
| MA0129 | Uso | Esperar la tarea al usar la declaración | ✔️ | ||
| MA0130 | Uso | GetType () no debe usarse en el sistema. | ✔️ | ||
| MA0131 | Uso | Argumentnullexception. Throwifnull no debe usarse con tipos no anulables | ✔️ | ||
| MA0132 | Diseño | No se convierta implícitamente en DateTimeOffset | ✔️ | ||
| MA0133 | Diseño | Use DateTimeOffset en lugar de confiar en la conversión implícita | ✔️ | ||
| MA0134 | Uso | Observe el resultado de las llamadas de async | ✔️ | ||
| MA0135 | Diseño | El parámetro de registro no tiene tipo configurado | |||
| MA0136 | Uso | La cadena en bruto contiene un carácter de final de línea implícito | ? | ✔️ | |
| MA0137 | Diseño | Use sufijo 'async' cuando un método devuelve un tipo esperable | |||
| MA0138 | Diseño | No use sufijo 'async' cuando un método no devuelve un tipo esperable | |||
| MA0139 | Diseño | El tipo de parámetro de registro no es válido | ✔️ | ||
| MA0140 | Diseño | Tanto si y else rama tiene un código idéntico | ✔️ | ||
| MA0141 | Uso | Use la coincidencia de patrones en lugar de operadores de desigualdad para cheques nulos | ✔️ | ||
| MA0142 | Uso | Use la coincidencia de patrones en lugar de operadores de igualdad para cheques nulos | ✔️ | ||
| MA0143 | Diseño | Los parámetros del constructor primario deben ser lectores | ✔️ | ||
| MA0144 | Actuación | Use System.OperatingSystem para verificar el sistema operativo actual | ✔️ | ||
| MA0145 | Uso | La firma para el método [unsafeacCessorAttribute] no es válido | ✔️ | ||
| MA0146 | Uso | El nombre debe establecerse explícitamente en las funciones locales | ✔️ | ||
| MA0147 | Uso | Evite el método de vacío de asíncrono para delegado | ✔️ | ||
| MA0148 | Uso | Use la coincidencia de patrones en lugar de los operadores de igualdad para un valor discreto | ✔️ | ||
| MA0149 | Uso | Use la coincidencia de patrones en lugar de operadores de desigualdad para un valor discreto | ✔️ | ||
| MA0150 | Diseño | No llame al objeto predeterminado.ToString explícitamente | ✔️ | ||
| MA0151 | Uso | DebuggerDisplay debe contener miembros válidos | ✔️ | ||
| MA0152 | Actuación | Use Unwrap en lugar de usar espera dos veces | ✔️ | ||
| MA0153 | Diseño | No registre símbolos decorados con DataClassificationAttribute directamente | ✔️ | ||
| MA0154 | Diseño | Use Langword en el comentario XML | ✔️ | ✔️ | |
| MA0155 | Diseño | No use métodos vacíos asíncronos | |||
| MA0156 | Diseño | Use sufijo 'async' cuando un método devuelve iAsynCenumerable <t> | |||
| MA0157 | Diseño | No use sufijo 'async' cuando un método no devuelve iAsyncenumerable <t> | |||
| MA0158 | Actuación | Use System.Threading.lock | ✔️ | ||
| MA0159 | Actuación | Use 'Orden' en lugar de 'Orderby' | ✔️ | ✔️ | |
| MA0160 | Actuación | Use Contiene Key en lugar de TryGetValue | ✔️ | ||
| MA0161 | Uso | USESHELLEXECUTE debe estar explícitamente establecido | |||
| MA0162 | Uso | Use Process.Star Overload con ProcessStartInfo | |||
| MA0163 | Uso | USESHELLEXECUTE debe ser falso al redirigir la entrada o la salida estándar | ✔️ | ||
| MA0164 | Estilo | Use paréntesis para no aclarar el patrón | ✔️ | ✔️ | |
| MA0165 | Uso | Hacer cadena interpolada | ? | ✔️ | ✔️ |
| Identificación | Regla suprimida | Justificación |
|---|---|---|
MAS0001 | CA1822 | Suprima CA1822 en métodos decorados con atributos de BenchmarkDotnet. |
MAS0002 | CA1822 | Suprima CA1822 en métodos decorados con un atributo System.Text.json como [JsonPropertyname] o [JSONinclude]. |
MAS0003 | IDE0058 | Suprimir IDE0058 en tipos conocidos |