@@ -94,13 +94,19 @@ def refresh(self):
9494 ima .icon ('error' ), self .results ['E:' ]))
9595 for title , icon , messages in results :
9696 title += ' (%d message%s)' % (len (messages ),
97- 's' if len (messages )> 1 else '' )
97+ 's' if len (messages ) > 1 else '' )
9898 title_item = QTreeWidgetItem (self , [title ], QTreeWidgetItem .Type )
9999 title_item .setIcon (0 , icon )
100100 if not messages :
101101 title_item .setDisabled (True )
102102 modules = {}
103- for module , lineno , message , msg_id in messages :
103+ for message_data in messages :
104+ # If message data is legacy version without message_name
105+ if len (message_data ) == 4 :
106+ message_data = (* message_data , None )
107+
108+ module , lineno , message , msg_id , message_name = message_data
109+
104110 basename = osp .splitext (osp .basename (self .filename ))[0 ]
105111 if not module .startswith (basename ):
106112 # Pylint bug
@@ -128,10 +134,18 @@ def refresh(self):
128134 else :
129135 parent = title_item
130136 if len (msg_id ) > 1 :
131- text = "[%s] %d : %s" % (msg_id , lineno , message )
132- else :
133- text = "%d : %s" % (lineno , message )
134- msg_item = QTreeWidgetItem (parent , [text ], QTreeWidgetItem .Type )
137+ if not message_name :
138+ message_string = "{msg_id} "
139+ else :
140+ message_string = "{msg_id} ({message_name}) "
141+
142+ message_string += "line {lineno}: {message}"
143+
144+ message_string = message_string .format (
145+ msg_id = msg_id , message_name = message_name ,
146+ lineno = lineno , message = message )
147+ msg_item = QTreeWidgetItem (
148+ parent , [message_string ], QTreeWidgetItem .Type )
135149 msg_item .setIcon (0 , ima .icon ('arrow' ))
136150 self .data [id (msg_item )] = (modname , lineno )
137151
@@ -351,27 +365,22 @@ def start(self):
351365 self .output = ''
352366 self .error_output = ''
353367
354- plver = PYLINT_VER
355- if plver is not None :
356- p_args = ['-m' , 'pylint' , '--output-format=text' ]
357- if plver .split ('.' )[0 ] == '0' :
358- p_args += ['-i' , 'yes' ]
359- else :
360- # Option '-i' (alias for '--include-ids') was removed in pylint
361- # 1.0
362- p_args += ["--msg-template='{msg_id}:{line:3d},"
363- "{column}: {obj}: {msg}" ]
368+ if PYLINT_VER is not None :
369+ pylint_args = [
370+ '-m' , 'pylint' , '--output-format=text' ,
371+ '--msg-template='
372+ "'{msg_id}:{symbol}:{line:3d},{column}: {msg}'" ]
364373
365374 pylintrc_path = self .get_pylintrc_path (filename = filename )
366375 if pylintrc_path is not None :
367- p_args += ['--rcfile={}' .format (pylintrc_path )]
376+ pylint_args += ['--rcfile={}' .format (pylintrc_path )]
368377
369- p_args += [ filename ]
378+ pylint_args . append ( filename )
370379 processEnvironment = QProcessEnvironment ()
371380 processEnvironment .insert ("PYTHONIOENCODING" , "utf8" )
372381 self .process .setProcessEnvironment (processEnvironment )
373382
374- self .process .start (sys .executable , p_args )
383+ self .process .start (sys .executable , pylint_args )
375384
376385 running = self .process .waitForStarted ()
377386 self .set_running_state (running )
@@ -412,7 +421,7 @@ def finished(self, exit_code, exit_status):
412421 results = {'C:' : [], 'R:' : [], 'W:' : [], 'E:' : []}
413422 txt_module = '************* Module '
414423
415- module = '' # Should not be needed - just in case something goes wrong
424+ module = '' # Should not be needed - just in case something goes wrong
416425 for line in self .output .splitlines ():
417426 if line .startswith (txt_module ):
418427 # New module
@@ -421,20 +430,36 @@ def finished(self, exit_code, exit_status):
421430 # Supporting option include-ids: ('R3873:' instead of 'R:')
422431 if not re .match (r'^[CRWE]+([0-9]{4})?:' , line ):
423432 continue
424- i1 = line .find (':' )
425- if i1 == - 1 :
426- continue
427- msg_id = line [:i1 ]
428- i2 = line .find (':' , i1 + 1 )
429- if i2 == - 1 :
430- continue
431- line_nb = line [i1 + 1 :i2 ].strip ()
432- if not line_nb :
433- continue
434- line_nb = int (line_nb .split (',' )[0 ])
435- message = line [i2 + 1 :]
436- item = (module , line_nb , message , msg_id )
437- results [line [0 ]+ ':' ].append (item )
433+ items = {}
434+ idx_0 = 0
435+ idx_1 = 0
436+ key_names = ["msg_id" , "message_name" , "line_nb" , "message" ]
437+ for key_idx , key_name in enumerate (key_names ):
438+ if key_idx == len (key_names ) - 1 :
439+ idx_1 = len (line )
440+ else :
441+ idx_1 = line .find (":" , idx_0 )
442+
443+ if idx_1 < 0 :
444+
445+ break
446+ item = line [(idx_0 ):idx_1 ]
447+
448+ if not item :
449+
450+ break
451+
452+ if key_name == "line_nb" :
453+
454+ item = int (item .split (',' )[0 ])
455+
456+ items [key_name ] = item
457+
458+ idx_0 = idx_1 + 1
459+ else :
460+ pylint_item = (module , items ["line_nb" ], items ["message" ],
461+ items ["msg_id" ], items ["message_name" ])
462+ results [line [0 ] + ':' ].append (pylint_item )
438463
439464 # Rate
440465 rate = None
0 commit comments