Rubocop Linelength: ¿Cómo ignorar líneas con comentarios?

109

Usando una aplicación Rails 4, me gustaría que Rubocop ignorara las líneas con comentarios (solo un comentario o algún código con un comentario al final de la línea) cuando verifique si una línea es demasiado larga. ¿Hay alguna forma de hacer esto?

Twiek
fuente

Respuestas:

197

Hay una forma de ignorar a los policías por línea.

También hay una forma de hacerlo a través del archivo de configuración.

Ejecutar rubocop --auto-gen-configy generará un archivo que puede usar para deshabilitar los delitos.

El comando también da una pista sobre qué hacer para cargar esas opciones.

Línea por línea, también puede habilitar y deshabilitar a los policías.

# rubocop:disable RuleByName
This is a long line 
# rubocop:enable RuleByName

También puede hacer más de una regla a la vez en su código.

# rubocop:disable BlockComments, AsciiComments

Al usar una directiva en línea, la directiva se vuelve válida solo para esa línea, y se vería así:

# Thanks to @jnt30 for the comment!
method(argument) # rubocop:disable SomeRule, SomeOtherRule

Puedes leer mucho más sobre RuboCop en su manual oficial .

Para encontrar todos los nombres de las reglas, vale la pena buscar en los archivos de configuración de rubocop

cyberwiz dice: "ejecutar rubocop -Dcuando necesite los nombres de las reglas en lugar de buscar en la documentación". Actualización : este es ahora el comportamiento predeterminado sin la bandera.

vgoff
fuente
1
Bueno, los comentarios pueden explicar la desviación de un estilo que ha sido aceptado por el equipo, así que esto no es malo, ¿verdad? De lo contrario, lo coloca en el archivo rubocop.yml, y luego no es una excepción de estilo aceptada y no necesita un comentario. El comentario dice "¡Quería hacer eso!". No es nada malo.
vgoff
1
los comentarios no son código, por lo que verificarlos es semánticamente diferente y IMO rubocop debería tratarlo de esa manera.
phoet
2
Los comentarios son parte del código y cuando se trata de código en el correo electrónico o en un terminal. Creo que es de mal gusto que sus comentarios no se adhieran a la misma longitud de línea que ha adoptado "el equipo" como código. No deben interrumpir el flujo solo porque son comentarios. Estoy seguro de que rubocop no verifica los comentarios en busca de nada, aparte de las directivas, semánticamente (de manera significativa). Verifica la longitud de la línea y el estilo de los comentarios. Entonces no, no busca significado, solo revisa estilo. No descarte que "los comentarios no son códigos" no tiene por qué serlo.
vgoff
De hecho, incluso la #!/bin/env rubylínea de comentarios es un comentario, pero codifica y es semánticamente importante. Los comentarios no siempre son solo "comentarios".
vgoff
1
@Twiek, ¿falta algo en esta respuesta que está buscando?
vgoff
35

Es posible definir patrones de expresiones regulares para ignorar automáticamente ciertas líneas rubocop.yml, por lo que puede optar por ignorar todas las líneas que comienzan con un #carácter:

Metrics/LineLength:
  Max: 80
  IgnoredPatterns: ['\A#']

Esto podría mejorarse para que las líneas de comentarios "con sangría" (es decir, espacios en blanco seguidos de un #carácter) también se ignoren, si eso es lo que desea.

Sin embargo, tenga en cuenta que esto no tiene en cuenta las líneas de código que terminan con un comentario:

some_code(that_does_something) # This line would NOT be ignored by Rubocop.
GoBusto
fuente
9
Puede expandir esa IgnorePatterns: ['(\A|\s)#']
expresión regular
1
Gracias @poustovitss. Hay un error tipográfico: debería ser IgnoredPatternsen su lugar IgnorePatterns(falta la letra 'd').
Horacio
9

Puede utilizar el siguiente comentario con rubocop para ignorar una regla específica:

# rubocop:disable Metrics/LineLength
def this_could_be_a_very_long_line_that_extends_forever_into_infinity
end
# rubocop:enable Metrics/LineLength

También puede ignorar archivos completos agregándolos a .rubocop.yml:

AllCops:
  Exclude:
    - path/to/file.rb

fuente
6

Creo que la idea básica aquí es que desea hacer cumplir la longitud de la línea, sin importar lo que esté después de n caracteres. el valor predeterminado de 80 caracteres es un cierto culto de carga para las ventanas de terminales antiguas que solo pueden contener esa cantidad de caracteres. la única opción que vi en el código es una opción para permitir URL que pueden exceder el límite de caracteres.

puede ignorar archivos completos , supongo que eso no es lo que está buscando.

foet
fuente
8
En estos días, la idea detrás de 80 caracteres no es tanto "culto de carga" para el terminal, todavía hay una razón lógica para ello: cualquiera puede dividir su editor o ventanas IDE como quiera, y siempre que sean más anchas. de 80 caracteres, no necesitarán cambiar el ancho ni experimentar el envoltorio.
Jason Antman
2
En mi opinión, si no tiene un IDE que admita el envoltorio suave, sus herramientas no están actualizadas.
phoet
8
80 caracteres también son bastante legibles, mientras que 40 o 200 lo son menos, por lo que también es una cuestión de usabilidad
Toni Leigh
# 1 "siempre que tengan un ancho de más de 80 caracteres" 800x600 es más ancho que 80 caracteres, y tiene el mismo problema para ver 2 archivos de 80 caracteres uno al lado del otro. Esto es una tontería y solo se aplica a 1366 res. Con 1920+ asumiendo el control, el siguiente argumento será "Puedo dividir 3, 4 archivos"
Andre Figueiredo
1
lo teníamos en 80, luego lo cambiamos a 120. Mirar las relaciones públicas mientras revisábamos el código en Github en una vista de pantalla dividida en laptops de 13 "se convirtió en un problema. Volvimos a cambiar a 80.
AndreiMotinga