[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#61093: Indented file names confuse compilation buffer
From: |
Rudolf Schlatte |
Subject: |
bug#61093: Indented file names confuse compilation buffer |
Date: |
Fri, 27 Jan 2023 17:23:52 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.2 (darwin) |
Mattias Engdegård <mattias.engdegard@gmail.com> writes:
>> I think it might be ok to ignore leading whitespace, because file
>> names do not start very often with whitespace.
>
> The story goes like this: a tool uses a modification of the GNU message
> format and its users then expect Emacs to conform to that variant.
>
> The problem with doing that is that each little tweak makes the compilation
> message rules less robust and more likely to collide with one another and
> become slower. There are about 60 regexps now, most of which are used by very
> few people, and we keep adding. Build logs can become quite long so
> performance is not unimportant.
>
> Maybe it's safe to accept and ignore not arbitrary leading whitespace but a
> single tab, which your tool seems to emit. Or you could ask those making it
> to cease emitting the tab.
>
> You could also put your own rule in compilation-regexp-alist. It might look
> like this:
>
> ;; Message pattern for ancillary locations (notes) from the Go compiler
> (let ((rule
> `(go-note
> ,(rx bol "\t"
> (group ; 1: hyperlink
> (group ; 2: file
> (not (in " \t\n:"))
> (* (not (in "\t\n"))))
> ":"
> (group (+ digit)) ; 3: line
> ":"
> (group (+ digit)) ; 4: column
> ":")
> " "
> (+ nonl)) ; message
> 2 3 4 0 1)))
> (setq compilation-error-regexp-alist-alist
> (remq (assq 'go-note compilation-error-regexp-alist-alist)
> compilation-error-regexp-alist-alist))
> (push rule compilation-error-regexp-alist-alist)
> (setq compilation-error-regexp-alist
> (remq 'go-note compilation-error-regexp-alist))
> (push 'go-note compilation-error-regexp-alist))
Is there a way for an emacs mode to add mode-specific values to
compilation-error-regexp-alist(-alist)? If a major mode starts
compilation, presumably it knows the error message format and could set
up that one compilation buffer accordingly without having to add to
global error message parsing.