示例#1
0
    def run(self):
        self.sleep(1)
        exts = settings.SYNTAX.get('python')['extension']
        file_ext = file_manager.get_file_extension(self._path)
        if file_ext in exts:
            try:
                self.reset()
                source = self._editor.get_text()
                if self._encoding is not None:
                    source = source.encode(self._encoding)
                parseResult = compiler.parse(source)
                lint_checker = checker.Checker(parseResult, self._path)
                for m in lint_checker.messages:
                    lineno = m.lineno - 1
                    if lineno not in self.errorsSummary:
                        message = [m.message % m.message_args]
                    else:
                        message = self.errorsSummary[lineno]
                        message += [m.message % m.message_args]
                    self.errorsSummary[lineno] = message
            except Exception, reason:
                message = ''
                if hasattr(reason, 'msg'):
                    message = reason.msg
                else:
                    message = reason.message

                if hasattr(reason, 'lineno'):
                    self.errorsSummary[reason.lineno - 1] = [message]
                else:
                    self.errorsSummary[0] = [message]
            finally:
示例#2
0
 def run(self):
     exts = settings.SYNTAX.get('python')['extension']
     file_ext = file_manager.get_file_extension(self._path)
     if file_ext in exts:
         self.reset()
         source = self._neditor.text
         text = "[PyFlakes] %s"
         # Compile into an AST and handle syntax errors
         try:
             tree = compile(source, self._path, "exec", _ast.PyCF_ONLY_AST)
         except SyntaxError as reason:
             if reason.text is None:
                 logger.error("Syntax error")
             else:
                 self.checks[reason.lineno - 1] = (text % reason.args[0],
                                                   reason.offset - 1)
         else:
             # Okay, now check it
             lint_checker = checker.Checker(tree, self._path)
             lint_checker.messages.sort(key=lambda msg: msg.lineno)
             for message in lint_checker.messages:
                 lineno = message.lineno - 1
                 if lineno not in self.checks:
                     text = [message.message % message.message_args]
                 else:
                     text = self.checks[lineno]
                     text += [message.message % message.message_args]
                 self.checks[lineno] = (text, message.col)
     self.checkerCompleted.emit()
示例#3
0
 def run(self):
     if file_manager.get_file_extension(self._editor.ID) == 'py':
         try:
             self.reset()
             parseResult = compiler.parse(open(self._editor.ID).read())
             self.checker = checker.Checker(parseResult, self._editor.ID)
             for m in self.checker.messages:
                 if m.lineno not in self.errorsSummary:
                     message = [m.message % m.message_args]
                 else:
                     message = self.errorsSummary[m.lineno]
                     message += [m.message % m.message_args]
                 self.errorsSummary[m.lineno] = message
         except Exception, reason:
             self.errorsSummary[reason.lineno] = reason.msg
def check(codeString, filename, reporter=None, builtins=None):
    """
    Check the Python source given by C{codeString} for flakes.

    @param codeString: The Python source to check.
    @type codeString: C{str}

    @param filename: The name of the file the source came from, used to report
        errors.
    @type filename: C{str}

    @param reporter: A L{Reporter} instance, where errors and warnings will be
        reported.

    @return: The number of warnings emitted.
    @rtype: C{int}
    """
    if reporter is None:
        reporter = modReporter._makeDefaultReporter()
    # First, compile into an AST and handle syntax errors.
    try:
        tree = compile(codeString, filename, "exec", _ast.PyCF_ONLY_AST)
    except SyntaxError:
        value = sys.exc_info()[1]
        msg = value.args[0]

        (lineno, offset, text) = value.lineno, value.offset, value.text

        # If there's an encoding problem with the file, the text is None.
        if text is None:
            # Avoid using msg, since for the only known case, it contains a
            # bogus message that claims the encoding the file declared was
            # unknown.
            reporter.unexpectedError(filename, 'problem decoding source')
        else:
            reporter.syntaxError(filename, msg, lineno, offset, text)
        return 1
    except Exception:
        reporter.unexpectedError(filename, 'problem decoding source')
        return 1
    # Okay, it's syntactically valid.  Now check it.
    w = checker.Checker(tree, filename, builtins=builtins)
    w.messages.sort(key=lambda m: m.lineno)
    for warning in w.messages:
        reporter.flake(warning)
    return len(w.messages)
    def run(self):
        self.sleep(1)
        exts = settings.SYNTAX.get('python')['extension']
        file_ext = file_manager.get_file_extension(self._path)
        if file_ext in exts:
            try:
                self.reset()
                source = self._editor.text()
                if self._encoding is not None:
                    source = source.encode(self._encoding)
                tree = compile(source, self._path, "exec", _ast.PyCF_ONLY_AST)
                #parseResult = compiler.parse(source)
                lint_checker = checker.Checker(tree,
                                               self._path,
                                               builtins=self._builtins)
                for m in lint_checker.messages:
                    lineno = m.lineno - 1
                    if lineno not in self.checks:
                        message = [m.message % m.message_args]
                    else:
                        message = self.checks[lineno]
                        message += [m.message % m.message_args]
                    self.checks[lineno] = message
            except Exception as reason:
                message = ''
                if hasattr(reason, 'msg'):
                    message = reason.msg
                else:
                    message = reason.message

                if hasattr(reason, 'lineno') and reason.lineno:
                    self.checks[reason.lineno - 1] = [message]
                else:
                    self.checks[0] = [message]
            finally:
                ignored_range, ignored_lines = self._get_ignore_range()
                to_remove = [
                    x for x in self.checks for r in ignored_range
                    if r[0] < x < r[1]
                ]
                to_remove += ignored_lines
                for line in to_remove:
                    self.checks.pop(line, None)
        else:
            self.reset()
        self.checkerCompleted.emit()
示例#6
0
    def run(self):
        self.sleep(1)
        exts = settings.SYNTAX.get('python')['extension']
        file_ext = file_manager.get_file_extension(self._path)
        if file_ext in exts:
            try:
                self.reset()
                source = self._editor.get_text()
                if self._encoding is not None:
                    source = source.encode(self._encoding)
                parseResult = compiler.parse(source)
                lint_checker = checker.Checker(parseResult, self._path)
                for m in lint_checker.messages:
                    lineno = m.lineno - 1
                    if lineno not in self.errorsSummary:
                        message = [m.message % m.message_args]
                    else:
                        message = self.errorsSummary[lineno]
                        message += [m.message % m.message_args]
                    self.errorsSummary[lineno] = message
            except Exception as reason:
                message = ''
                if hasattr(reason, 'msg'):
                    message = reason.msg
                else:
                    message = reason.message

                if hasattr(reason, 'lineno'):
                    self.errorsSummary[reason.lineno - 1] = [message]
                else:
                    self.errorsSummary[0] = [message]
            finally:
                ignored_range, ignored_lines = self._get_ignore_range()
                to_remove = [
                    x for x in self.errorsSummary for r in ignored_range
                    if r[0] < x < r[1]
                ]
                to_remove += ignored_lines
                for line in to_remove:
                    self.errorsSummary.pop(line, None)
        else:
            self.reset()
示例#7
0
    def run(self):
        exts = settings.SYNTAX.get('python')['extension']
        file_ext = file_manager.get_file_extension(self._path)
        if file_ext in exts:
            try:
                self.reset()
                source = self._neditor.text
                text = "[Error]: %s"
                # Compile into an AST and handle syntax errors
                try:
                    tree = compile(source, self._path, "exec",
                                   _ast.PyCF_ONLY_AST)
                except SyntaxError as reason:
                    if reason.text is None:
                        logger.error("Syntax error")
                    else:
                        text = text % reason.args[0]
                        range_ = helpers.get_range(self._neditor,
                                                   reason.lineno - 1,
                                                   reason.offset)
                        self.checks[reason.lineno - 1].append(
                            (range_, text, ""))
                else:
                    # Okay, now check it
                    lint_checker = checker.Checker(tree, self._path)
                    lint_checker.messages.sort(key=lambda msg: msg.lineno)
                    source_lines = source.split('\n')
                    for message in lint_checker.messages:
                        lineno = message.lineno - 1
                        text = message.message % message.message_args
                        range_ = helpers.get_range(self._neditor, lineno,
                                                   message.col)
                        self.checks[lineno].append(
                            (range_, text, source_lines[lineno].strip()))
            except Exception as reason:
                logger.warning("Checker not finished: {}".format(reason))

        self.checkerCompleted.emit()
示例#8
0
    def run(self):
        exts = settings.SYNTAX.get('python')['extension']
        file_ext = file_manager.get_file_extension(self._path)
        if file_ext in exts:
            self.reset()
            source = self._neditor.text
            text = "[Error]: %s"
            # Compile into an AST and handle syntax errors
            try:
                tree = compile(source, self._path, "exec", _ast.PyCF_ONLY_AST)
            except SyntaxError as reason:
                if reason.text is None:
                    logger.error("Syntax error")
                else:
                    text = text % reason.args[0]
                    range_ = helpers.get_range(self._neditor,
                                               reason.lineno - 1,
                                               reason.offset)
                    self.checks[reason.lineno - 1].append((range_, text))
            else:
                # Okay, now check it
                lint_checker = checker.Checker(tree, self._path)
                lint_checker.messages.sort(key=lambda msg: msg.lineno)
                for message in lint_checker.messages:
                    lineno = message.lineno - 1

                    # if lineno not in self.checks:
                    #     text = [message.message % message.message_args]
                    # else:
                    #     text = self.checks[lineno]
                    #     text += (message.message % message.message_args,)
                    text = message.message % message.message_args
                    range_ = helpers.get_range(self._neditor, lineno,
                                               message.col)
                    self.checks[lineno].append((range_, text))
        self.checkerCompleted.emit()