Wie deaktiviere ich Warnungen vor fehlenden Dokumentzeichenfolgen auf Dateiebene in Pylint?

91

Pylint gibt Fehler aus, dass in einigen Dateien Dokumentzeichenfolgen fehlen. Ich versuche, jeder Klasse, Methode und Funktion Docstrings hinzuzufügen, aber es scheint, dass Pylint auch prüft, ob Dateien am Anfang einen Docstring enthalten sollten. Kann ich das irgendwie deaktivieren? Ich möchte benachrichtigt werden, dass in einer Klasse, Funktion oder Methode eine Dokumentzeichenfolge fehlt, aber es sollte nicht zwingend erforderlich sein, dass eine Datei eine Dokumentzeichenfolge enthält.

(Gibt es einen Begriff des juristischen Jargons, der häufig am Anfang einer proprietären Quelldatei steht? Irgendwelche Beispiele? Ich weiß nicht, ob es in Ordnung ist, eine so triviale Frage separat zu stellen.)

Mridang Agarwalla
quelle

Antworten:

104

Es ist schön, wenn ein Python-Modul über eine Dokumentzeichenfolge verfügt, in der erklärt wird, was das Modul tut, was es bietet und wie die Klassen verwendet werden. Dies unterscheidet sich von den Kommentaren, die Sie häufig am Anfang einer Datei mit den Copyright- und Lizenzinformationen sehen, die IMO nicht in die Dokumentenkette aufnehmen sollte (einige argumentieren sogar, dass sie vollständig verschwinden sollten, siehe z. B. http: // hackerboss. com / Vorlagen loswerden / )

Mit Pylint 2.4 und höher können Sie missing-docstringanhand der drei folgenden Untermeldungen zwischen den verschiedenen unterscheiden :

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

Die folgende .pylintrcDatei sollte also funktionieren:

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

In früheren Versionen von Pylint gibt es keinen separaten Code für die verschiedenen Stellen, an denen Dokumentzeichenfolgen auftreten können. Sie können also nur C0111 deaktivieren. Das Problem ist, dass wenn Sie dies im Modulbereich deaktivieren, es überall im Modul deaktiviert wird (dh Sie erhalten keine C-Zeile für fehlende Funktions- / Klassen- / Methoden-Dokumentzeichenfolge. Das ist wohl nicht schön.

Ich schlage also vor, diesen kleinen fehlenden Docstring hinzuzufügen und so etwas wie Folgendes zu sagen:

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

Schon bald werden Sie nützliche Dinge finden, die Sie dort einfügen können, z. B. Beispiele für die Verwendung der verschiedenen Klassen / Funktionen des Moduls, die nicht unbedingt zu den einzelnen Dokumentzeichenfolgen der Klassen / Funktionen gehören (z. B. wie diese) interagieren oder so etwas wie eine Kurzanleitung).

Trage Alex
quelle
9
+1 für legale (und andere) Boilerplate, die aus dem Quellcode verschwinden. An jeder Komponente eines Autos sind keine gesetzlichen Hinweise angebracht. Erstellen Sie auf jeden Fall eine Datei mit dem Rechtstext Ihres Projekts. Legen Sie nicht Kopien davon in jede Datei.
Jonathan Hartley
22
-1 für Dokumentzeichenfolgen, die "Dies ist das Modul foobar" starten. Es ist bereits selbstverständlich, was dieses Modul ist. Das Wiederherstellen ist redundant und kann veraltet sein, wenn das Modul jemals seinen Namen ändert. Fügen Sie einfach den Teil "Bietet Unterstützung auf hoher Ebene für dies und das" hinzu.
Jonathan Hartley
@ JonathanHartley: stimmte zu. Ich habe den letzten Teil der Antwort entsprechend aktualisiert.
Trage
16
Enttäuschende Antwort. Speziell für Django-Projekte. forms.py "Dies sind Modelle ... NUR SCHERZEN! Es sind Formulare. Weil die Datei den Namen forms.py trägt. Dies ist nicht der Da Vinci-Code. Was haben Sie gedacht, wäre hier?"
Cerin
10
$ cat my_module/test/__init__.py "Hey, PyLint? SHUT UP"
Clacke
63

Es ist spät, aber ich fand es trotzdem nützlich. Also teilen. Fand das hier .

Sie können das Flag "--errors-only" für pylint hinzufügen, um Warnungen zu deaktivieren.

Gehen Sie dazu zu Einstellungen. Bearbeiten Sie die folgende Zeile:

"python.linting.pylintArgs": []

Wie

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

Und du kannst loslegen!

Nilesh Kevlani
quelle
30
Es ist nützlich, aber "python.linting.pylintArgs": ["--disable=C0111"],wahrscheinlich auch mehr, da es nur Warnungen vor Dokumentzeichenfolgen beruhigt. Die Einstellung befasst sich jedoch mit der Frage des OP, wie diese Warnungen nur auf Modulebene deaktiviert werden können.
Followben
Dies ist eine bessere Option, da Sie sich nur um den Fehler wie fehlende Klasse kümmern, ... anstelle einer Dokumentzeichenfolgenwarnung
Zerontelli
So traurig, wenn ich ein Projekt sehe, das darauf zurückgegriffen hat. Pylint ist ein gutes Werkzeug, um Code sauber zu halten. Es braucht nur etwas Liebe.
Erik Aronesty
9

Ich denke, das Update ist relativ einfach, ohne diese Funktion zu deaktivieren.

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

Alles, was Sie tun müssen, ist, in jeder Funktion die dreifache doppelte Anführungszeichenfolge hinzuzufügen.

Carlos E Rodriguez
quelle
Vielen Dank. Ich habe gerade festgestellt, dass sogar einfache Anführungszeichen funktionieren
vikas027
Nun, es ist immer noch ärgerlich, wenn Sie beispielsweise an einem Django-Projekt arbeiten, werden eine Reihe von Moduldateien erstellt, und Sie müssen in jede dieser Dateien gehen, um dies zu tun. Es ist besser, nur eine Fehlermeldung anzuzeigen, als mit "" - Fehlern zu warnen -nur "in den Pylint-Benutzereinstellungen
Zerontelli
8

Ich habe nach einer Antwort gesucht, weil es, wie @cerin sagte, in Django-Projekten umständlich und redundant ist, jeder Datei, die Django beim Erstellen einer neuen App automatisch generiert, Modul-Docstrings hinzuzufügen.

Um dieses Problem zu umgehen, können Sie mit Pylint keinen Unterschied bei den Dokumentzeichenfolgentypen angeben:

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

Sie müssen die msg-Vorlage aktualisieren, damit Sie beim Grep immer noch den Dateinamen kennen. Dies gibt alle anderen fehlenden Docstring-Typen mit Ausnahme von Modulen zurück.

Dann können Sie all diese Fehler beheben und anschließend einfach ausführen:

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

Nein. Mit Pylint können Sie derzeit nicht zwischen Warnungen für Dokumentzeichenfolgen unterscheiden.

Sie können flake8 jedoch für alle Python-Codeprüfungen zusammen mit der Erweiterung doc-string verwenden, um diese Warnung zu ignorieren.

Installieren Sie die doc-string-Erweiterung mit pip (intern wird pydocstyle verwendet ).

pip install flake8_docstrings

Sie können dann einfach den --ignore D100Schalter verwenden. Zum Beispielflake8 file.py --ignore D100

henryJack
quelle
5

Mit Pylint 2.4 und höher können Sie missing-docstringanhand der drei folgenden Untermeldungen zwischen den verschiedenen unterscheiden :

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

Die folgende .pylintrcDatei sollte also funktionieren:

[MASTER]
disable=
    C0114, # missing-module-docstring
Pierre.Sassoulas
quelle
das rettete meine geistige Gesundheit
Tsagana Nokhaeva
5

Setzen Sie einfach die folgenden Zeilen an den Anfang jeder Datei, in der Sie diese Warnungen deaktivieren möchten.

# pylint: disable=missing-module-docstring
# pylint: disable=missing-class-docstring
# pylint: disable=missing-function-docstring
Keven Li
quelle
1
Wenn Sie alles deaktivieren möchten, müssen Sie nur deaktivieren missing-docstring(funktioniert für Versionen vor 2.4.0).
Pierre.Sassoulas
5

Bearbeiten Sie "C: \ Benutzer \ Ihr Benutzer \ AppData \ Roaming \ Code \ Benutzer \ settings.json" und fügen Sie diese python.linting.pylintArgsZeilen am Ende wie unten gezeigt hinzu:

{
    "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
quelle
1

(1) STRG + UMSCHALT + P (2) Geben Sie dann ein und klicken Sie auf> Einstellungen: Konfigurieren Sie die sprachspezifischen Einstellungen (3) und geben Sie anschließend Python nach dem Code ein

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

}
Mohamed Atef
quelle
0

Gehen Sie zu "settings.json" und deaktivieren Sie Python pydocstyle

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

In meinem Fall mit Pylint 2.6.0, würden die fehlenden Docstring Nachrichten nicht verschwinden, auch nach explizit deaktivieren missing-module-docstring, missing-class-docstringund missing-function-docstringin meiner .pylintrcDatei. Schließlich hat die folgende Konfiguration für mich funktioniert:

[MESSAGES CONTROL]

disable=missing-docstring,empty-docstring

Anscheinend validiert Pylint 2.6.0 weiterhin Dokumentzeichenfolgen, es sei denn, beide Überprüfungen sind deaktiviert.

Ernesto Elsäßer
quelle