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).

Mridang Agarwalla
źródło

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).

gurney alex
źródło
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!

Nilesh Kevlani
źródło
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.

Carlos E Rodriguez
źródło
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
mattsl
źródło
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

henryJack
źródło
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
Pierre Sassoulas
źródło
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
Keven Li
źródło
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"
    ],
}
aarw76
źródło
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"
],

}
Mohamed Atef
źródło
0

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

"python.linting.pydocstyleEnabled": false
Mohammed Hrima
źródło
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.

Ernesto Elsäßer
źródło