python pip - Можно ли настроить проверку ошибок Pylint?





install what (5)


Вот пример пользовательской проверки , а другой пример легче понять .

Я столкнулся с проблемой, подобной вам. Следующий код - мое решение. Я настроил одну проверку на запрещенный импорт datetime.now . Вы можете взять его для справки:

class TestChecker(BaseChecker):
    """
    find the check type in the following url:
    https://github.com/PyCQA/pylint/blob/63eb8c4663a77d0caf2a842b716e4161f9763a16/pylint/checkers/typecheck.py
    """
    __implements__ = IAstroidChecker

    name = 'test-checker'
    priority = -1
    msgs = {
        'W0001': (
            'You should not import "%s"',
            'import-datetime-returns',
            'Should not import datetime'
        ),
    }

    def __init__(self, linter):
        super().__init__(linter)
        # I use original pylint's ImportsChecker as a property
        # from  import **
        self.forbidden_import = ['datetime.datetime.now']
        self.forbidden_import_from = ['datetime.now', 'now']
        self.forbidden_import_attribute = ['datetime.now', 'now', 'datetime.datetime.now']

    #the function will be rewrited
    def visit_importfrom(self, node):
        names = [name for name, _alias in node.names]
        for item in names:
            for check in self.forbidden_import_from:
                if item == check:
                    self.add_message('W0001', node=node, args=item)

    def visit_import(self, node):
        names = [name for name, _ in node.names]
        for item in names:
            for check in self.forbidden_import:
                if check == item:
                    self.add_message('W0001', node=node, args=item)

    def visit_attribute(self, node):
        for check_attr in self.forbidden_import_attribute:
            if check_attr == node.as_string():
                self.add_message('W0001', node=node, args=check_attr)


def register(linter):
    linter.register_checker(TestChecker(linter))

Я использую pydev, где я установил pylint. Проблема в том, что даже внутри комментариев, pylint сообщает о предупреждениях. Я пытался отключить любую проверку внутри любой строки или комментария блока. Кроме того, я хочу следовать соглашению об именах camelCase вместо подчеркиваний для переменных и аргументов в моем коде. Есть ли способ указать такое правило, не вставляя мой код с любой pylint: отключить комментарии?




Вы можете глобально отключить предупреждения определенного класса, используя

pylint --disable=W1234

или с помощью специального файла конфигурации PyLint

pylint --rcfile=/path/to/config.file

Ниже приведен пример файла конфигурации:

[MESSAGES CONTROL]
# C0111 Missing docstring 
# I0011 Warning locally suppressed using disable-msg
# I0012 Warning locally suppressed using disable-msg
# W0704 Except doesn't do anything Used when an except clause does nothing but "pass" and there is no "else" clause
# W0142 Used * or * magic* Used when a function or method is called using *args or **kwargs to dispatch arguments.
# W0212 Access to a protected member %s of a client class
# W0232 Class has no __init__ method Used when a class has no __init__ method, neither its parent classes.
# W0613 Unused argument %r Used when a function or method argument is not used.
# W0702 No exception's type specified Used when an except clause doesn't specify exceptions type to catch.
# R0201 Method could be a function
# W0614 Unused import XYZ from wildcard import
# R0914 Too many local variables
# R0912 Too many branches
# R0915 Too many statements
# R0913 Too many arguments
# R0904 Too many public methods
disable=C0111,I0011,I0012,W0704,W0142,W0212,W0232,W0613,W0702,R0201,W0614,R0914,R0912,R0915,R0913,R0904,R0801

См. Документацию на выделенном сайте Pylint .







Как сказал cfedermann, вы можете указать сообщения, которые должны быть отключены в файле ~/.pylintrc (обратите внимание, что вы можете создать файл-заглушку с помощью pylint --generate-rcfile если вы не хотите использовать встроенные комментарии.

Вы также увидите в сгенерированном файле в разделе [BASIC] такие параметры, как «method-rgx», «function-rgx» и т. Д., Которые вы можете настроить так, как вам нравится поддерживать стиль верблюжьих футляров, а не стиль pep8 подчеркивания ,




Что вы спрашиваете, почему это:

def func(a=[], b = 2):
    pass

не является внутренне эквивалентным этому:

def func(a=None, b = None):
    a_default = lambda: []
    b_default = lambda: 2
    def actual_func(a=None, b=None):
        if a is None: a = a_default()
        if b is None: b = b_default()
    return actual_func
func = func()

за исключением случая явного вызова func (None, None), который мы будем игнорировать.

Другими словами, вместо оценки параметров по умолчанию, почему бы не сохранить каждый из них и не оценить их при вызове функции?

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





python pydev pylint