2011-01-31 5 views
8

Mi código contiene una variable llamada "m_d3dDevice".Cómo reparar la violación de StyleCop SA1305 (húngaro)

StyleCop se queje de este nombre:

SA1305: El nombre de la variable 'm_d3dDevice' comienza con un prefijo que se parece a la notación húngara. Elimine el prefijo o agréguelo a la lista de los prefijos permitidos.

(Nota tengo SA1308 desactivada manualmente ("m_"), una de las pocas reglas que estoy dispuesto a desobedecer.)

No puedo permitir "D3D" como una excepción en el húngaro pestaña, ya que solo permite 1 o 2 prefijos de caracteres, y permitir "d3" no ayudó. He intentado todo lo que se me ocurre para agregar "d3d" a mi archivo CustomDictionary (y de todos modos los documentos implican que CustomDict no se usa para la regla 1305).

¿Alguna sugerencia para hacer que StyleCop lo permita? Es una cuestión de orgullo ahora no tener que F2 mi variable.

+0

Settings.StyleCop lo que es 'D3D 'una abreviatura de? –

+0

Creo que la única forma de cumplir esta regla es cambiar el nombre de tu variable a algo como 'm_direct3DDevice' si eso es lo que es una abreviatura de. –

+4

Qué ridícula "regla" y una prueba de fuego aún más ridícula para identificar infracciones. ¿Qué hay de malo en deshabilitar esa regla y confiar en ti mismo para ser lo suficientemente inteligente como para nombrar variables? La regla general para * evitar * la notación "húngara" aparentemente se ha vuelto tan ridícula como la regla de que uno debería usarla. –

Respuesta

6

Puedes echar un vistazo a StyleCop+. Contiene reglas de nomenclatura flexibles que le permitirán forzar que todos los campos privados se nombren comenzando por "m_" (o lo que desee) en lugar de deshabilitar la verificación de nombres (como lo hizo).

En cuanto a "d3dDevice", es un caso muy interesante. Lógicamente, se divide en las siguientes palabras: {"d", "3", "d", "Dispositivo"} o {"d3", "d", "Dispositivo"}. Y la segunda "d" parece no seguir "camelNotation".

Pero, creo firmemente que el análisis estático (en particular la denominación) debe ser lo suficientemente flexible como para satisfacer las necesidades del usuario. Actualmente StyleCop + puede apoyar su caso de la siguiente manera - por ejemplo, se puede añadir "excepción" (tantos como se desee) para nombrar plantilla para campos privados, por lo que se verá así:

m _ $ (AABB)
m_d3d $ (AABB)

esto es más probable que sea solución, pero voy a pensar en su caso "D3D" - y tal vez StyleCop + apoyará algo como esto.

¡Gracias por el interesante ejemplo!

+2

Una publicación muy útil, así que un +1 de mí. Pero como una advertencia justa, ya que parece que ambos son nuevos en Stack Overflow y el autor o estrechamente asociado con StyleCop +. Es posible que desee hacer explícita su afiliación (por ejemplo, incluyendo un simple descargo de responsabilidad), para que los usuarios no decidan marcar sus publicaciones como correo no deseado. La parte inferior de [FAQ] (http://stackoverflow.com/faq) discute esto brevemente también. Pero independientemente, bienvenido al sitio y ¡gracias por compartir su experiencia! –

+1

Comprobaré StyleCop +, gracias. Como parece que no hay una respuesta "real" para este caso, además de renombrar la variable o deshabilitar la regla, marcaré esto como la mejor respuesta ... -mpg – mpg

+0

@Cody Sí, tienes razón - Soy el autor Gracias por la advertencia, seguramente no tenía la intención de promocionarlo. Tendré cuidado con eso. –

11

También puede suprimir stylecop caso por caso. p.ej.

[System.Diagnostics.CodeAnalysis.SuppressMessage(
    "Microsoft.StyleCop.CSharp.NamingRules", 
    "SA1305:FieldNamesMustNotUseHungarianNotation", 
    Justification = "Using Win32 naming for consistency.")] 
IntPtr hFile; 

esto podría no ser una opción atractiva si tiene numerosos nombres ofensivos, pero para uno o dos, por lo general es bien.

0

Agregar el atributo de supresión se debe hacer sobre todos los métodos, lo que llevará tiempo y un proceso largo.

Si desea eliminar esta regla a partir de su proyecto probar este

  • clic derecho en su proyecto Ajustes
  • Seleccionar StyleCop
  • Búsqueda SA1305
  • Desactive la regla del conjunto de resultados
  • Haga clic en Aplicar - OK
  • Vuelva a ejecutar las reglas de estilo de policía.
1

También puede usar el Settings.StyleCop en los archivos del paquete para configurar los ajustes.

Puede suprimir palabras específicas añadiendo a continuación código al archivo Settings.StyleCop:

<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules"> 
    <AnalyzerSettings> 
    <CollectionProperty Name="Hungarian"> 
     <Value>as</Value> 
     <Value>do</Value> 
     <Value>id</Value> 
     <Value>if</Value> 
     <Value>in</Value> 
     <Value>ip</Value> 
     <Value>is</Value> 
     <Value>mx</Value> 
     <Value>my</Value> 
     <Value>no</Value> 
     <Value>on</Value> 
     <Value>to</Value> 
     <Value>ui</Value> 
     <Value>vs</Value> 
     <Value>x</Value> 
     <Value>y</Value> 
     <Value>z</Value> 
     <Value>iOS</Value> 
     <Value>IOS</Value> 
    </CollectionProperty> 
    </AnalyzerSettings> 
</Analyzer> 

puede suprimir la Regla Hungarain sí añadiendo lo siguiente al archivo

<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules"> 
    <Rules> 
    <Rule Name="FieldNamesMustNotUseHungarianNotation"> 
    <RuleSettings> 
    <BooleanProperty Name="Enabled"> 
     False 
    </BooleanProperty> 
    </RuleSettings> 
    </Rule> 
</Rules> 
</Analyzer>