[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Flymake refactored
From: |
Mark Oteiza |
Subject: |
Re: Flymake refactored |
Date: |
Thu, 05 Oct 2017 17:22:02 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.0.60 (gnu/linux) |
address@hidden (João Távora) writes:
> Mark Oteiza <address@hidden> writes:
>> I also seem to have problems using the column number (match-string 2)
>> and so it is left unused.
>
> The problem is that you are calling flymake-diag-region in the wrong
> buffer. It has to be the source buffer, so in your case you need a
> (with-current-buffer source ...) around it.
>
> But that inconvenience has been fixed in the very latest code emacs-26
> branch. In that version, you just pass 'source' (the c/c++ buffer) to
> flymake-diag-region.
Ah, thank you.
> I've built a backend very similar to yours but base on gcc (clang is
> 500MB and no time for that right now). Have a look, below my sig.
Nice. Adding to the pile, a LaTeX checker with chktex below.
> I've also noticed, there's a lot of repetition building up in these
> examples. Later it's probably useful to invent an abstraction that hides
> it away.
At first sight it looks like the much of the sentinel contents could be
abstracted away in something like compilation mode's error regexp alists
;;; flymake-chktex.el --- Flymake backend for chktex(1) -*- lexical-binding: t
-*-
;;; Code:
(defgroup flymake-chktex ()
"Flymake backend for chktex"
:link '(url-link "http://www.nongnu.org/chktex/")
:group 'flymake)
(defcustom flymake-chktex-program "chktex"
"Program."
:type 'string
:group 'flymake-chktex)
(defvar-local flymake-chktex--process nil)
(defun flymake-chktex-command (program)
`(,program "--quiet" "--verbosity=0" "--inputfiles"))
(defun flymake-chktex (report-fn &rest _args)
(unless (executable-find flymake-chktex-program)
(error "Cannot find a suitable chktex"))
(when (process-live-p flymake-chktex--process)
(kill-process flymake-chktex--process))
(let ((source (current-buffer)))
(save-restriction
(widen)
(setq flymake-chktex--process
(make-process
:name "flymake-chktex"
:buffer (generate-new-buffer "*flymake-chktex*")
:command (flymake-chktex-command flymake-chktex-program)
:noquery t :connection-type 'pipe
:sentinel
(lambda (process _event)
(unwind-protect
(when (eq process flymake-chktex--process)
(with-current-buffer (process-buffer process)
(goto-char (point-min))
(cl-loop
while (search-forward-regexp
"^stdin:\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\):\\(.*\\)$"
nil t)
for msg = (match-string 4)
for (beg . end) = (flymake-diag-region source
(string-to-number (match-string 1))
(string-to-number (match-string 2)))
collect (flymake-make-diagnostic source beg end
:warning msg)
into diags
finally (funcall report-fn diags))))
(kill-buffer (process-buffer process))))))
(process-send-region flymake-chktex--process (point-min) (point-max))
(process-send-eof flymake-chktex--process))))
(defun flymake-chktex-register ()
(add-hook 'flymake-diagnostic-functions 'flymake-chktex nil t))
(add-hook 'plain-tex-mode-hook 'flymake-chktex-register)
(add-hook 'latex-mode-hook 'flymake-chktex-register)
(add-hook 'bibtex-mode-hook 'flymake-chktex-register)
(provide 'flymake-chktex)
;;; flymake-chktex.el ends here
- Re: Flymake refactored, (continued)
Re: Flymake refactored, Simen Heggestøyl, 2017/10/04
- Re: Flymake refactored, João Távora, 2017/10/04
- Re: Flymake refactored, Mark Oteiza, 2017/10/04
- Re: Flymake refactored, João Távora, 2017/10/05
- Re: Flymake refactored, Stefan Monnier, 2017/10/05
- Re: Flymake refactored, João Távora, 2017/10/05
- Re: Flymake refactored, João Távora, 2017/10/05
Re: Flymake refactored,
Mark Oteiza <=
Re: Flymake refactored, João Távora, 2017/10/05
Re: Flymake refactored, Stefan Monnier, 2017/10/05
Re: Flymake refactored, Lele Gaifax, 2017/10/06
Re: Flymake refactored, Eli Zaretskii, 2017/10/06
Re: Flymake refactored, Lele Gaifax, 2017/10/06
Re: Flymake refactored, Eli Zaretskii, 2017/10/06
Re: Flymake refactored, Lele Gaifax, 2017/10/06
Re: Flymake refactored, Mark Oteiza, 2017/10/06
Re: Flymake refactored, Lele Gaifax, 2017/10/06
Re: Flymake refactored, Mark Oteiza, 2017/10/06