Como desativo avisos de “docstring ausente” em nível de arquivo no Pylint?


99

O Pylint gera erros de que alguns arquivos não têm docstrings. Eu tento adicionar docstrings a cada classe, método e função, mas parece que o Pylint também verifica se os arquivos devem ser docstring no início. Posso desativar isso de alguma forma? Eu gostaria de ser notificado de que uma docstring está faltando dentro de uma classe, função ou método, mas não deveria ser obrigatório para um arquivo ter uma docstring.

(Existe um termo do jargão jurídico frequentemente encontrado no início de um arquivo de origem proprietário? Algum exemplo? Não sei se é correto postar uma questão tão trivial separadamente.)

Respostas:


111

É bom para um módulo Python ter uma docstring, explicando o que o módulo faz, o que ele fornece, exemplos de como usar as classes. Isso é diferente dos comentários que você costuma ver no início de um arquivo fornecendo as informações de copyright e licença, que a IMO não deve ir no docstring (alguns até argumentam que eles deveriam desaparecer completamente, consulte, por exemplo, http: // hackerboss. com / get-rid-of-templates / )

Com o pylint 2.4 e superior, você pode diferenciar entre os vários missing-docstringusando as três sub-mensagens a seguir:

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

Portanto, o seguinte .pylintrcarquivo deve funcionar:

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

Para versões anteriores do Pylint, ele não tem um código separado para os vários locais onde docstrings podem ocorrer, então tudo que você pode fazer é desabilitar C0111. O problema é que, se você desabilitar isso no escopo do módulo, ele será desabilitado em todos os lugares do módulo (ou seja, você não obterá nenhuma linha C para função / classe / método de docstring ausente. O que indiscutivelmente não é bom.

Então, o que eu sugiro é adicionar aquela pequena docstring ausente, dizendo algo como:

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

Em breve, você encontrará coisas úteis para colocar lá, como fornecer exemplos de como usar as várias classes / funções do módulo que não pertencem necessariamente às docstrings individuais das classes / funções (como estes interagir ou algo como um guia de início rápido).


9
+1 para boilerplate legal (e outros) desaparecendo do código-fonte. Cada componente de um carro não tem notificações legais anexadas. De qualquer forma, crie um arquivo com o texto legal do seu projeto. Não coloque cópias disso em todos os arquivos.
Jonathan Hartley

22
-1 para docstrings que iniciam "Este é o módulo foobar." Já é evidente o que é este módulo. Reformulá-lo é redundante e sujeito a ficar desatualizado se o módulo mudar de nome. Basta incluir a parte "Fornece suporte de alto nível para isso e aquilo".
Jonathan Hartley

@JonathanHartley: concordou. Eu atualizei a última parte da resposta de acordo.
maca alex de

16
Resposta decepcionante. Especialmente para projetos Django. forms.py "Estes são modelos ... SÓ BRINCANDO! São formulários. Porque, você sabe, o arquivo se chama forms.py. Este não é o Código Da Vinci. O que você achou que estaria aqui?"
Cerin,

12
$ cat my_module/test/__init__.py "Hey, PyLint? SHUT UP"
clacke

66

É tarde, mas ainda achei útil. Então, compartilhando. Encontrei isso aqui .

Você pode adicionar a sinalização "--errors-only" para pylint para desativar os avisos.

Para fazer isso, vá para as configurações. Edite a seguinte linha:

"python.linting.pylintArgs": []

Como

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

E você está pronto para ir!


32
É útil, embora "python.linting.pylintArgs": ["--disable=C0111"],provavelmente seja mais porque apenas silencia os avisos de docstring. No entanto, a configuração aborda a questão do OP de como desativar esses avisos apenas no nível do módulo.
siga em

Esta é uma opção melhor, já que você só se preocupa com o erro como classe ausente, ... em vez de um aviso de string de documento
Zerontelli

Tão triste quando vejo um projeto que recorreu a isso. pylint é uma ferramenta muito boa para manter o código limpo. Só precisa de um pouco de amor.
Erik Aronesty

9

Acho que a correção é relativamente fácil sem desativar esse recurso.

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

Tudo o que você precisa fazer é adicionar a string de aspas duplas triplas em cada função.


Obrigado. Acabei de descobrir que mesmo aspas simples funcionam
vikas027

bem, ainda é irritante, por exemplo, se você estiver trabalhando em um projeto Django, ele criará um monte de arquivos de módulo e você terá que ir em cada um deles para fazer isso. É melhor mostrar apenas uma mensagem de erro do que um aviso com "" --errors - apenas "nas configurações do usuário do pylint
Zerontelli

8

Eu vim procurando por uma resposta porque, como disse @cerin, em projetos Django é complicado e redundante adicionar docstrings de módulo a cada um dos arquivos que o django gera automaticamente ao criar um novo aplicativo.

Portanto, como uma solução alternativa para o fato de que o pylint não permite que você especifique uma diferença nos tipos de docstring, você pode fazer o seguinte:

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

Você tem que atualizar o msg-template para que, ao fazer o grep, você ainda saiba o nome do arquivo. Isso retorna todos os outros tipos de docstring ausentes, exceto módulos.

Depois, você pode corrigir todos esses erros e, em seguida, executar:

pylint */*.py --disable=missing-docstring

7

Não . Atualmente, o Pylint não permite que você faça distinção entre avisos de string de documentos.

No entanto, você pode usar flake8 para toda a verificação de código Python junto com a extensão doc-string para ignorar este aviso.

Instale a extensão doc-string com pip (internamente, usa o estilo pydoc ).

pip install flake8_docstrings

Você pode então apenas usar o --ignore D100switch. Por exemploflake8 file.py --ignore D100


7

Basta colocar as seguintes linhas no início de qualquer arquivo que você deseja desativar esses avisos.

# pylint: disable=missing-module-docstring
# pylint: disable=missing-class-docstring
# pylint: disable=missing-function-docstring

1
Se você quiser desabilitar tudo, você só precisa desabilitar missing-docstring(funciona para a versão anterior a 2.4.0).
Pierre.Sassoulas

6

Com o pylint 2.4 e superior, você pode diferenciar entre os vários missing-docstringusando as três sub-mensagens a seguir:

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

Portanto, o seguinte .pylintrcarquivo deve funcionar:

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

que salvou minha saúde mental
Tsagana Nokhaeva

5

Edite "C: \ Users \ Your User \ AppData \ Roaming \ Code \ User \ settings.json" e adicione estas python.linting.pylintArgslinhas no final, conforme mostrado abaixo:

{
    "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"
    ],
}

1

(1) CTRL + SHIFT + P (2) Em seguida, digite e clique em> preferências: defina as configurações específicas do idioma (3) e digite python após passar o código

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

}

1

No meu caso, com o pylint 2.6.0, as mensagens docstring ausentes não desapareceriam, mesmo após desabilitar explicitamente missing-module-docstring, missing-class-docstringe missing-function-docstringem meu .pylintrcarquivo. Finalmente, a seguinte configuração funcionou para mim:

[MESSAGES CONTROL]

disable=missing-docstring,empty-docstring

Aparentemente, o pylint 2.6.0 ainda valida docstrings, a menos que ambas as verificações sejam desabilitadas.


0

Vá para "settings.json" e desative o python pydocstyle

"python.linting.pydocstyleEnabled": false
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.