Deshabilitar mensaje pylint para un módulo o directorio dado

¿Hay alguna manera de deshabilitar el mensaje de duplicate-code de Pylint solo para archivos de prueba? Todas las pruebas en nuestro proyecto son DAMP, por lo que el código duplicado es por diseño. Entiendo que podemos agregar # pylint: disable=duplicate-code en nuestras pruebas, pero preferiríamos agregar algún tipo de regla que diga que todos los archivos en una test/ carpeta tendrán esta regla deshabilitada. ¿Hay alguna forma de hacer esto?

Para ser más específico, estoy buscando algo diferente de una solución ‘ejecute dos veces’ (que es lo que ya he recurrido).

Se puede lograr con el plugin pylint y algunos hack.

Supongamos que tenemos la siguiente estructura de directorios:

  pylint_plugin.py app ├── __init__.py └── mod.py test ├── __init__.py └── mod.py 

contenido de mod.py:

 def f(): 1/0 

contenido de pylint_plugin.py:

 from astroid import MANAGER from astroid import scoped_nodes def register(linter): pass def transform(mod): if 'test.' not in mod.name: return c = mod.stream().read() # change to the message-id you need c = b'# pylint: disable=pointless-statement\n' + c # pylint will read from `.file_bytes` attribute later when tokenization mod.file_bytes = c MANAGER.register_transform(scoped_nodes.Module, transform) 

sin plugin, pylint informará:

 ************* Module tmp.exp_pylint.app.mod W: 2, 4: Statement seems to have no effect (pointless-statement) ************* Module tmp.exp_pylint.test.mod W: 2, 4: Statement seems to have no effect (pointless-statement) 

con el plugin cargado:

 PYTHONPATH=. pylint -dC,R --load-plugins pylint_plugin app test 

rendimientos

 ************* Module tmp.exp_pylint.app.mod W: 2, 4: Statement seems to have no effect (pointless-statement) 

pylint leyó los comentarios mediante el archivo fuente de tokenización, este complemento cambia el contenido del archivo sobre la marcha , para engañar al pylint cuando se realiza la tokenización .

Tenga en cuenta que para simplificar la demostración, aquí construí una advertencia de “statement sin sentido”, deshabilitar otros tipos de mensajes es trivial.

Existe el indicador de control de mensaje deshabilitado o -d que se puede usar para deshabilitar selectivamente los mensajes cuando se los llama. Por lo tanto, puede deshabilitar este mensaje para todos los archivos en la carpeta de prueba ejecutando pylint en esos archivos desde la carpeta del proyecto:

 pylint -d duplicate-code test/ 

Pude verificar que puedo eliminar mensajes específicos de todos los archivos del directorio, aunque no estaba obteniendo errores de código duplicado y, por lo tanto, no pude verificar ese mensaje.

También puede poner esto en un script que ejecute desde el directorio principal de su proyecto. Algo como:

 #!/bin/bash pylint src/ pylint -d duplicate-code test/ 

Alternativamente, puede agregar # pylint: disable=duplicate-code en la parte superior de cada uno de los archivos para los que desea excluir estos mensajes. Parece que eso es todo lo que se refiere a las marcas de exclusión selectiva de archivos para pylint.