LanX has asked for the wisdom of the Perl Monks concerning the following question:
use Carp; sub tst1 { carp "bla"; } sub tst2 { tst1() } tst2();
and running M-x mode-compile
I'm getting this output in the compilation window
-*- mode: compilation; default-directory: "~/" -*- Compilation started at Thu Aug 11 01:37:03C:/Perl_64/bin\perl.exe -w d:/Users/LanX/AppData/Roaming/tst_carp.pl bla at d:/Users/LanX/AppData/Roaming/tst_carp.pl line 8. main::tst1() called at d:/Users/LanX/AppData/Roaming/tst_carp.pl line 12 main::tst2() called at d:/Users/LanX/AppData/Roaming/tst_carp.pl line 15
Compilation finished at Thu Aug 11 01:37:03
Please note that in the last two lines the last digit of the line number (marked blue) is missing.
This means, when I try navigating to the error-line (like clicking) I'll always land in the line 1 instead of 12 or 15.
I nailed down the problem to this part of mode-compile.el and added a regex to match line numbers followed by newlines
(defvar perl-compilation-error-regexp-alist ;; Contributed by Martin Jost '( ;; PERL 4 ("in file \\([^ ]+\\) at line \\([0-9]+\\).*" 1 2) ;; PERL 5 Blubber at FILE line XY, <XY> line ab. ("at \\([^ ]+\\) line \\([0-9]+\\)," 1 2) ;; PERL 5 Blubber at FILE line XY. ("at \\([^ ]+\\) line \\([0-9]+\\)." 1 2) ;; PERL 5 Blubber at FILE line XY ("at \\([^ ]+\\) line \\([0-9]+\\)\n" 1 2) ; <--- added by LanX ) ;; This look like a paranoiac regexp: could anybody find a better on +e? (which WORK). ;;'(("^[^\n]* \\(file\\|at\\) \\([^ \t\n]+\\) [^\n]*line \\([0-9]+\\ +)[\\.,]" 2 3)) "Alist that specifies how to match errors in perl output.
The snippet about a "paranoic regexp" was taken from an old version of cperl-mode.el which now DOES match the newline
from cperl-mode.el 6.2
;; NB as it stands the code in cperl-mode assumes this only has one ;; element. If XEmacs 19 support were dropped, this could all be simpl +ified. (defvar cperl-compilation-error-regexp-alist ;; This look like a paranoiac regexp: could anybody find a better on +e? (which WORKS). '(("^[^\n]* \\(file\\|at\\) \\([^ \t\n]+\\) [^\n]*line \\([0-9]+\\)[ +\\., \n]" 2 3)) "Alist that specifies how to match errors in perl output.")
please note now its cperl-compilation-error-regexp-alist not perl-compilation-error-regexp-alist
Now my questions:
Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Je suis Charlie!
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: [emacs] mode-compile with carp output buggy
by Erez (Priest) on Aug 11, 2016 at 07:22 UTC | |
by LanX (Saint) on Aug 11, 2016 at 09:25 UTC | |
by Erez (Priest) on Aug 11, 2016 at 10:23 UTC |