def _threaded_lint(self, doc_uri, monitor: IMonitor): from robocorp_ls_core.jsonrpc.exceptions import JsonRpcRequestCancelled try: from robotframework_ls.impl.ast_utils import collect_errors from robotframework_ls.impl import code_analysis log.debug("Lint: starting (in thread).") completion_context = self._create_completion_context( doc_uri, 0, 0, monitor) if completion_context is None: return [] ast = completion_context.get_ast() monitor.check_cancelled() errors = collect_errors(ast) log.debug("Collected AST errors (in thread): %s", len(errors)) monitor.check_cancelled() analysis_errors = code_analysis.collect_analysis_errors( completion_context) log.debug("Collected analysis errors (in thread): %s", len(analysis_errors)) errors.extend(analysis_errors) return [error.to_lsp_diagnostic() for error in errors] except JsonRpcRequestCancelled: raise JsonRpcRequestCancelled("Lint cancelled (inside lint)") except: log.exception("Error collecting errors.") return []
def m_lint(self, doc_uri): if not self._check_min_version((3, 2)): from robocode_ls_core.lsp import Error msg = ( "robotframework version (%s) too old for linting.\n" "Please install a newer version and restart the language server." % (self.m_version(), )) log.info(msg) return [Error(msg, (0, 0), (1, 0)).to_lsp_diagnostic()] try: from robotframework_ls.impl.ast_utils import collect_errors from robotframework_ls.impl import code_analysis completion_context = self._create_completion_context(doc_uri, 0, 0) if completion_context is None: return [] ast = completion_context.get_ast() errors = collect_errors(ast) errors.extend( code_analysis.collect_analysis_errors(completion_context)) return [error.to_lsp_diagnostic() for error in errors] except: log.exception("Error collecting errors.") return []
def _collect_errors(workspace, doc, data_regression, basename=None, config=None): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.code_analysis import collect_analysis_errors completion_context = CompletionContext(doc, workspace=workspace.ws, config=config) errors = [ error.to_lsp_diagnostic() for error in collect_analysis_errors(completion_context) ] data_regression.check(errors, basename=basename)
def _threaded_lint(self, doc_uri, monitor: IMonitor): from robocorp_ls_core.jsonrpc.exceptions import JsonRpcRequestCancelled from robotframework_ls.impl.robot_lsp_constants import ( OPTION_ROBOT_LINT_ROBOCOP_ENABLED, ) from robocorp_ls_core import uris try: from robotframework_ls.impl.ast_utils import collect_errors from robotframework_ls.impl import code_analysis import os.path log.debug("Lint: starting (in thread).") completion_context = self._create_completion_context(doc_uri, 0, 0, monitor) if completion_context is None: return [] config = completion_context.config robocop_enabled = config is None or config.get_setting( OPTION_ROBOT_LINT_ROBOCOP_ENABLED, bool, False ) ast = completion_context.get_ast() source = completion_context.doc.source monitor.check_cancelled() errors = collect_errors(ast) log.debug("Collected AST errors (in thread): %s", len(errors)) monitor.check_cancelled() analysis_errors = code_analysis.collect_analysis_errors(completion_context) monitor.check_cancelled() log.debug("Collected analysis errors (in thread): %s", len(analysis_errors)) errors.extend(analysis_errors) lsp_diagnostics = [error.to_lsp_diagnostic() for error in errors] try: if robocop_enabled: from robocorp_ls_core.robocop_wrapper import ( collect_robocop_diagnostics, ) workspace = completion_context.workspace if workspace is not None: project_root = workspace.root_path else: project_root = os.path.abspath(".") monitor.check_cancelled() lsp_diagnostics.extend( collect_robocop_diagnostics( project_root, ast, uris.to_fs_path(doc_uri), source ) ) except Exception: log.exception( "Error collecting Robocop errors (possibly an unsupported Robocop version is installed)." ) return lsp_diagnostics except JsonRpcRequestCancelled: raise JsonRpcRequestCancelled("Lint cancelled (inside lint)") except: log.exception("Error collecting errors.") return []