def wait_ghcmod_and_parse(view, file_dir, msg, cmds_with_args, alter_messages_cb): sublime.set_timeout(lambda: hide_output(view), 0) exit_success = True parsed_messages = [] for (cmd, args) in cmds_with_args: stdout = call_ghcmod_and_wait(args, file_dir) # stdout contains NULL as line endings within one message # error_output_regex using indents to determine one message scope # Replace NULLs to indents out = stdout.replace('\0', '\n ').decode('utf-8') exit_success = exit_success and len(out) == 0 parsed = parse_output_messages(file_dir, out) for p in parsed: parsed_messages.append((cmd, p)) exit_code = 0 if exit_success else 1 if alter_messages_cb: alter_messages_cb(parsed_messages) concated_messages = map(lambda m: m[1], parsed_messages) output_text = format_output_messages(concated_messages) show_output_result_text(view, msg, output_text, exit_code, file_dir) sublime.set_timeout(lambda: mark_messages_in_views(concated_messages), 0)
def wait_ghcmod_and_parse(view, filename, msg, cmds_with_args, alter_messages_cb): sublime.set_timeout(lambda: hide_output(view), 0) parsed_messages = [] file_dir = os.path.dirname(filename) all_cmds_successful = True all_cmds_outputs = [] for (cmd, args) in cmds_with_args: stdout = call_ghcmod_and_wait(args, filename) # stdout contains NULL as line endings within one message # error_output_regex using indents to determine one message scope # Replace NULLs to indents out1 = stdout.replace('\0', '\n ') # Hlint outputs Error instead Warning for tips # so lets replace them out = out1.replace('Error', 'Warning') success = len(out.strip()) == 0 if not success: all_cmds_outputs.append(out) log(u"ghc-mod %s didn't exit with success on '%s'" % (u' '.join(cmd), filename)) all_cmds_successful &= success parsed = parse_output_messages(file_dir, out) for p in parsed: parsed_messages.append((cmd, p)) if alter_messages_cb: alter_messages_cb(parsed_messages) concated_messages = [m[1] for m in parsed_messages] # Set global error list set_global_error_messages(concated_messages) sublime.set_timeout(lambda: mark_messages_in_views(concated_messages), 0) output_text = (format_output_messages(concated_messages) if parsed_messages else '\n'.join(all_cmds_outputs)) exit_code = 0 if all_cmds_successful else 1 show_output_result_text(view, msg, output_text, exit_code, file_dir)
def run(self): window, view, file_shown_in_view = get_haskell_command_window_view_file_project() if not file_shown_in_view: return file_dir, file_name = os.path.split(file_shown_in_view) log('hdevtools checking ' + file_shown_in_view) parsed_output = hdevtools_check(file_shown_in_view) if parsed_output is None: raise ValueError, "hdevtools failed!" log(parsed_output) set_global_error_messages(parsed_output) sublime.set_timeout(lambda: mark_messages_in_views(parsed_output), 0) output_text = "\n".join([p.message for p in parsed_output]) exit_code = 1 if parsed_output else 0 show_output_result_text(view, '', output_text, exit_code, file_dir)
def wait_ghcmod_and_parse(view, filename, msg, cmds_with_args, alter_messages_cb): sublime.set_timeout(lambda: hide_output(view), 0) parsed_messages = [] file_dir = os.path.dirname(filename) all_cmds_successful = True all_cmds_outputs = [] for (cmd, args) in cmds_with_args: stdout = call_ghcmod_and_wait(args, filename) # stdout contains NULL as line endings within one message # error_output_regex using indents to determine one message scope # Replace NULLs to indents out = stdout.replace('\0', '\n ') success = len(out.strip()) == 0 if not success: all_cmds_outputs.append(out) log(u"ghc-mod %s didn't exit with success on '%s'" % (u' '.join(cmd), filename), log_error) all_cmds_successful &= success parsed = parse_output_messages(view, file_dir, out) for p in parsed: parsed_messages.append((cmd, p)) if alter_messages_cb: alter_messages_cb(parsed_messages) concated_messages = [m[1] for m in parsed_messages] # Set global error list set_global_error_messages(concated_messages) sublime.set_timeout(lambda: mark_messages_in_views(concated_messages), 0) output_text = (format_output_messages(concated_messages) if parsed_messages else '\n'.join(all_cmds_outputs)) exit_code = 0 if all_cmds_successful else 1 show_output_result_text(view, msg, output_text, exit_code, file_dir)