def handle_source_errors(self, source_errors): """ Makes sure views containing errors are open and shows error messages + highlighting """ errors = list(parse_source_errors(source_errors)) # TODO: we should pass the errorKind too if the error has no span error_panel = self.reset_error_panel() for error in errors: error_panel.run_command("append_to_error_panel", {"message": repr(error)}) if errors: self.show_error_panel() else: self.hide_error_panel() error_panel.set_read_only(True) file_errors = list(filter(lambda error: error.span, errors)) # First, make sure we have views open for each error need_load_wait = False paths = set(error.span.filePath for error in file_errors) for path in paths: view = self.find_view_for_path(path) if not view: need_load_wait = True self.open_view_for_path(path) # If any error-holding files need to be opened, wait briefly to # make sure the file is loaded before trying to annotate it if need_load_wait: sublime.set_timeout(lambda: self.highlight_errors(file_errors), 100) else: self.highlight_errors(file_errors)
def handle_source_errors(self, source_errors): """ Makes sure views containing errors are open and shows error messages + highlighting """ errors = list(parse_source_errors(source_errors)) # TODO: we should pass the errorKind too if the error has no span error_panel = self.reset_error_panel() for error in errors: error_panel.run_command("update_error_panel", {"message": repr(error)}) if errors: self.window.run_command("show_panel", {"panel":"output.hide_errors"}) else: self.window.run_command("hide_panel", {"panel":"output.hide_errors"}) error_panel.set_read_only(True) file_errors = list(filter(lambda error: error.span, errors)) # First, make sure we have views open for each error need_load_wait = False paths = set(error.span.filePath for error in file_errors) for path in paths: view = self.find_view_for_path(path) if not view: need_load_wait = True self.open_view_for_path(path) # If any error-holding files need to be opened, wait briefly to # make sure the file is loaded before trying to annotate it if need_load_wait: sublime.set_timeout(lambda: self.highlight_errors(file_errors), 100) else: self.highlight_errors(file_errors)
def test_parse_source_errors_error(self): errors = list(res.parse_source_errors(source_errors.get('contents'))) self.assertEqual(2, len(errors)) err1, err2 = errors self.assertEqual(err1.kind, 'KindError') self.assertRegex(err1.msg, "Couldn\'t match expected type ‘Integer’") self.assertEqual(err1.span.filePath, 'src/Lib.hs') self.assertEqual(err1.span.fromLine, 11) self.assertEqual(err1.span.fromColumn, 22) self.assertEqual(err2.kind, 'KindError') self.assertRegex(err2.msg, "Couldn\'t match expected type ‘\[Char\]’") self.assertEqual(err2.span.filePath, 'src/Lib.hs') self.assertEqual(err2.span.fromLine, 15) self.assertEqual(err2.span.fromColumn, 24)
def test_parse_source_errors_empty(self): errors = res.parse_source_errors([]) self.assertEqual(0, len(list(errors)))