¿Cómo desactivo las advertencias de "cadenas de documentos faltantes" a nivel de archivo en Pylint?

94

Pylint arroja errores de que a algunos archivos les faltan cadenas de documentos. Intento agregar cadenas de documentos a cada clase, método y función, pero parece que Pylint también comprueba que los archivos deben tener una cadena de documentos al principio. ¿Puedo desactivar esto de alguna manera? Me gustaría que se me notifique si falta una cadena de documentos dentro de una clase, función o método, pero no debería ser obligatorio que un archivo tenga una cadena de documentos.

(¿Existe un término de la jerga legal que se encuentra a menudo al comienzo de un archivo fuente propietario? ¿Algún ejemplo? No sé si está bien publicar una pregunta tan trivial por separado).

Mridang Agarwalla
fuente

Respuestas:

106

Es bueno que un módulo de Python tenga una cadena de documentos que explique qué hace el módulo, qué proporciona, ejemplos de cómo usar las clases. Esto es diferente de los comentarios que a menudo se ven al principio de un archivo con información sobre los derechos de autor y la licencia, que en mi opinión no deberían incluirse en la cadena de documentos (algunos incluso argumentan que deberían desaparecer por completo, consulte, por ejemplo, http: // hackerboss. com / deshacerse-de-templates / )

Con pylint 2.4 y superior, puede diferenciar entre los distintos missing-docstringmediante el uso de los siguientes submensajes :

  • C0114( missing-module-docstring)
  • C0115( missing-class-docstring)
  • C0116( missing-function-docstring)

Entonces el siguiente .pylintrcarchivo debería funcionar:

[MASTER]
disable=
    C0114, # missing-module-docstring

Para versiones anteriores de Pylint, no tiene un código separado para los distintos lugares donde pueden aparecer cadenas de documentos, por lo que todo lo que puede hacer es deshabilitar C0111. El problema es que si deshabilita esto en el alcance del módulo, entonces se deshabilitará en todas partes del módulo (es decir, no obtendrá ninguna línea C para la función / clase / método que falta en la cadena de documentos. Lo que posiblemente no sea bueno.

Entonces, lo que sugiero es agregar esa pequeña cadena de documentos que falta, diciendo algo como:

"""
high level support for doing this and that.
"""

Muy pronto, encontrará cosas útiles para poner allí, como proporcionar ejemplos de cómo usar las diversas clases / funciones del módulo que no necesariamente pertenecen a las cadenas de documentos individuales de las clases / funciones (como interactuar o algo así como una guía de inicio rápido).

camilla alex
fuente
9
+1 para texto repetitivo legal (y otros) que desaparece del código fuente. Todos los componentes de un automóvil no tienen notificaciones legales adjuntas. Por supuesto, cree un archivo con el texto legal de su proyecto. No ponga copias de eso en cada archivo.
Jonathan Hartley
22
-1 para cadenas de documentos que comienzan "Este es el módulo foobar". Ya es evidente qué es este módulo. Repetirlo es redundante y propenso a quedarse obsoleto si el módulo alguna vez cambia de nombre. Solo incluya la parte "Proporciona soporte de alto nivel para esto y aquello".
Jonathan Hartley
@JonathanHartley: de acuerdo. Actualicé la última parte de la respuesta en consecuencia.
camilla alex
16
Respuesta decepcionante. Especialmente para proyectos de Django. formularios.py "Estos son modelos ... ¡SÓLO BRINDANDO! Son formularios. Porque, ya sabes, el archivo se llama formularios.py. Este no es El Código Da Vinci. ¿Qué pensaste que habría aquí?"
Cerin
10
$ cat my_module/test/__init__.py "Hey, PyLint? SHUT UP"
clacke
65

Es tarde, pero aun así lo encontré útil. Entonces compartiendo. Encontré esto aquí .

Puede agregar la marca "--errors-only" para pylint para deshabilitar las advertencias.

Para hacer esto, vaya a la configuración. Edite la siguiente línea:

"python.linting.pylintArgs": []

Como

"python.linting.pylintArgs": ["--errors-only"]

¡Y listo!

Nilesh Kevlani
fuente
31
Es útil, aunque "python.linting.pylintArgs": ["--disable=C0111"],probablemente lo sea más, ya que solo silencia las advertencias de la cadena de documentos. Sin embargo, la configuración aborda la pregunta del OP de cómo deshabilitar estas advertencias solo a nivel de módulo.
followben
Esta es una mejor opción, ya que solo le importa el error como la clase faltante, ... en lugar de una advertencia de cadena de documento
Zerontelli
Tan triste cuando veo un proyecto que ha recurrido a esto. pylint es una herramienta tan buena para mantener limpio el código. Solo necesita un poco de amor.
Erik Aronesty
9

Creo que la solución es relativamente fácil sin deshabilitar esta función.

def kos_root():
    """Return the pathname of the KOS root directory."""
    global _kos_root
    if _kos_root: return _kos_root

Todo lo que necesita hacer es agregar la cadena de comillas dobles triples en cada función.

Carlos E Rodríguez
fuente
Gracias. Acabo de descubrir que incluso las comillas simples funcionan
vikas027
bueno, sigue siendo molesto, por ejemplo, si estás trabajando en un proyecto de Django, creará un montón de archivos de módulo y tienes que ir a cada uno de ellos para hacerlo. Es mejor mostrar solo un mensaje de error que una advertencia con "" --errores -sólo "en la configuración de usuario de
pylint
8

Vine buscando una respuesta porque, como dijo @cerin, en los proyectos de Django es engorroso y redundante agregar cadenas de documentos de módulo a cada uno de los archivos que django genera automáticamente al crear una nueva aplicación.

Entonces, como una solución al hecho de que pylint no le permite especificar una diferencia en los tipos de cadenas de documentos, puede hacer esto:

pylint */*.py --msg-template='{path}: {C}:{line:3d},{column:2d}: {msg}' | grep docstring | grep -v module

Debe actualizar la plantilla msg para que cuando haga grep aún sepa el nombre del archivo. Esto devuelve todos los demás tipos de cadenas de documentos que faltan, excepto los módulos.

Luego, puede corregir todos esos errores y luego ejecutar:

pylint */*.py --disable=missing-docstring
mattsl
fuente
7

No. Actualmente, Pylint no le permite discriminar entre advertencias de cadenas de documentos.

Sin embargo, puede usar flake8 para todas las comprobaciones de código Python junto con la extensión doc-string para ignorar esta advertencia.

Instale la extensión doc-string con pip (internamente, usa pydocstyle ).

pip install flake8_docstrings

Luego puede usar el --ignore D100interruptor. Por ejemploflake8 file.py --ignore D100

HenryJack
fuente
5

Con pylint 2.4 y superior, puede diferenciar entre los distintos missing-docstringmediante el uso de los siguientes submensajes :

  • C0114( missing-module-docstring)
  • C0115( missing-class-docstring)
  • C0116( missing-function-docstring)

Entonces el siguiente .pylintrcarchivo debería funcionar:

[MASTER]
disable=
    C0114, # missing-module-docstring
Pierre.Sassoulas
fuente
que salvó mi salud mental
Tsagana Nokhaeva
5

Simplemente coloque las siguientes líneas al principio de cualquier archivo en el que desee desactivar estas advertencias.

# pylint: disable=missing-module-docstring
# pylint: disable=missing-class-docstring
# pylint: disable=missing-function-docstring
Keven Li
fuente
1
Si desea deshabilitar todo, solo necesita deshabilitar missing-docstring(funciona para la versión anterior a 2.4.0).
Pierre.Sassoulas
5

Edite "C: \ Users \ Your User \ AppData \ Roaming \ Code \ User \ settings.json" y agregue estas python.linting.pylintArgslíneas al final como se muestra a continuación:

{
    "team.showWelcomeMessage": false,
    "python.dataScience.sendSelectionToInteractiveWindow": true,
    "git.enableSmartCommit": true,
    "powershell.codeFormatting.useCorrectCasing": true,
    "files.autoSave": "onWindowChange",
    "python.linting.pylintArgs": [
        "--load-plugins=pylint_django",
        "--errors-only"
    ],
}
aarw76
fuente
1

(1) CTRL + MAYÚS + P (2) Luego escriba y haga clic en> preferencias: configure los ajustes específicos del idioma (3) y luego escriba python después de eso más allá del código

{
"python.linting.pylintArgs": [
    "--load-plugins=pylint_django","--errors-only"
],

}
Mohamed Atef
fuente
0

Vaya a "settings.json" y deshabilite Python pydocstyle

"python.linting.pydocstyleEnabled": false
Mohammed Hrima
fuente
0

En mi caso, con pylint 2.6.0, los mensajes de la cadena de documentos que faltaban no desaparecían, incluso después de deshabilitarlos explícitamente missing-module-docstring, missing-class-docstringy missing-function-docstringen mi .pylintrcarchivo. Finalmente, la siguiente configuración funcionó para mí:

[MESSAGES CONTROL]

disable=missing-docstring,empty-docstring

Aparentemente, pylint 2.6.0 todavía valida las cadenas de documentos a menos que ambas verificaciones estén deshabilitadas.

Ernesto Elsäßer
fuente