Пример #1
0
 def unexpectedError(self, _filename, msg):
     self.result.append(
         types.Diagnostic(range=types.Range(
             start=types.Position(line=0, character=0),
             end=types.Position(line=0, character=0)),
                          message=msg,
                          severity=types.DiagnosticSeverity.Error,
                          source='pyflakes'))
Пример #2
0
 def syntaxError(self, _filename, msg, lineno, offset, _text):
     line = lineno - 1
     col = offset or 0
     self.result.append(
         types.Diagnostic(range=types.Range(
             start=types.Position(line=line, character=col),
             end=types.Position(line=line,
                                character=len(self._get_codeline(line)) -
                                col)),
                          message=msg,
                          severity=types.DiagnosticSeverity.Error,
                          source='pyflakes'))
Пример #3
0
 def flake(self, message):
     line = message.lineno - 1
     if message.__class__.__name__ in self.errors:
         severity = types.DiagnosticSeverity.Error
     else:
         severity = types.DiagnosticSeverity.Warning
     self.result.append(
         types.Diagnostic(range=types.Range(
             start=types.Position(line=line, character=message.col),
             end=types.Position(line=line,
                                character=len(self._get_codeline(line)))),
                          message=message.message % message.message_args,
                          severity=severity,
                          source='pyflakes'))
Пример #4
0
 def error(self, line_number, offset, text, check):
     code = text[:4]
     if self._ignore_code(code) or code in self.expected:
         return
     line = line_number - 1
     self.result.append(
         types.Diagnostic(range=types.Range(
             start=types.Position(line=line, character=offset),
             end=types.Position(line=line,
                                character=len(
                                    self.lines[line].rstrip('\n\r')))),
                          message=text,
                          severity=types.DiagnosticSeverity.Warning,
                          code=code,
                          source='pycodestyle'))
Пример #5
0
def _mypy_check(ls: LanguageServer, uri: str, script: Script,
                result: List[types.Diagnostic]):
    from mypy import api
    assert jediEnvironment is not None
    version_info = jediEnvironment.version_info
    if config['diagnostic_on_change']:
        args = ['--command', script._code]
    else:
        args = [to_fs_path(uri)]
    lines = api.run([
        '--python-executable', jediEnvironment.executable, '--python-version',
        f'{version_info.major}.{version_info.minor}', '--config-file',
        get_mypy_config(ls,
                        uri), '--hide-error-context', '--show-column-numbers',
        '--show-error-codes', '--no-pretty', '--no-error-summary'
    ] + args)
    if lines[1]:
        ls.show_message(lines[1], types.MessageType.Error)
        return

    for line in lines[0].split('\n'):
        parts = line.split(':', 4)
        if len(parts) < 5:
            continue
        _fn, row, column, err_type, message = parts
        row = int(row) - 1
        column = int(column) - 1
        if err_type.strip() == 'note':
            severity = types.DiagnosticSeverity.Hint
        else:
            severity = types.DiagnosticSeverity.Warning
        result.append(
            types.Diagnostic(range=types.Range(
                start=types.Position(line=row, character=column),
                end=types.Position(line=row,
                                   character=len(script._code_lines[row]))),
                             message=message.strip(),
                             severity=severity,
                             source='mypy'))
    return result
Пример #6
0
def _validate(ls: LanguageServer, uri: str, script: Script = None):
    if script is None:
        script = get_script(ls, uri)

    # Jedi
    result = [
        types.Diagnostic(
            range=types.Range(start=types.Position(line=x.line - 1,
                                                   character=x.column),
                              end=types.Position(line=x.until_line - 1,
                                                 character=x.until_column)),
            message=x.get_message(),
            severity=types.DiagnosticSeverity.Error,
            source='jedi') for x in script.get_syntax_errors()
    ]
    if result:
        ls.publish_diagnostics(uri, result)
        return

    # pyflakes
    pyflakes_check(script._code, script.path,
                   PyflakesReporter(result, script, config['pyflakes_errors']))

    # pycodestyle
    codestyleopts = get_pycodestyle_options(ls, uri)
    CodestyleChecker(script.path, script._code.splitlines(True), codestyleopts,
                     CodestyleReport(codestyleopts, result)).check_all()

    # mypy
    if config['mypy_enabled']:
        try:
            _mypy_check(ls, uri, script, result)
        except Exception as e:
            ls.show_message(f'mypy check error: {e}',
                            types.MessageType.Warning)

    ls.publish_diagnostics(uri, result)