Jak wyłączyć ostrzeżenia o „brakujących ciągach dokumentów” na poziomie pliku w Pylint?


94

Pylint zgłasza błędy, że w niektórych plikach brakuje ciągów dokumentów. Próbuję dodać ciągi dokumentacyjne do każdej klasy, metody i funkcji, ale wydaje się, że Pylint sprawdza również, czy pliki powinny znajdować się na początku. Czy mogę to jakoś wyłączyć? Chciałbym zostać powiadomiony o braku docstringu w klasie, funkcji lub metodzie, ale nie powinno to być obowiązkowe, aby plik miał ciąg dokumentów.

(Czy istnieje termin w żargonie prawniczym, który często znajduje się na początku zastrzeżonego pliku źródłowego? Jakieś przykłady? Nie wiem, czy można opublikować tak trywialne pytanie osobno).

Odpowiedzi:


106

Dobrze, że moduł Pythona ma dokumentację wyjaśniającą, co moduł robi, co zapewnia, przykłady użycia klas. Różni się to od komentarzy, które często widzisz na początku pliku, podając informacje o prawach autorskich i licencji, których IMO nie powinno umieszczać w dokumentacji (niektórzy nawet twierdzą, że powinny one całkowicie zniknąć, patrz np. Http: // hackerboss. pl / get-rid-of-templates / )

W pylint 2.4 i nowszych możesz rozróżniać różne missing-docstring, używając trzech następujących podkomunikatów :

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

Więc następujący .pylintrcplik powinien działać:

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

W przypadku poprzednich wersji Pylint nie ma oddzielnego kodu dla różnych miejsc, w których mogą wystąpić ciągi dokumentów, więc wszystko, co możesz zrobić, to wyłączyć C0111. Problem polega na tym, że jeśli wyłączysz to w zakresie modułu, zostanie ono wyłączone wszędzie w module (tj. Nie otrzymasz żadnej linii C dla brakującego ciągu dokumentacji funkcji / klasy / metody. Co prawdopodobnie nie jest miłe.

Więc proponuję dodać ten mały brakujący ciąg dokumentów, mówiąc coś takiego:

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

Wkrótce znajdziesz przydatne rzeczy do umieszczenia w tym miejscu, takie jak dostarczenie przykładów użycia różnych klas / funkcji modułu, które niekoniecznie należą do poszczególnych dokumentów klas / funkcji (na przykład jak te interakcji lub coś w rodzaju skróconej instrukcji obsługi).


9
+1 za legalne (i inne) standardowe zniknięcie z kodu źródłowego. Do każdego elementu samochodu nie dołączono informacji prawnych. Jak najbardziej utwórz plik z tekstem prawnym twojego projektu. Nie umieszczaj kopii tego w każdym pliku.
Jonathan Hartley

22
-1 dla ciągów dokumentów zaczynających się od „This is module foobar”. Już teraz jest oczywiste, czym jest ten moduł. Ponowne jego powtórzenie jest zbędne i podatne na utratę ważności, jeśli moduł kiedykolwiek zmieni nazwę. Wystarczy dołączyć część „Zapewnia wsparcie na wysokim poziomie dla tego i tamtego”.
Jonathan Hartley

@JonathanHartley: zgodził się. Odpowiednio zaktualizowałem ostatnią część odpowiedzi.
nosze Alex

16
Rozczarowująca odpowiedź. Specjalnie dla projektów Django. forms.py "To są modele ... TYLKO Żartuję! To formularze. Ponieważ, wiesz, plik nosi nazwę forms.py. To nie jest Kod Leonarda da Vinci. Co myślisz, że tu będzie?"
Cerin

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

65

Jest późno, ale nadal uważam, że jest przydatny. Więc dzielenie się. Znalazłem to tutaj .

Możesz dodać flagę „--errors-only” do pylint, aby wyłączyć ostrzeżenia.

Aby to zrobić, przejdź do ustawień. Edytuj następujący wiersz:

"python.linting.pylintArgs": []

Tak jak

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

I jesteś gotowy!


31
Jest to przydatne, choć "python.linting.pylintArgs": ["--disable=C0111"],prawdopodobnie jest bardziej przydatne, ponieważ po prostu wycisza ostrzeżenia dotyczące ciągów dokumentów. Jednak ustawienie rozwiązuje kwestię OP, jak wyłączyć te ostrzeżenia tylko na poziomie modułu.
followben

Jest to lepsza opcja, ponieważ zależy Ci tylko na błędzie, takim jak brak klasy, ... zamiast ostrzeżenia o ciągu dokumentu
Zerontelli

Tak smutno, gdy widzę projekt, który się do tego uciekł. pylint jest tak dobrym narzędziem do utrzymywania czystości kodu. Po prostu potrzebuje trochę miłości.
Erik Aronesty,

9

Myślę, że poprawka jest stosunkowo łatwa bez wyłączania tej funkcji.

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

Wszystko, co musisz zrobić, to dodać ciąg potrójnych podwójnych cudzysłowów w każdej funkcji.


Dzięki. Właśnie odkryłem, że działają nawet pojedyncze cudzysłowy
vikas027,

cóż, nadal jest to irytujące, na przykład jeśli pracujesz nad projektem Django, utworzy on kilka plików modułów i musisz wejść do każdego z nich, aby to zrobić. Lepiej jest wyświetlać tylko komunikat o błędzie niż ostrzeżenie za pomocą "" --errors -only ”w ustawieniach użytkownika
pylinta

8

Szukałem odpowiedzi, ponieważ, jak powiedział @cerin, w projektach Django dodawanie dokumentów modułu do każdego z plików, które django automatycznie generuje podczas tworzenia nowej aplikacji, jest uciążliwe i zbędne.

Tak więc, aby obejść fakt, że pylint nie pozwala określić różnicy w typach ciągów dokumentów, możesz to zrobić:

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

Musisz zaktualizować szablon msg, aby podczas grep nadal znać nazwę pliku. Zwraca wszystkie inne typy brakujących ciągów dokumentów, z wyłączeniem modułów.

Następnie możesz naprawić wszystkie te błędy, a potem po prostu uruchomić:

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

7

Nie. Pylint nie pozwala obecnie na rozróżnianie ostrzeżeń dotyczących ciągów dokumentów.

Możesz jednak użyć flake8 do wszystkich sprawdzeń kodu w Pythonie wraz z rozszerzeniem doc-string, aby zignorować to ostrzeżenie.

Zainstaluj rozszerzenie doc-string za pomocą pip (wewnętrznie używa pydocstyle ).

pip install flake8_docstrings

Możesz wtedy po prostu użyć --ignore D100przełącznika. Na przykładflake8 file.py --ignore D100


5

W pylint 2.4 i nowszych możesz rozróżniać różne missing-docstring, używając trzech następujących podkomunikatów :

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

Więc następujący .pylintrcplik powinien działać:

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

to uratowało moje zdrowie psychiczne
Tsagana Nokhaeva

5

Po prostu umieść następujące wiersze na początku każdego pliku, w którym chcesz wyłączyć te ostrzeżenia.

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

1
Jeśli chcesz wyłączyć wszystko, po prostu musisz wyłączyć missing-docstring(działa dla wersji przed 2.4.0).
Pierre.Sassoulas

5

Edytuj „C: \ Users \ Your User \ AppData \ Roaming \ Code \ User \ settings.json” i dodaj te python.linting.pylintArgswiersze na końcu, jak pokazano poniżej:

{
    "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) Następnie wpisz i kliknij> preferencje: skonfiguruj ustawienia specyficzne dla języka (3), a następnie wpisz python po tym poza kodem

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

}

0

Przejdź do „settings.json” i wyłącz Pythona pydocstyle

"python.linting.pydocstyleEnabled": false

0

W moim przypadku, z pylint 2.6.0, brakujące wiadomości docstring nie znikają nawet po wyłączeniu jawnie missing-module-docstring, missing-class-docstringa missing-function-docstringw moim .pylintrcpliku. Wreszcie zadziałała dla mnie następująca konfiguracja:

[MESSAGES CONTROL]

disable=missing-docstring,empty-docstring

Najwyraźniej pylint 2.6.0 nadal sprawdza poprawność ciągów dokumentów, chyba że oba sprawdzenia są wyłączone.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.