diff options
author | Pete <sneakypete81@gmail.com> | 2013-06-01 21:15:05 +0100 |
---|---|---|
committer | Pete <sneakypete81@gmail.com> | 2013-06-01 21:15:05 +0100 |
commit | 5d23bc763026b0170c64e757229430f547b21ca0 (patch) | |
tree | 6eefcb6c774b764e6a77c3211676dec35196919d | |
parent | da49bbd8f17b1c248a42556fd2220ac29f1032a6 (diff) | |
download | pylint-git-5d23bc763026b0170c64e757229430f547b21ca0.tar.gz |
Added source file viewer.
Double-clicking on a warning/error message opens the source file and scrolls
to the affected line.
Added additional fields to gui.msgs to enable this.
--HG--
branch : source_view
-rw-r--r-- | gui.py | 38 | ||||
-rw-r--r-- | reporters/guireporter.py | 4 |
2 files changed, 35 insertions, 7 deletions
@@ -39,10 +39,10 @@ COLORS = {'(I)':'lightblue', def convert_to_string(msg): """make a string representation of a message""" - if (msg[2] != ""): - return "(" + msg[0] + ") " + msg[1] + "." + msg[2] + " [" + msg[3] + "]: " + msg[4] + if (msg[4] != ""): + return "(" + msg[0] + ") " + msg[3] + "." + msg[4] + " [" + msg[5] + "]: " + msg[6] else: - return "(" + msg[0] + ") " + msg[1] + " [" + msg[3] + "]: " + msg[4] + return "(" + msg[0] + ") " + msg[3] + " [" + msg[5] + "]: " + msg[6] class BasicStream(object): ''' @@ -120,6 +120,7 @@ class LintGui(object): #message queue for output from reporter self.msg_queue = Queue.Queue() self.msgs = [] + self.visible_msgs = [] self.filenames = [] self.rating = StringVar() self.tabs = {} @@ -174,6 +175,7 @@ class LintGui(object): yscrollcommand=rightscrollbar.set, xscrollcommand=bottomscrollbar.set, bg="white") + self.lbMessages.bind("<Double-Button-1>", self.show_message) self.lbMessages.pack(expand=True, fill=BOTH) rightscrollbar.config(command=self.lbMessages.yview) bottomscrollbar.config(command=self.lbMessages.xview) @@ -284,14 +286,17 @@ class LintGui(object): command=self.refresh_results_window) msg = Radiobutton(radio_frame, text="Messages", variable=self.box, value="Messages", command=self.refresh_results_window) + sourceFile = Radiobutton(radio_frame, text="Source File", variable=self.box, + value="Source File", command=self.refresh_results_window) report.select() report.grid(column=0, row=0, sticky=W) rawMet.grid(column=1, row=0, sticky=W) dup.grid(column=2, row=0, sticky=W) - msg.grid(column=3, row=0, sticky=E) + msg.grid(column=3, row=0, sticky=W) stat.grid(column=0, row=1, sticky=W) msgCat.grid(column=1, row=1, sticky=W) - ext.grid(column=2, row=1, columnspan=2, sticky=W) + ext.grid(column=2, row=1, sticky=W) + sourceFile.grid(column=3, row=1, sticky=W) #dictionary for check boxes and associated error term self.msg_type_dict = { @@ -320,6 +325,7 @@ class LintGui(object): """refresh the message window with current output""" #clear the window self.lbMessages.delete(0, END) + self.visible_msgs = [] for msg in self.msgs: # Obtaining message type (pylint's '--include-ids' appends the @@ -327,6 +333,7 @@ class LintGui(object): msg_type = msg[0][0] if (self.msg_type_dict.get(msg_type)()): + self.visible_msgs.append(msg) msg_str = convert_to_string(msg) self.lbMessages.insert(END, msg_str) fg_color = COLORS.get(msg_str[:3], 'black') @@ -360,6 +367,7 @@ class LintGui(object): #displaying msg if message type is selected in check box if (self.msg_type_dict.get(msg_type)()): + self.visible_msgs.append(msg) msg_str = convert_to_string(msg) self.lbMessages.insert(END, msg_str) fg_color = COLORS.get(msg_str[:3], 'black') @@ -444,6 +452,7 @@ class LintGui(object): #cleaning up msgs and windows self.msgs = [] + self.visible_msgs = [] self.lbMessages.delete(0, END) self.tabs = {} self.results.delete(0, END) @@ -463,6 +472,25 @@ class LintGui(object): self.root.configure(cursor='') + def show_message(self, event=None): + selected = self.lbMessages.curselection() + if not selected: + return + + msg = self.visible_msgs[int(selected[0])] + filename = msg[2] + fileline = int(msg[5]) + + scroll = fileline - 3 + if scroll < 0: + scroll = 0 + + self.tabs["Source File"] = open(filename, "r").readlines() + self.box.set("Source File") + self.refresh_results_window() + self.results.yview(scroll) + self.results.select_set(fileline - 1) + def lint_thread(module, reporter, gui): """thread for pylint""" diff --git a/reporters/guireporter.py b/reporters/guireporter.py index 8fe6d531c..83cc049ce 100644 --- a/reporters/guireporter.py +++ b/reporters/guireporter.py @@ -21,9 +21,9 @@ class GUIReporter(BaseReporter): def add_message(self, msg_id, location, msg): """manage message of different type and in the context of path""" - module, obj, line, col_offset = location[1:] + filename, module, obj, line, col_offset = location sigle = self.make_sigle(msg_id) - full_msg = [sigle, module, obj, str(line), msg] + full_msg = [sigle, msg_id, filename, module, obj, str(line), msg] self.msgs += [[sigle, module, obj, str(line)]] self.gui.msg_queue.put(full_msg) |