Pylint'te bir dosya düzeyinde "eksik docstring" uyarılarını nasıl devre dışı bırakırım?


94

Pylint, bazı dosyaların eksik docstrings olduğu hataları atar. Her sınıfa, yönteme ve işleve docstrings eklemeye çalışıyorum, ancak Pylint ayrıca dosyaların başında bir docstring olması gerektiğini kontrol ediyor gibi görünüyor. Bunu bir şekilde devre dışı bırakabilir miyim? Bir sınıf, işlev veya yöntem içinde bir docstring'in eksik olduğu konusunda bilgilendirilmek istiyorum, ancak bir dosyanın bir docstring'e sahip olması zorunlu olmamalı.

(Tescilli bir kaynak dosyanın başlangıcında sıklıkla bulunan bir hukuk jargonu terimi var mı? Herhangi bir örnek? Böylesine önemsiz bir soruyu ayrı ayrı göndermenin uygun olup olmadığını bilmiyorum.)

Yanıtlar:


106

Bir Python modülünün, modülün ne yaptığını, ne sağladığını, sınıfların nasıl kullanılacağına dair örnekleri açıklayan bir dokümantasyona sahip olması güzel. Bu, IMO'nun docstring'e girmemesi gereken telif hakkı ve lisans bilgilerini veren bir dosyanın başında sıklıkla gördüğünüz yorumlardan farklıdır (hatta bazıları bunların tamamen ortadan kalkması gerektiğini savunur, bkz. Http: // hackerboss. com.tr / get-kurtul-şablonları / )

Pylint 2.4 ve üstü ile missing-docstringaşağıdaki üç alt mesajı kullanarak çeşitli arasında ayrım yapabilirsiniz :

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

Yani aşağıdaki .pylintrcdosya çalışmalıdır:

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

Pylint'in önceki sürümleri için, docstring'lerin oluşabileceği çeşitli yerler için ayrı bir koda sahip değildir, bu nedenle tek yapabileceğiniz C0111'i devre dışı bırakmaktır. Sorun şu ki, bunu modül kapsamında devre dışı bırakırsanız, modülün her yerinde devre dışı bırakılacaktır (yani eksik işlev / sınıf / yöntem docstring için herhangi bir C satırı almayacaksınız. Bu muhtemelen hoş değil.

Öyleyse önerdiğim, bu küçük eksik dokümanı eklemek, şöyle bir şey söylemek:

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

Çok geçmeden, sınıfların / işlevlerin tek tek dokümanlarına ait olmayan modülün çeşitli sınıflarının / işlevlerinin nasıl kullanılacağına dair örnekler sunmak gibi oraya koyabileceğiniz yararlı şeyler bulacaksınız (örneğin, etkileşim veya hızlı başlangıç ​​kılavuzu gibi bir şey).


9
Kaynak koddan kaybolan yasal (ve diğer) standart metin için +1. Bir arabanın her bileşenine ekli yasal bildirimler yoktur. Elbette, içinde projenizin yasal metnini içeren bir dosya oluşturun. Her dosyaya bunun kopyalarını koymayın.
Jonathan Hartley

22
-1 "Bu modül foobar" ı başlatan dokümanlar için. Bu modülün ne olduğu zaten bellidir. Yeniden ifade etmek gereksizdir ve modülün adını değiştirirse güncelliğini yitirmeye meyillidir. "Şuna ve şuna yüksek düzeyde destek sağlar" bölümünü eklemeniz yeterlidir.
Jonathan Hartley

@JonathanHartley: kabul etti. Cevabın son kısmını buna göre güncelledim.
gurney alex

16
Hayal kırıklığı yaratan cevap. Özellikle Django projeleri için. forms.py "Bunlar modeller ... SADECE KIDDING! Onlar formlar. Çünkü, biliyorsunuz, dosyanın adı forms.py. Bu Da Vinci Kodu değil. Burada ne olacağını düşündünüz?"
Cerin

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

65

Geç oldu ama yine de faydalı buldum. Yani paylaşım. Bunu burada buldum .

Uyarıları devre dışı bırakmak için pilinti için "--hatalar-yalnızca" bayrağı ekleyebilirsiniz.

Bunu yapmak için ayarlara gidin. Aşağıdaki satırı düzenleyin:

"python.linting.pylintArgs": []

Gibi

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

Ve gitmekte iyisin!


32
Kullanışlıdır, ancak "python.linting.pylintArgs": ["--disable=C0111"],docstring uyarılarını susturduğu için muhtemelen daha fazladır. Ancak ayar, OP'nin bu uyarıların yalnızca modül düzeyinde nasıl devre dışı bırakılacağı sorusuna yöneliktir.
18'i

Bu daha iyi bir seçenektir çünkü bir belge dizesi uyarısı yerine sadece eksik sınıf gibi hatayı önemsiyorsunuz
Zerontelli

Buna başvuran bir proje gördüğümde çok üzülüyorum. pylint, kodu temiz tutmak için çok iyi bir araçtır. Sadece biraz sevgiye ihtiyacı var.
Erik Aronesty

9

Bu özelliği devre dışı bırakmadan düzeltmenin göreceli olarak kolay olduğunu düşünüyorum.

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

Tek yapmanız gereken, her işlevde üçlü çift tırnak dizesini eklemektir.


Teşekkürler. Az önce tek alıntıların bile işe
yaradığını

yine de can sıkıcı bir durum, örneğin bir Django projesi üzerinde çalışıyorsanız, bir grup modül dosyası oluşturacaktır ve bunu yapmak için her birine girmeniz gerekir. -yalnızca "pylint kullanıcı ayarlarında
Zerontelli

8

Bir cevap aramaya geldim çünkü @cerin'in dediği gibi, Django projelerinde django'nun yeni bir uygulama oluştururken otomatik olarak ürettiği dosyaların her birine modül dokümanları eklemek külfetli ve gereksiz.

Dolayısıyla, pilin, docstring türlerinde bir fark belirlemenize izin vermemesi için geçici bir çözüm olarak şunu yapabilirsiniz:

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

Msg şablonunu güncellemelisiniz, böylece grep yaptığınızda dosya adını hala biliyor olacaksınız. Bu, modüller hariç diğer tüm eksik belge türlerini döndürür.

Ardından tüm bu hataları düzeltebilir ve ardından çalıştırabilirsiniz:

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

7

Hayır. Pylint şu anda doc-string uyarıları arasında ayrım yapmanıza izin vermiyor.

Ancak, bu uyarıyı göz ardı etmek için doc-string uzantısıyla birlikte tüm python kod kontrolleri için flake8'i kullanabilirsiniz.

Doc-string uzantısını pip ile kurun (Dahili olarak, pydocstyle kullanır ).

pip install flake8_docstrings

Daha sonra --ignore D100anahtarı kullanabilirsiniz . Örneğinflake8 file.py --ignore D100


5

Pylint 2.4 ve üstü ile missing-docstringaşağıdaki üç alt mesajı kullanarak çeşitli arasında ayrım yapabilirsiniz :

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

Yani aşağıdaki .pylintrcdosya çalışmalıdır:

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

bu benim akıl sağlığımı kurtardı
Tsagana Nokhaeva

5

Bu uyarıları devre dışı bırakmak istediğiniz herhangi bir dosyanın başına aşağıdaki satırları koymanız yeterlidir.

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

1
Her şeyi devre dışı bırakmak istiyorsanız, sadece devre dışı bırakmanız gerekir missing-docstring(2.4.0'dan önceki sürüm için çalışır).
Pierre.Sassoulas

5

"C: \ Kullanıcılar \ Kullanıcınız \ AppData \ Dolaşım \ Kod \ Kullanıcı \ ayarlar.json" python.linting.pylintArgsdüzenleyin ve bu satırları aşağıda gösterildiği gibi sonuna ekleyin :

{
    "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) Ardından> tercihleri ​​yazın ve tıklayın: dile özgü ayarları yapılandırın (3) ve ardından kodu geçtikten sonra python yazın

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

}

0

"Settings.json" sayfasına gidin ve python'u devre dışı bırakın pydocstyle

"python.linting.pydocstyleEnabled": false

0

Benim durumumda, PyLint 2.6.0 ile eksik docstring mesajları sonra bile açıkça devre dışı bırakılması, ortadan olmaz missing-module-docstring, missing-class-docstringve missing-function-docstringbenim de .pylintrcdosyaya. Son olarak, aşağıdaki yapılandırma benim için çalıştı:

[MESSAGES CONTROL]

disable=missing-docstring,empty-docstring

Görünüşe göre, pylint 2.6.0, her iki denetim de devre dışı bırakılmadıkça yine de belge dizilerini doğrular.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.