Как отключить предупреждения об отсутствии строки документации на уровне файла в Pylint?


94

Pylint выдает ошибку о том, что в некоторых файлах отсутствуют строки документации. Я пытаюсь добавить строки документации к каждому классу, методу и функции, но кажется, что Pylint также проверяет, должны ли файлы иметь строку документации в начале. Могу я как-нибудь отключить это? Я хотел бы получить уведомление о том, что в классе, функции или методе отсутствует строка документации, но не обязательно, чтобы файл имел строку документации.

(Есть ли термин из юридического жаргона, который часто встречается в начале проприетарного исходного файла? Есть примеры? Я не знаю, можно ли публиковать такой тривиальный вопрос отдельно.)

Ответы:


106

Для модуля Python хорошо иметь строку документации, объясняющую, что модуль делает, что он предоставляет, примеры использования классов. Это отличается от комментариев, которые вы часто видите в начале файла с информацией об авторских правах и лицензии, которую IMO не должна помещать в строку документации (некоторые даже утверждают, что они должны исчезнуть полностью, см., Например, http: // hackerboss. com / избавиться от шаблонов / )

В pylint 2.4 и более поздних версиях вы можете различать разные варианты missing-docstring, используя три следующих под-сообщения:

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

Итак, следующий .pylintrcфайл должен работать:

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

Для предыдущих версий Pylint не было отдельного кода для различных мест, где могут встречаться строки документации, поэтому все, что вы можете сделать, это отключить C0111. Проблема в том, что если вы отключите это в области видимости модуля, то оно будет отключено везде в модуле (то есть вы не получите ни одной строки C из-за отсутствия строки документации функции / класса / метода. Что, возможно, не очень хорошо.

Итак, я предлагаю добавить эту небольшую недостающую строку документации, говоря что-то вроде:

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

Достаточно скоро вы найдете полезные вещи, чтобы вставить туда, например, предоставление примеров того, как использовать различные классы / функции модуля, которые не обязательно принадлежат отдельным строкам документации классов / функций (например, как эти взаимодействовать, или что-то вроде краткого руководства).


9
+1 за исчезновение законного (и другого) шаблона из исходного кода. Юридические уведомления не прилагаются к каждому компоненту автомобиля. Обязательно создайте файл с юридическим текстом вашего проекта в нем. Не помещайте копии этого в каждый файл.
Джонатан Хартли

22
-1 для строк документации, начинающихся со слов «This is module foobar». Что это за модуль, уже само собой разумеется. Повторение его является избыточным и может устареть, если модуль когда-либо изменит имя. Просто включите часть «Обеспечивает высокий уровень поддержки для того или иного».
Джонатан Хартли

@JonathanHartley: согласен. Я соответственно обновил последнюю часть ответа.
gurney alex

16
Неутешительный ответ. Специально для проектов Django. Forms.py «Это модели ... ПРОСТО ДЕТСЯ! Это формы. Потому что, как вы знаете, файл называется forms.py. Это не Код да Винчи. Что, по вашему мнению, может быть здесь?»
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"]

И вам хорошо!


31
Это полезно, хотя "python.linting.pylintArgs": ["--disable=C0111"],, вероятно, больше, так как просто заглушает предупреждения о строках документации. Однако настройка решает вопрос OP о том, как отключить эти предупреждения только на уровне модуля.
followben

Это лучший вариантg, поскольку вас интересует только ошибка, такая как отсутствующий класс, ... вместо предупреждения о строке документа
Зеронтелли

Так грустно, когда я вижу проект, который к этому прибегает. pylint - отличный инструмент для поддержания чистоты кода. Ему просто нужна любовь.
Эрик Аронести

9

Я думаю, что исправить это относительно легко, не отключая эту функцию.

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

Все, что вам нужно сделать, это добавить строку тройных двойных кавычек в каждую функцию.


Спасибо. Я только что обнаружил, что работают даже одинарные кавычки
vikas027

ну, это все еще раздражает, например, если вы работаете над проектом Django, он создаст кучу файлов модулей, и вам нужно будет зайти в каждый из них, чтобы сделать это. Лучше показывать только сообщение об ошибке, чем предупреждение с "" --errors -only "в пользовательских настройках
pylint

8

Я пришел в поисках ответа, потому что, как сказал @cerin, в проектах Django громоздко и излишне добавлять строки документации модуля в каждый из файлов, которые django автоматически генерирует при создании нового приложения.

Итак, чтобы обойти тот факт, что pylint не позволяет вам указать разницу в типах строк документации, вы можете сделать следующее:

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

Вам необходимо обновить шаблон msg, чтобы при использовании grep вы все еще знали имя файла. Это возвращает все остальные типы отсутствующих строк документации, за исключением модулей.

Затем вы можете исправить все эти ошибки, а затем просто запустить:

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

7

Нет. Pylint в настоящее время не позволяет различать предупреждения в виде строки документа.

Однако вы можете использовать flake8 для проверки всего кода Python вместе с расширением doc-string, чтобы игнорировать это предупреждение.

Установите расширение doc-string с помощью pip (внутри используется pydocstyle ).

pip install flake8_docstrings

Затем вы можете просто использовать --ignore D100переключатель. Напримерflake8 file.py --ignore D100


5

В pylint 2.4 и более поздних версиях вы можете различать разные варианты missing-docstring, используя три следующих под-сообщения:

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

Итак, следующий .pylintrcфайл должен работать:

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

что спасло мое психическое здоровье
Цагана Нохаева

5

Просто поместите следующие строки в начало любого файла, в котором вы хотите отключить эти предупреждения.

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

1
Если вы хотите отключить все, вам просто нужно отключить missing-docstring(работает для версий до 2.4.0).
Пьер Сассулас,

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, отсутствующие сообщения будут строка документации не исчезнет, даже после того, как явно отключить missing-module-docstring, missing-class-docstringи missing-function-docstringв моем .pylintrcфайле. Наконец, у меня сработала следующая конфигурация:

[MESSAGES CONTROL]

disable=missing-docstring,empty-docstring

По-видимому, pylint 2.6.0 все еще проверяет строки документации, если обе проверки не отключены.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.