def on_query_context(self, view, key, operator, operand, match_all): if key == "clang_supported_language": if view == None: view = sublime.active_window().active_view() return is_supported_language(view) elif key == "clang_is_code": return self.not_code_regex.search(view.scope_name(view.sel()[0].begin())) == None elif key == "clang_complete_enabled": return clang_complete_enabled elif key == "clang_automatic_completion_popup": return get_setting("automatic_completion_popup", True, view) elif key == "clang_panel_visible": return clang_error_panel.is_visible()
def run(self, **args): show = args["show"] if "show" in args else None aview = sublime.active_window().active_view() error_marks = get_setting("error_marks_on_panel_only", False, aview) if show or (show == None and not clang_error_panel.is_visible(self.window)): clang_error_panel.open(self.window) if error_marks: show_error_marks(aview) else: clang_error_panel.close() if error_marks: erase_error_marks(aview)
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})