GNU logs - #5911, boring messages


Message sent to owner <at> debbugs.gnu.org, bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#5911: flymake.el - enhancement request - flymake-goto-next-error should go to the column, if possible
Resent-From: "D Chiesa" <dpchiesa@HIDDEN>
Original-Sender: debbugs-submit-bounces <at> debbugs.gnu.org
Resent-To: owner <at> debbugs.gnu.org
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Fri, 09 Apr 2010 05:56:01 +0000
Resent-Message-ID: <handler.5911.B.127079254310870 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: report 5911
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: 5911 <at> debbugs.gnu.org
X-Debbugs-Original-To: <bug-gnu-emacs@HIDDEN>
Received: via spool by submit <at> debbugs.gnu.org id=B.127079254310870
          (code B ref -1); Fri, 09 Apr 2010 05:56:01 +0000
Received: (at submit) by debbugs.gnu.org; 9 Apr 2010 05:55:43 +0000
Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.69)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1O07Bu-0002pH-Pp
	for submit <at> debbugs.gnu.org; Fri, 09 Apr 2010 01:55:43 -0400
Received: from mx10.gnu.org ([199.232.76.166])
	by debbugs.gnu.org with esmtp (Exim 4.69)
	(envelope-from <dpchiesa@HIDDEN>) id 1O07Bs-0002pC-27
	for submit <at> debbugs.gnu.org; Fri, 09 Apr 2010 01:55:40 -0400
Received: from lists.gnu.org ([199.232.76.165]:37694)
	by monty-python.gnu.org with esmtps
	(TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60)
	(envelope-from <dpchiesa@HIDDEN>) id 1O07Bo-0007kZ-Nt
	for submit <at> debbugs.gnu.org; Fri, 09 Apr 2010 01:55:36 -0400
Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43)
	id 1O07Bo-0000xd-4O
	for bug-gnu-emacs@HIDDEN; Fri, 09 Apr 2010 01:55:36 -0400
Received: from [140.186.70.92] (port=53323 helo=eggs.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.43) id 1O07Bk-0000ws-Gq
	for bug-gnu-emacs@HIDDEN; Fri, 09 Apr 2010 01:55:33 -0400
X-Spam-Checker-Version: SpamAssassin 3.3.0 (2010-01-18) on eggs.gnu.org
X-Spam-Level: ***
X-Spam-Status: No, score=3.3 required=5.0 tests=BAYES_50,FREEMAIL_FROM,
	RCVD_IN_DNSWL_NONE, RECEIVED_FROM_WINDOWS_HOST,
	T_RP_MATCHES_RCVD autolearn=no version=3.3.0
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69)
	(envelope-from <dpchiesa@HIDDEN>) id 1O07Bj-0002No-4q
	for bug-gnu-emacs@HIDDEN; Fri, 09 Apr 2010 01:55:32 -0400
Received: from col0-omc1-s5.col0.hotmail.com ([65.55.34.15]:63288)
	by eggs.gnu.org with esmtp (Exim 4.69)
	(envelope-from <dpchiesa@HIDDEN>) id 1O07Bi-0002Nd-QT
	for bug-gnu-emacs@HIDDEN; Fri, 09 Apr 2010 01:55:31 -0400
Received: from COL124-DS24 ([65.55.34.7]) by col0-omc1-s5.col0.hotmail.com
	with Microsoft SMTPSVC(6.0.3790.3959); 
	Thu, 8 Apr 2010 22:45:02 -0700
X-Originating-IP: [98.111.252.155]
X-Originating-Email: [dpchiesa@HIDDEN]
Message-ID: <COL124-DS2453D5BABC985CF656DF92CE150@HIDDEN>
From: "D Chiesa" <dpchiesa@HIDDEN>
Date: Fri, 9 Apr 2010 01:44:59 -0400
MIME-Version: 1.0
Content-Type: text/plain; format=flowed; charset="iso-8859-1";
	reply-type=response
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Mailer: Microsoft Windows Live Mail 14.0.8089.726
X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8089.726
X-OriginalArrivalTime: 09 Apr 2010 05:45:02.0044 (UTC)
	FILETIME=[CC4AB9C0:01CAD7A7]
X-detected-operating-system: by eggs.gnu.org: Windows 2000 SP4, XP SP1+
X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6,
	seldom 2.4 (older, 4)
X-Spam-Score: -5.1 (-----)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.11
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
	<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <http://debbugs.gnu.org/pipermail/debbugs-submit>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
	<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Sender: debbugs-submit-bounces <at> debbugs.gnu.org
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
X-Spam-Score: -5.7 (-----)

I use emacs v22.2.1 on Windows.

Flymake relies on compilation error patterns, similar to 
compilation-error-regexp-alist , to detect errors and warnings.
But flymake discards column information for any errors, and as a result, 
the functions flymake-goto-next-error and flymake-goto-prev-error do not 
position the cursor on the error column.

This discards useful information, and also makes it more difficult to add 
enhancements to flymake - such as the ability to offer a menu of "quick 
fixes" that can be applied on the spot, through 
flymake-display-err-menu-for-current-line .

The fix is to:

1- modify the flymake-ler struct, like so:

(defstruct (flymake-ler
            (:constructor nil)
            ;; cheeso = 2010 apr 8 - add col-no field
            (:constructor flymake-ler-make-ler (file line type text 
&optional full-file col-no)))
  file line type text full-file col-no)

2- modify the flymake-ler functions, accordingly

(defun flymake-ler-set-file (line-err-info file)
  (flymake-ler-make-ler file
                        (flymake-ler-line line-err-info)
                        (flymake-ler-type line-err-info)
                        (flymake-ler-text line-err-info)
                        (flymake-ler-full-file line-err-info)
                        ;; cheeso - 2010 apr 8
                        (flymake-ler-col-no line-err-info)
                        ))

(defun flymake-ler-set-full-file (line-err-info full-file)
  (flymake-ler-make-ler (flymake-ler-file line-err-info)
                        (flymake-ler-line line-err-info)
                        (flymake-ler-type line-err-info)
                        (flymake-ler-text line-err-info)
                        full-file
                        ;; cheeso - 2010 apr 8
                        (flymake-ler-col-no line-err-info)
                        ))

(defun flymake-ler-set-line (line-err-info line)
  (flymake-ler-make-ler (flymake-ler-file line-err-info)
                        line
                        (flymake-ler-type line-err-info)
                        (flymake-ler-text line-err-info)
                        (flymake-ler-full-file line-err-info)
                        ;; cheeso - 2010 apr 8
                        (flymake-ler-col-no line-err-info)
                        ))

3- modify   flymake-parse-line  to capture the column number, and store it 
in the flymake-ler struct that is created. (same as line-no, but use index 
3, instead of 2)

(defun flymake-parse-line (line)
  "Parse LINE to see if it is an error or warning.
Return its components if so, nil otherwise."
  (let ((raw-file-name nil)
        (line-no 0)
        (col-no 0)
        (err-type "e")
        (err-text nil)
        (patterns flymake-err-line-patterns)
        (matched nil))
    (while (and patterns (not matched))
      (when (string-match (car (car patterns)) line)
        (let* ((file-idx (nth 1 (car patterns)))
               (line-idx (nth 2 (car patterns)))
               (col-idx (nth 3 (car patterns)))
               )
          (setq raw-file-name (if file-idx (match-string file-idx line) 
nil))
          (setq line-no       (if line-idx (string-to-number (match-string 
line-idx line)) 0))
          (setq col-no        (if col-idx  (string-to-number (match-string 
col-idx line)) 0))
          (setq err-text      (if (> (length (car patterns)) 4)
                                  (match-string (nth 4 (car patterns)) line)
                                (flymake-patch-err-text (substring line 
(match-end 0)))))
          (or err-text (setq err-text "<no error text>"))
          (if (and err-text (string-match "^[wW]arning" err-text))
              (setq err-type "w")
            )
          (flymake-log 3 "parse line: file-idx=%s line-idx=%s file=%s 
line=%s text=%s" file-idx line-idx
                       raw-file-name line-no err-text)
          (setq matched t)))
      (setq patterns (cdr patterns)))
    (if matched
        ;; cheeso
        ;;(flymake-ler-make-ler raw-file-name line-no err-type err-text)
        (flymake-ler-make-ler raw-file-name line-no err-type err-text nil 
col-no)
      ())))


4 - introduce new fn flymake-er-get-line-col , which returns (LINE COL) for 
the error.

(defun flymake-er-get-line-col (err-info)
  (list (nth 0 err-info)
        (flymake-ler-col-no (car (nth 1 err-info))) ;; xxxx
        ))

5- transform all fns that get line number info, to get line+col info:

(defun flymake-get-first-err-line-col (err-info-list)
  "Return first line with error."
  (when err-info-list
    (flymake-er-get-line-col (car err-info-list))))

(defun flymake-get-last-err-line-col (err-info-list)
  "Return last line with error."
  (when err-info-list
    (flymake-er-get-line-col (nth (1- (length err-info-list)) 
err-info-list))))

(defun flymake-get-next-err-line-col (err-info-list line-no)
  "Return next line with error."
  (when err-info-list
    (let* ((count  (length err-info-list))
           (idx    0))
      (while (and (< idx count) (>= line-no (flymake-er-get-line (nth idx 
err-info-list))))
        (setq idx (1+ idx)))
      (if (< idx count)
          (flymake-er-get-line-col (nth idx err-info-list))))))

(defun flymake-get-prev-err-line-col (err-info-list line-no)
  "Return previous line with error."
  (when err-info-list
    (let* ((count (length err-info-list)))
      (while (and (> count 0) (<= line-no (flymake-er-get-line (nth (1- 
count) err-info-list))))
        (setq count (1- count)))
      (if (> count 0)
          (flymake-er-get-line-col (nth (1- count) err-info-list))))))


6- modify flymake-goto-next-error to use the column information

(defun flymake-goto-next-error ()
  "Go to next error in error ring. Return (LINE COL), or nil if there are no 
errors."
  (interactive)
  (let* ((line-col (flymake-get-next-err-line-col flymake-err-info 
(flymake-current-line-no)))
         (line-no (car line-col))
         (col-no  (cadr line-col))
        )
    (when (not line-no)
      (setq line-col (flymake-get-first-err-line-col flymake-err-info))
      (setq line-no (car line-col)
            col-no  (cadr line-col))
      (flymake-log 1 "passed end of file"))
    (if line-no
        (flymake-goto-line line-col)
      (flymake-log 1 "no errors in current buffer"))))

7- same for flymake-goto-prev-error

(defun flymake-goto-prev-error ()
  "Go to previous error in err ring."
  (interactive)
  (let* ((line-col (flymake-get-prev-err-line-col flymake-err-info 
(flymake-current-line-no)))
         (line-no (car line-col))
         (col-no  (cadr line-col))
        )
    (when (not line-no)
        (setq line-col (flymake-get-last-err-line-col flymake-err-info))
        (setq line-no (car line-col)
              col-no  (cadr line-col))
        (flymake-log 1 "passed beginning of file"))
    (if line-no
        (flymake-goto-line line-col)
      (flymake-log 1 "no errors in current buffer"))))

8- modify flymake-goto-line to accept a (LINE COL) list, and act accordingly

(defun flymake-goto-line (line-col)
  "LINE-COL contains (LINE-NO COL-NO). Go to line LINE-NO, then skip to the 
COL-NO column."
  (let ((line-no (car line-col))
        (col-no (cadr line-col))
        )
    (goto-line line-no)
    (when col-no
      (while (> col-no 1)
        (setq col-no (1- col-no))
        (forward-char))))
  line-col)


-Dino Chiesa
 






Message sent:


Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Mailer: MIME-tools 5.427 (Entity 5.427)
Content-Type: text/plain; charset=utf-8
X-Loop: help-debbugs@HIDDEN
From: help-debbugs@HIDDEN (GNU bug Tracking System)
To: "D Chiesa" <dpchiesa@HIDDEN>
Subject: bug#5911: Acknowledgement (flymake.el - enhancement request -
 flymake-goto-next-error should go to the column, if possible)
Message-ID: <handler.5911.B.127079254310870.ack <at> debbugs.gnu.org>
References: <COL124-DS2453D5BABC985CF656DF92CE150@HIDDEN>
X-Gnu-PR-Message: ack 5911
X-Gnu-PR-Package: emacs
Reply-To: 5911 <at> debbugs.gnu.org
Date: Fri, 09 Apr 2010 05:56:02 +0000

Thank you for filing a new bug report with GNU.

This is an automatically generated reply to let you know your message
has been received.

Your message is being forwarded to the package maintainers and other
interested parties for their attention; they will reply in due course.

Your message has been sent to the package maintainer(s):
 bug-gnu-emacs@HIDDEN

If you wish to submit further information on this problem, please
send it to 5911 <at> debbugs.gnu.org.

Please do not send mail to help-debbugs@HIDDEN unless you wish
to report a problem with the Bug-tracking system.

--=20
5911: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D5911
GNU Bug Tracking System
Contact help-debbugs@HIDDEN with problems


Message received at control <at> debbugs.gnu.org:


Received: (at control) by debbugs.gnu.org; 14 Jun 2011 19:39:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Jun 14 15:39:04 2011
Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.69)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1QWZS3-00043C-GK
	for submit <at> debbugs.gnu.org; Tue, 14 Jun 2011 15:39:03 -0400
Received: from fencepost.gnu.org ([140.186.70.10])
	by debbugs.gnu.org with esmtp (Exim 4.69)
	(envelope-from <rgm@HIDDEN>) id 1QWZS2-00042k-4F
	for control <at> debbugs.gnu.org; Tue, 14 Jun 2011 15:39:02 -0400
Received: from rgm by fencepost.gnu.org with local (Exim 4.71)
	(envelope-from <rgm@HIDDEN>) id 1QWZRw-0001JG-UQ
	for control <at> debbugs.gnu.org; Tue, 14 Jun 2011 15:38:57 -0400
Date: Tue, 14 Jun 2011 15:38:56 -0400
Message-Id: <E1QWZRw-0001JG-UQ@HIDDEN>
Subject: control message for bug 8723
To: <control <at> debbugs.gnu.org>
X-Mailer: mail (GNU Mailutils 2.1)
From: Glenn Morris <rgm@HIDDEN>
X-Spam-Score: -6.3 (------)
X-Debbugs-Envelope-To: control
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.11
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
	<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <http://debbugs.gnu.org/pipermail/debbugs-submit>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
	<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Sender: debbugs-submit-bounces <at> debbugs.gnu.org
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
X-Spam-Score: -6.3 (------)

merge 5911 8723





Last modified: Mon, 25 Nov 2019 12:00:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.