ฉันจะปิดการใช้งานคำเตือน“ Missing docstring” ที่ระดับไฟล์ใน Pylint ได้อย่างไร


94

Pylint แสดงข้อผิดพลาดที่บางไฟล์ไม่มี docstrings ฉันพยายามเพิ่ม docstrings ให้กับแต่ละคลาสวิธีการและฟังก์ชัน แต่ดูเหมือนว่า Pylint ยังตรวจสอบว่าไฟล์ควรเป็น docstring ที่จุดเริ่มต้น ฉันสามารถปิดการใช้งานนี้ได้หรือไม่? ฉันต้องการได้รับแจ้งว่า docstring หายไปในคลาสฟังก์ชันหรือวิธีการ แต่ไม่ควรบังคับให้ไฟล์มี docstring

(มักพบศัพท์เฉพาะทางกฎหมายที่จุดเริ่มต้นของไฟล์ต้นฉบับที่เป็นกรรมสิทธิ์หรือไม่มีตัวอย่างไหมฉันไม่รู้ว่าการโพสต์คำถามที่ไม่สำคัญแยกจากกันเป็นเรื่องปกติหรือไม่)

คำตอบ:


106

เป็นสิ่งที่ดีสำหรับโมดูล Python ที่มี docstring อธิบายว่าโมดูลทำอะไรมีอะไรให้ตัวอย่างวิธีการใช้คลาส สิ่งนี้แตกต่างจากความคิดเห็นที่คุณมักจะเห็นในตอนต้นของไฟล์ที่ให้ข้อมูลลิขสิทธิ์และใบอนุญาตซึ่ง IMO ไม่ควรไปอยู่ใน docstring (บางคนโต้แย้งว่าควรจะหายไปทั้งหมดดูเช่นhttp: // hackerboss com / get-rid-of-template / )

ด้วยไพลินท์ 2.4 ขึ้นไปคุณสามารถแยกความแตกต่างระหว่างข้อความต่างๆได้missing-docstringโดยใช้สามข้อความย่อยต่อไปนี้:

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

ดังนั้น.pylintrcไฟล์ต่อไปนี้ควรใช้งานได้:

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

สำหรับ Pylint เวอร์ชันก่อนหน้าจะไม่มีรหัสแยกต่างหากสำหรับตำแหน่งต่างๆที่สามารถเกิด docstrings ได้ดังนั้นสิ่งที่คุณทำได้คือปิดการใช้งาน C0111 ปัญหาคือถ้าคุณปิดใช้งานสิ่งนี้ที่ขอบเขตโมดูลมันจะถูกปิดใช้งานทุกที่ในโมดูล (กล่าวคือคุณจะไม่ได้รับสาย C ใด ๆ สำหรับ docstring ฟังก์ชัน / คลาส / วิธีการที่ขาดหายไปเนื้อหาซึ่งไม่ดี

ดังนั้นสิ่งที่ฉันแนะนำคือการเพิ่ม docstring เล็ก ๆ ที่ขาดหายไปโดยพูดว่า:

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

ในไม่ช้าคุณจะพบสิ่งที่เป็นประโยชน์ที่จะใส่ไว้ในนั้นเช่นการให้ตัวอย่างวิธีการใช้คลาส / ฟังก์ชันต่างๆของโมดูลซึ่งไม่จำเป็นต้องเป็นของ docstrings แต่ละรายการของคลาส / ฟังก์ชัน (เช่นสิ่งเหล่านี้ โต้ตอบหรือบางอย่างเช่นคู่มือเริ่มต้นใช้งานฉบับย่อ)


9
+1 สำหรับเอกสารสำเร็จรูปทางกฎหมาย (และอื่น ๆ ) หายไปจากซอร์สโค้ด ส่วนประกอบทุกชิ้นของรถไม่มีการติดประกาศทางกฎหมาย โดยทั้งหมดสร้างไฟล์ที่มีข้อความทางกฎหมายของโครงการของคุณอยู่ในนั้น อย่าใส่สำเนาลงในทุกไฟล์
Jonathan Hartley

22
-1 สำหรับ docstrings ที่เริ่ม "นี่คือโมดูล foobar" เป็นที่ประจักษ์แล้วว่าโมดูลนี้คืออะไร การรีสตาร์ทนั้นซ้ำซ้อนและมีแนวโน้มที่จะล้าสมัยหากโมดูลเคยเปลี่ยนชื่อ เพียงใส่ส่วน "ให้การสนับสนุนระดับสูงสำหรับสิ่งนี้และส่วนนั้น"
Jonathan Hartley

@JonathanHartley: เห็นด้วย ฉันอัปเดตส่วนสุดท้ายของคำตอบตามนั้น
gurney alex

16
คำตอบที่น่าผิดหวัง โดยเฉพาะอย่างยิ่งสำหรับโครงการ Django form.py "นี่คือแบบจำลอง ... เพียงแค่คิด! พวกมันเป็นรูปแบบเพราะคุณรู้ไหมว่าไฟล์นี้ชื่อ form.py นี่ไม่ใช่ The Da Vinci Code คุณคิดว่าจะมาอยู่ที่นี่ได้อย่างไร"
Cerin

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

65

มันสายไป แต่ฉันก็ยังพบว่ามันมีประโยชน์ ดังนั้นการแบ่งปัน พบนี้ที่นี่

คุณสามารถเพิ่มแฟล็ก "--errors-only" สำหรับ pylint เพื่อปิดใช้งานคำเตือน

โดยไปที่การตั้งค่า แก้ไขบรรทัดต่อไปนี้:

"python.linting.pylintArgs": []

เช่น

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

และคุณพร้อมที่จะไป!


32
มันมีประโยชน์แม้ว่า"python.linting.pylintArgs": ["--disable=C0111"],อาจจะมากกว่าเพราะมันเงียบคำเตือนของ docstring อย่างไรก็ตามการตั้งค่าจะช่วยตอบคำถามของ OP เกี่ยวกับวิธีปิดใช้งานคำเตือนเหล่านี้ในระดับโมดูลเท่านั้น
followben

นี่เป็นตัวเลือกที่ดีกว่าเนื่องจากคุณสนใจเฉพาะข้อผิดพลาดเช่นคลาสที่หายไป ... แทนที่จะเป็นคำเตือนสตริงเอกสาร
Zerontelli

เศร้ามากเมื่อฉันเห็นโครงการที่มีลักษณะนี้ ไพลินท์เป็นเครื่องมือที่ดีในการรักษาความสะอาดของโค้ด มันแค่ต้องการความรัก
Erik Aronesty

9

ฉันคิดว่าการแก้ไขทำได้ง่ายโดยไม่ต้องปิดใช้งานคุณสมบัตินี้

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

สิ่งที่คุณต้องทำคือเพิ่มสตริงอัญประกาศคู่สามในทุกฟังก์ชัน


ขอบคุณ. ฉันเพิ่งพบว่าแม้แต่คำพูดเดียวก็ใช้ได้
vikas027

มันก็ยังน่ารำคาญอยู่เช่นถ้าคุณทำงานกับโปรเจ็กต์ Django มันจะสร้างไฟล์โมดูลจำนวนมากและคุณต้องเข้าไปในไฟล์แต่ละไฟล์เพื่อทำมันจะดีกว่าที่จะแสดงเฉพาะข้อความแสดงข้อผิดพลาดมากกว่าการเตือนด้วยข้อผิดพลาด -only "ในการตั้งค่าผู้ใช้ pylint
Zerontelli

8

ฉันมาหาคำตอบเพราะอย่างที่ @cerin กล่าวว่าในโครงการ Django มันยุ่งยากและซ้ำซ้อนในการเพิ่มโมดูล docstrings ให้กับไฟล์ทุกไฟล์ที่ django สร้างขึ้นโดยอัตโนมัติเมื่อสร้างแอปใหม่

ดังนั้นเพื่อเป็นวิธีแก้ปัญหาสำหรับข้อเท็จจริงที่ว่าไพลินท์ไม่อนุญาตให้คุณระบุความแตกต่างในประเภท docstring คุณสามารถทำได้:

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

คุณต้องอัปเดตเทมเพลต msg เพื่อที่ว่าเมื่อคุณ grep คุณจะยังคงทราบชื่อไฟล์ สิ่งนี้ส่งคืนประเภท docstring อื่น ๆ ที่ขาดหายไปทั้งหมดไม่รวมโมดูล

จากนั้นคุณสามารถแก้ไขข้อผิดพลาดทั้งหมดและหลังจากนั้นให้เรียกใช้:

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

7

เลขที่ pylint ยังไม่สามารถช่วยให้คุณสามารถแยกแยะระหว่างคำเตือน doc สตริง

อย่างไรก็ตามคุณสามารถใช้ flake8 สำหรับการตรวจสอบโค้ด python ทั้งหมดพร้อมกับส่วนขยาย doc-string เพื่อละเว้นคำเตือนนี้

ติดตั้งส่วนขยายสตริง doc ด้วย pip (ภายในใช้pydocstyle )

pip install flake8_docstrings

จากนั้นคุณสามารถใช้--ignore D100สวิตช์ ตัวอย่างเช่นflake8 file.py --ignore D100


5

ด้วยไพลินท์ 2.4 ขึ้นไปคุณสามารถแยกความแตกต่างระหว่างข้อความต่างๆได้missing-docstringโดยใช้สามข้อความย่อยต่อไปนี้:

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

ดังนั้น.pylintrcไฟล์ต่อไปนี้ควรใช้งานได้:

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

ที่ช่วยสุขภาพจิตของฉัน
Tsagana Nokhaeva

5

เพียงใส่บรรทัดต่อไปนี้ที่จุดเริ่มต้นของไฟล์ที่คุณต้องการปิดใช้งานคำเตือนเหล่านี้

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

1
หากคุณต้องการปิดการใช้งานทุกอย่างคุณเพียงแค่ปิดการใช้งานmissing-docstring(ใช้ได้กับเวอร์ชันก่อน 2.4.0)
Pierre.Sassoulas

5

แก้ไข "C: \ Users \ Your User \ AppData \ Roaming \ Code \ User \ settings.json" และเพิ่มpython.linting.pylintArgsบรรทัดเหล่านี้ในตอนท้ายดังที่แสดงด้านล่าง:

{
    "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) จากนั้นพิมพ์และคลิกที่> การตั้งค่า: กำหนดการตั้งค่าเฉพาะภาษา (3) จากนั้นพิมพ์ python หลังจากนั้นผ่านรหัส

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

}


0

ในกรณีของฉันกับ pylint 2.6.0, ข้อความ docstring หายไปจะไม่หายไปแม้หลังจากที่ปิดการใช้งานอย่างชัดเจนmissing-module-docstring, missing-class-docstringและmissing-function-docstringในของฉัน.pylintrcไฟล์ ในที่สุดการกำหนดค่าต่อไปนี้ก็ใช้ได้ผลสำหรับฉัน:

[MESSAGES CONTROL]

disable=missing-docstring,empty-docstring

เห็นได้ชัดว่า pylint 2.6.0 ยังคงตรวจสอบความถูกต้องของ docstrings เว้นแต่การตรวจสอบทั้งสองจะถูกปิดใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.