help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Emacs 23, Python, epylint, pylint


From: Richard Riley
Subject: Re: Emacs 23, Python, epylint, pylint
Date: Thu, 22 Oct 2009 04:10:56 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

Richard Riley <rileyrgdev@gmail.com> writes:

> Richard Riley <rileyrgdev@gmail.com> writes:
>
>> I have followed the advice here:
>>
>> http://stackoverflow.com/questions/1259873/how-can-i-use-emacs-flymake-mode-for-python-with-pyflakes-and-pylint-checking-cod
>>
>> or
>>
>> http://tinyurl.com/yfshb5b
>>
>> And successfully have pylint and emacs highlighting errors in my .py
>> files courtesy of flymake. The problem is that I can't see anywhere the
>> actually error description. Can anyone help please?
>>
>> The epylint script I have is this:
>>
>> ,----
>> | #!/usr/bin/env python
>> | 
>> | import re
>> | import sys
>> | 
>> | from subprocess import *
>> | 
>> | p = Popen(
>> |     "pylint -f parseable -r n %s"%
>> |     sys.argv[1], shell = True, stdout = PIPE).stdout
>> | 
>> | for line in p:
>> |     match = re.search("\\[([WECR])(, (.+?))?\\]", line)
>> |     if match:
>> |         kind = match.group(1)
>> |         func = match.group(3)
>> | 
>> |         if kind in ["W","C","R"]:
>> |            msg = "Warning"
>> |         else:
>> |            msg = "Error"
>> | 
>> |         if func:
>> |             line = re.sub("\\[([WECR])(, (.+?))?\\]",
>> |                           "%s (%s):" % (msg, func), line)
>> |         else:
>> |             line = re.sub("\\[([WECR])?\\]", "%s:" % msg, line)
>> |     print line,
>> | 
>> | p.close()
>> `----
>>
>
> OK, its done so that you need to (yuck!) hover your mouse over the
> hilited error. Kind of in the face of keyboard driven emacs, but at
> least one can see the error. If anyone has a patch/fix/advice on how to
> change this to show the errors in a buffer and maybe next error/previous
> error then that would be great. In fact pylint.el does something like
> that but it would be nice in conjunction with the flymake dynamic code
> checking and error hiliting.
>

A more careful read of the flymake wiki page 

http://www.emacswiki.org/emacs/FlyMake

provided the answer:

http://paste.lisp.org/display/60617

,----
| (defun show-fly-err-at-point ()
|   "If the cursor is sitting on a flymake error, display the
| message in the minibuffer"
|   (interactive)
|   (let ((line-no (line-number-at-pos)))
|     (dolist (elem flymake-err-info)
|       (if (eq (car elem) line-no)
|         (let ((err (car (second elem))))
|           (message "%s" (fly-pyflake-determine-message err)))))))
| 
| (defun fly-pyflake-determine-message (err)
|   "pyflake is flakey if it has compile problems, this adjusts the
| message to display, so there is one ;)"
|   (cond ((not (or (eq major-mode 'Python) (eq major-mode 'python-mode) t)))
|       ((null (flymake-ler-file err))
|        ;; normal message do your thing
|        (flymake-ler-text err))
|       (t ;; could not compile err
|        (format "compile error, problem on line %s" (flymake-ler-line err)))))
| 
| (defadvice flymake-goto-next-error (after display-message activate compile)
|   "Display the error in the mini-buffer rather than having to mouse over it"
|   (show-fly-err-at-point))
| 
| (defadvice flymake-goto-prev-error (after display-message activate compile)
|   "Display the error in the mini-buffer rather than having to mouse over it"
|   (show-fly-err-at-point))
| 
| (defadvice flymake-mode (before post-command-stuff activate compile)
|   "Add functionality to the post command hook so that if the
| cursor is sitting on a flymake error the error information is
| displayed in the minibuffer (rather than having to mouse over
| it)"
|   (set (make-local-variable 'post-command-hook)
|        (cons 'show-fly-err-at-point post-command-hook))) 
`----


(I think this should be default behaviour as most Emacs users balk from
using the mouse :-;)






reply via email to

[Prev in Thread] Current Thread [Next in Thread]