def display_compilation_results(view): tu = get_translation_unit(view) errString = "" show = False clear_error_marks() # clear visual error marks erase_error_marks(view) if tu == None: return tu.lock() try: if len(tu.var.diagnostics): errString = "" for diag in tu.var.diagnostics: f = diag.location filename = "" if f.file != None: filename = f.file.name err = "%s:%d,%d - %s - %s" % (filename, f.line, f.column, diag.severityName, diag.spelling) if diag.severity == cindex.Diagnostic.Fatal and \ "not found" in diag.spelling: err = "%s\nDid you configure the include path used by clang properly?\n" \ "See http://github.com/quarnster/SublimeClang for more details on "\ "how to configure SublimeClang." % (err) errString = "%s%s\n" % (errString, err) """ for range in diag.ranges: errString = "%s%s\n" % (errString, range) for fix in diag.fixits: errString = "%s%s\n" % (errString, fix) """ add_error_mark( diag.severityName, filename, f.line - 1, diag.spelling) show = True finally: tu.unlock() window = view.window() if not window is None: v = view.window().get_output_panel("clang") v.settings().set("result_file_regex", "^(.+):([0-9]+),([0-9]+)") view.window().get_output_panel("clang") set_clang_view(v) v.set_read_only(False) v.set_scratch(True) v.set_name("sublimeclang.%s" % view.file_name()) e = v.begin_edit() v.insert(e, 0, errString) v.end_edit(e) v.set_read_only(True) show_error_marks(view) update_statusbar(view) if show: view.window().run_command("show_panel", {"panel": "output.clang"}) elif get_settings().get("hide_output_when_empty", False): view.window().run_command("hide_panel", {"panel": "output.clang"})
def display_compilation_results(view): tu = get_translation_unit(view) errString = "" show = False clear_error_marks() # clear visual error marks erase_error_marks(view) if tu == None: return tu.lock() try: if len(tu.var.diagnostics): errString = "" for diag in tu.var.diagnostics: f = diag.location filename = "" if f.file != None: filename = f.file.name err = "%s:%d,%d - %s - %s" % (filename, f.line, f.column, diag.severityName, diag.spelling) if diag.severity == cindex.Diagnostic.Fatal and \ "not found" in diag.spelling: err = "%s\nDid you configure the include path used by clang properly?\n" \ "See http://github.com/quarnster/SublimeClang for more details on "\ "how to configure SublimeClang." % (err) errString = "%s%s\n" % (errString, err) """ for range in diag.ranges: errString = "%s%s\n" % (errString, range) for fix in diag.fixits: errString = "%s%s\n" % (errString, fix) """ add_error_mark(diag.severityName, filename, f.line - 1, diag.spelling) show = True finally: tu.unlock() window = view.window() if not window is None: v = view.window().get_output_panel("clang") v.settings().set("result_file_regex", "^(.+):([0-9]+),([0-9]+)") view.window().get_output_panel("clang") set_clang_view(v) v.set_read_only(False) v.set_scratch(True) v.set_name("sublimeclang.%s" % view.file_name()) e = v.begin_edit() v.insert(e, 0, errString) v.end_edit(e) v.set_read_only(True) show_error_marks(view) update_statusbar(view) if show: view.window().run_command("show_panel", {"panel": "output.clang"}) elif get_settings().get("hide_output_when_empty", False): view.window().run_command("hide_panel", {"panel": "output.clang"})
def recompile(self): view = self.view unsaved_files = [(view.file_name(), view.substr(Region(0, view.size())))] tu = self.get_translation_unit(view.file_name()) tu.reparse(unsaved_files) errString = "" show = False clear_error_marks() # clear visual error marks if len(tu.diagnostics): errString = "" for diag in tu.diagnostics: f = diag.location filename = "" if f.file != None: filename = f.file.name err = "%s:%d,%d - %s - %s" % (filename, f.line, f.column, diag.severityName, diag.spelling) errString = "%s%s\n" % (errString, err) """ for range in diag.ranges: errString = "%s%s\n" % (errString, range) for fix in diag.fixits: errString = "%s%s\n" % (errString, fix) """ add_error_mark( diag.severityName, filename, f.line - 1, diag.spelling) # clear visual error marks show = True v = view.window().get_output_panel("clang") v.settings().set("result_file_regex", "^(...*?):([0-9]*):?([0-9]*)") view.window().get_output_panel("clang") v.set_read_only(False) v.set_scratch(True) v.set_name("sublimeclang.%s" % view.file_name()) e = v.begin_edit() v.insert(e, 0, errString) v.end_edit(e) v.set_read_only(True) show_error_marks(view) if show: view.window().run_command("show_panel", {"panel": "output.clang"}) elif self.hide_clang_output: view.window().run_command("hide_panel", {"panel": "output.clang"}) self.recompile_active = False
def display_compilation_results(view): tu = get_translation_unit(view) errString = "" show = False clear_error_marks() # clear visual error marks erase_error_marks(view) if tu == None: return tu.lock() errorCount = 0 warningCount = 0 try: if len(tu.var.diagnostics): errString = "" for diag in tu.var.diagnostics: f = diag.location filename = "" if f.file != None: filename = f.file.name err = "%s:%d,%d - %s - %s" % (filename, f.line, f.column, diag.severityName, diag.spelling) try: if len(diag.disable_option) > 0: err = "%s [Disable with %s]" % (err, diag.disable_option) except AttributeError: pass if diag.severity == cindex.Diagnostic.Fatal and \ "not found" in diag.spelling: err = "%s\nDid you configure the include path used by clang properly?\n" \ "See http://github.com/quarnster/SublimeClang for more details on "\ "how to configure SublimeClang." % (err) errString = "%s%s\n" % (errString, err) if diag.severity == cindex.Diagnostic.Warning: warningCount += 1 elif diag.severity >= cindex.Diagnostic.Error: errorCount += 1 """ for range in diag.ranges: errString = "%s%s\n" % (errString, range) for fix in diag.fixits: errString = "%s%s\n" % (errString, fix) """ add_error_mark( diag.severityName, filename, f.line - 1, diag.spelling) show = get_setting("show_output_panel", True, view) finally: tu.unlock() if (errorCount > 0 or warningCount > 0) and get_setting("show_status", True, view): statusString = "Clang Status: " if errorCount > 0: statusString = "%s%d Error%s" % (statusString, errorCount, "s" if errorCount != 1 else "") if warningCount > 0: statusString = "%s%s%d Warning%s" % (statusString, ", " if errorCount > 0 else "", warningCount, "s" if warningCount != 1 else "") view.set_status("SublimeClang", statusString) else: view.erase_status("SublimeClang") window = view.window() output_view = None if not window is None: v = view.window().get_output_panel("clang") v.settings().set("result_file_regex", "^(.+):([0-9]+),([0-9]+)") view.window().get_output_panel("clang") set_clang_view(v) v.set_read_only(False) v.set_scratch(True) v.set_name("sublimeclang.%s" % view.file_name()) e = v.begin_edit() v.insert(e, 0, errString) v.end_edit(e) v.set_read_only(True) output_view = v show_error_marks(view) update_statusbar(view) if not window is None: if show: window.run_command("show_panel", {"panel": "output.clang"}) elif get_setting("hide_output_when_empty", False, view): if not output_view is None and output_view.window() != None: window.run_command("hide_panel", {"panel": "output.clang"})
def display_compilation_results(view): tu = get_translation_unit(view) errString = "" show = False clear_error_marks() # clear visual error marks erase_error_marks(view) if tu == None: return if not tu.try_lock(): return try: errorCount = 0 warningCount = 0 ignoreDirs = [ os.path.abspath(os.path.normpath(os.path.normcase(d))) for d in get_setting("diagnostic_ignore_dirs", [], view) ] ignore_regex_str = get_setting("diagnostic_ignore_regex", "pragma once in main file") if ignore_regex_str: ignore_regex = re.compile(ignore_regex_str) else: ignore_regex = None if len(tu.var.diagnostics): errString = "" for diag in tu.var.diagnostics: f = diag.location filename = "" if f.file != None: filename = f.file.name if ignore_diagnostic(filename, ignoreDirs): continue err = "%s:%d,%d - %s - %s" % (filename, f.line, f.column, diag.severityName, diag.spelling) if ignore_regex and ignore_regex.search(err): continue try: if len(diag.disable_option) > 0: err = "%s [Disable with %s]" % (err, diag.disable_option) except AttributeError: pass if diag.severity == cindex.Diagnostic.Fatal and \ "not found" in diag.spelling: err = "%s\nDid you configure the include path used by clang properly?\n" \ "See http://github.com/quarnster/SublimeClang for more details on "\ "how to configure SublimeClang." % (err) errString = "%s%s\n" % (errString, err) if diag.severity == cindex.Diagnostic.Warning: warningCount += 1 elif diag.severity >= cindex.Diagnostic.Error: errorCount += 1 """ for range in diag.ranges: errString = "%s%s\n" % (errString, range) for fix in diag.fixits: errString = "%s%s\n" % (errString, fix) """ add_error_mark(diag.severityName, filename, f.line - 1, diag.spelling) show = errString and get_setting("show_output_panel", True, view) finally: tu.unlock() if (errorCount > 0 or warningCount > 0) and get_setting( "show_status", True, view): statusString = "Clang Status: " if errorCount > 0: statusString = "%s%d Error%s" % (statusString, errorCount, "s" if errorCount != 1 else "") if warningCount > 0: statusString = "%s%s%d Warning%s" % ( statusString, ", " if errorCount > 0 else "", warningCount, "s" if warningCount != 1 else "") view.set_status("SublimeClang", statusString) else: view.erase_status("SublimeClang") window = view.window() clang_error_panel.set_data(errString) update_statusbar(view) if not get_setting("error_marks_on_panel_only", False, view): show_error_marks(view) if not window is None: if show: window.run_command("clang_toggle_panel", {"show": True}) elif get_setting("hide_output_when_empty", False, view): if clang_error_panel.is_visible(): window.run_command("clang_toggle_panel", {"show": False})
def display_compilation_results(view): tu = get_translation_unit(view) errString = "" show = False clear_error_marks() # clear visual error marks erase_error_marks(view) if tu == None: return if not tu.try_lock(): return errorCount = 0 warningCount = 0 ignoreDirs = [os.path.abspath(os.path.normpath(os.path.normcase(d))) for d in get_setting("diagnostic_ignore_dirs", [], view)] try: if len(tu.var.diagnostics): errString = "" for diag in tu.var.diagnostics: f = diag.location filename = "" if f.file != None: filename = f.file.name if ignore_diagnostic(filename, ignoreDirs): continue err = "%s:%d,%d - %s - %s" % (filename, f.line, f.column, diag.severityName, diag.spelling) try: if len(diag.disable_option) > 0: err = "%s [Disable with %s]" % (err, diag.disable_option) except AttributeError: pass if diag.severity == cindex.Diagnostic.Fatal and \ "not found" in diag.spelling: err = "%s\nDid you configure the include path used by clang properly?\n" \ "See http://github.com/quarnster/SublimeClang for more details on "\ "how to configure SublimeClang." % (err) errString = "%s%s\n" % (errString, err) if diag.severity == cindex.Diagnostic.Warning: warningCount += 1 elif diag.severity >= cindex.Diagnostic.Error: errorCount += 1 """ for range in diag.ranges: errString = "%s%s\n" % (errString, range) for fix in diag.fixits: errString = "%s%s\n" % (errString, fix) """ add_error_mark( diag.severityName, filename, f.line - 1, diag.spelling) show = get_setting("show_output_panel", True, view) finally: tu.unlock() if (errorCount > 0 or warningCount > 0) and get_setting("show_status", True, view): statusString = "Clang Status: " if errorCount > 0: statusString = "%s%d Error%s" % (statusString, errorCount, "s" if errorCount != 1 else "") if warningCount > 0: statusString = "%s%s%d Warning%s" % (statusString, ", " if errorCount > 0 else "", warningCount, "s" if warningCount != 1 else "") view.set_status("SublimeClang", statusString) else: view.erase_status("SublimeClang") window = view.window() clang_error_panel.set_data(errString) update_statusbar(view) if not get_setting("error_marks_on_panel_only", False, view): show_error_marks(view) if not window is None: if show: window.run_command("clang_toggle_panel", {"show": True}) elif get_setting("hide_output_when_empty", False, view): if clang_error_panel.is_visible(): window.run_command("clang_toggle_panel", {"show": False})
def display_compilation_results(view): filename = get_filename(view) language = get_language(view) # todo: this can be None if warm_up_in_separate_thread is true. # fix this somehow? tu = get_translation_unit(view, filename, language) assert tu is not None errormarkers.clear_error_marks() # clear visual error marks errormarkers.erase_error_marks(view) errString = "" errorCount = 0 warningCount = 0 diagnostics = tu.get_diagnostics() for diagnostic in diagnostics: source = diagnostic.filename name = diagnostic.name line = diagnostic.line col = diagnostic.column spelling = diagnostic.spelling if diagnostic.is_fatal(): if "not found" in spelling: message = "Did you configure the include path used by clang properly?\n" \ "See http://github.com/ensisoft/SublimeClang for more details on how to configure SublimeClang." errString = "%s" % (message) message = "%s:%d,%d - %s - %s" % (source, line, col, name, spelling) errString = "%s\n%s" % (errString, message) break if suppress_based_on_location(source): continue elif suppress_based_on_match(spelling): continue elif suppress_based_on_clang_bug(source, spelling): continue message = "%s:%d,%d - %s - %s" % (source, line, col, name, spelling) if diagnostic.can_ignore(): if diagnostic.has_suppression(): disable_flag = diagnostic.disable_flag message = "%s [Disable with %s]" % (message, disable_flag) errString = "%s%s\n" % (errString, message) if diagnostic.is_warning(): warningCount += 1 elif diagnostic.is_error(): errorCount += 1 errormarkers.add_error_mark(name, source, line - 1, spelling) if errorCount > 0 or warningCount > 0: statusString = "Clang Status: " if errorCount > 0: statusString = "%s%d Error%s" % (statusString, errorCount, "s" if errorCount != 1 else "") if warningCount > 0: statusString = "%s%s%d Warning%s" % (statusString, ", " if errorCount > 0 else "", warningCount, "s" if warningCount != 1 else "") view.set_status("SublimeClang", statusString) else: view.erase_status("SublimeClang") window = view.window() if not window is None: show_panel = errString window.run_command("clang_toggle_panel", {"show": show_panel}) errormarkers.clang_error_panel.set_data(errString) errormarkers.update_statusbar(view) errormarkers.show_error_marks(view)
def display_compilation_results(view): tu = get_translation_unit(view) errString = "" show = False clear_error_marks() # clear visual error marks erase_error_marks(view) if tu == None: return tu.lock() errorCount = 0 warningCount = 0 try: if len(tu.var.diagnostics): errString = "" for diag in tu.var.diagnostics: f = diag.location filename = "" if f.file != None: filename = f.file.name err = "%s:%d,%d - %s - %s" % (filename, f.line, f.column, diag.severityName, diag.spelling) try: if len(diag.disable_option) > 0: err = "%s [Disable with %s]" % (err, diag.disable_option) except AttributeError: pass if diag.severity == cindex.Diagnostic.Fatal and \ "not found" in diag.spelling: err = "%s\nDid you configure the include path used by clang properly?\n" \ "See http://github.com/quarnster/SublimeClang for more details on "\ "how to configure SublimeClang." % (err) errString = "%s%s\n" % (errString, err) if diag.severity == cindex.Diagnostic.Warning: warningCount += 1 elif diag.severity >= cindex.Diagnostic.Error: errorCount += 1 """ for range in diag.ranges: errString = "%s%s\n" % (errString, range) for fix in diag.fixits: errString = "%s%s\n" % (errString, fix) """ add_error_mark(diag.severityName, filename, f.line - 1, diag.spelling) show = get_setting("show_output_panel", True, view) finally: tu.unlock() if (errorCount > 0 or warningCount > 0) and get_setting( "show_status", True, view): statusString = "Clang Status: " if errorCount > 0: statusString = "%s%d Error%s" % (statusString, errorCount, "s" if errorCount != 1 else "") if warningCount > 0: statusString = "%s%s%d Warning%s" % ( statusString, ", " if errorCount > 0 else "", warningCount, "s" if warningCount != 1 else "") view.set_status("SublimeClang", statusString) else: view.erase_status("SublimeClang") window = view.window() output_view = None if not window is None: v = view.window().get_output_panel("clang") v.settings().set("result_file_regex", "^(.+):([0-9]+),([0-9]+)") view.window().get_output_panel("clang") set_clang_view(v) v.set_read_only(False) v.set_scratch(True) v.set_name("sublimeclang.%s" % view.file_name()) e = v.begin_edit() v.insert(e, 0, errString) v.end_edit(e) v.set_read_only(True) output_view = v show_error_marks(view) update_statusbar(view) if not window is None: if show: window.run_command("show_panel", {"panel": "output.clang"}) elif get_setting("hide_output_when_empty", False, view): if not output_view is None and output_view.window() != None: window.run_command("hide_panel", {"panel": "output.clang"})