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'))
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'))
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'))
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'))
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
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)