* Regexp linting scan
@ 2019-12-01 22:20 Mattias Engdegård
2019-12-02 10:14 ` Richard Copley
0 siblings, 1 reply; 11+ messages in thread
From: Mattias Engdegård @ 2019-12-01 22:20 UTC (permalink / raw)
To: Emacs developers
[-- Attachment #1: Type: text/plain, Size: 111 bytes --]
Another scan for regexp mistakes, based on a slightly improved detector that finds more nested repetitions.
[-- Attachment #2: relint.log --]
[-- Type: application/octet-stream, Size: 137572 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Regexp linting scan
2019-12-01 22:20 Mattias Engdegård
@ 2019-12-02 10:14 ` Richard Copley
2019-12-02 10:19 ` Mattias Engdegård
0 siblings, 1 reply; 11+ messages in thread
From: Richard Copley @ 2019-12-02 10:14 UTC (permalink / raw)
To: Mattias Engdegård; +Cc: Emacs developers
[-- Attachment #1: Type: text/plain, Size: 283 bytes --]
On Sun, 1 Dec 2019 at 22:42, Mattias Engdegård <mattiase@acm.org> wrote:
> Another scan for regexp mistakes, based on a slightly improved detector
> that finds more nested repetitions.
>
Hi Mattias,
Many of these are already fixed, on master. Did you scan the wrong tree?
[-- Attachment #2: Type: text/html, Size: 599 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Regexp linting scan
2019-12-02 10:14 ` Richard Copley
@ 2019-12-02 10:19 ` Mattias Engdegård
2019-12-05 0:57 ` Paul Eggert
0 siblings, 1 reply; 11+ messages in thread
From: Mattias Engdegård @ 2019-12-02 10:19 UTC (permalink / raw)
To: Richard Copley; +Cc: Emacs developers
[-- Attachment #1: Type: text/plain, Size: 200 bytes --]
2 dec. 2019 kl. 11.14 skrev Richard Copley <rcopley@gmail.com>:
> Many of these are already fixed, on master. Did you scan the wrong tree?
Wrong file attached, my apologies. Here is the right one.
[-- Attachment #2: relint.log --]
[-- Type: application/octet-stream, Size: 1111 bytes --]
-*- compilation -*-
lisp/gnus/gnus-util.el:1577:21: In call to string-match: Repetition of repetition (pos 14)
"^\\(\\([.0-9]+\\)*\\)\\.[0-9]+$"
.................^
lisp/mail/rfc2368.el:64:3: In rfc2368-mailto-regexp: Repetition of repetition (pos 21)
"^\\(mailto:\\)\\([^?]+\\)*\\(\\?\\(.*\\)\\)*"
.........................^
lisp/net/tramp-sh.el:3800:16: In call to string-match: Repetition of repetition (pos 43)
"^[^[:blank:]]+[[:blank:]]+\\([^[:blank:]]+\\)+\\([[:blank:]]+\\([^\n\r]+\\)\\)?"
.............................................^
lisp/obsolete/terminal.el:1169:33: In call to string-match: Repetition of repetition (pos 33)
"\\([-a-zA-Z0-9+=_.@/:]+\\)\\([ \t]+\\)*"
......................................^
lisp/org/org-table.el:2011:19: In call to looking-at: Repetition of repetition (pos 9)
"\\([^|]+\\)+|"
...........^
lisp/progmodes/verilog-mode.el:10976:60: In call to verilog-re-search-forward-quick: Repetition of repetition (pos 25)
"\\.\\s *\\([a-zA-Z0-9`_$]+\\)*\\s *(\\s *\\1\\s *)\\s *"
.............................^
Finished -- 6 errors (2 suppressed).
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Regexp linting scan
2019-12-02 10:19 ` Mattias Engdegård
@ 2019-12-05 0:57 ` Paul Eggert
2019-12-05 2:10 ` Michael Welsh Duggan
2019-12-05 10:21 ` Mattias Engdegård
0 siblings, 2 replies; 11+ messages in thread
From: Paul Eggert @ 2019-12-05 0:57 UTC (permalink / raw)
To: Mattias Engdegård, Richard Copley; +Cc: Emacs developers
[-- Attachment #1: Type: text/plain, Size: 48 bytes --]
Thanks for the scan; I installed the attached.
[-- Attachment #2: 0001-Fix-regex-repetition-of-repetitions.patch --]
[-- Type: text/x-patch, Size: 4276 bytes --]
From ab612302b4917fec5846922f3d8ffafa673c0d36 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Wed, 4 Dec 2019 16:53:39 -0800
Subject: [PATCH] Fix regex repetition of repetitions
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Problems reported by Mattias Engdegård in:
https://lists.gnu.org/r/emacs-devel/2019-12/msg00066.html
* lisp/gnus/gnus-util.el (gnus-emacs-version):
* lisp/mail/rfc2368.el (rfc2368-mailto-regexp):
* lisp/net/tramp-sh.el (tramp-sh-inotifywait-process-filter):
* lisp/obsolete/terminal.el (te-parse-program-and-args):
* lisp/org/org-table.el (org-table-wrap-region):
* lisp/progmodes/verilog-mode.el (verilog-inject-inst):
Avoid repetition-of-repetition in regexp.
---
lisp/gnus/gnus-util.el | 2 +-
lisp/mail/rfc2368.el | 2 +-
lisp/net/tramp-sh.el | 2 +-
lisp/obsolete/terminal.el | 2 +-
lisp/org/org-table.el | 2 +-
lisp/progmodes/verilog-mode.el | 2 +-
6 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 8e390473aa..42021d3073 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -1574,7 +1574,7 @@ gnus-emacs-version
(cond
((not (memq 'emacs lst))
nil)
- ((string-match "^\\(\\([.0-9]+\\)*\\)\\.[0-9]+$" emacs-version)
+ ((string-match "^[.0-9]*\\.[0-9]+$" emacs-version)
(concat "Emacs/" emacs-version
(if system-v
(concat " (" system-v ")")
diff --git a/lisp/mail/rfc2368.el b/lisp/mail/rfc2368.el
index 05f27e4d99..b658ffab58 100644
--- a/lisp/mail/rfc2368.el
+++ b/lisp/mail/rfc2368.el
@@ -61,7 +61,7 @@
;; only an approximation?
;; see rfc 1738
(defconst rfc2368-mailto-regexp
- "^\\(mailto:\\)\\([^?]+\\)*\\(\\?\\(.*\\)\\)*"
+ "^\\(mailto:\\)\\([^?]+\\)?\\(\\?\\(.*\\)\\)*"
"Regular expression to match and aid in parsing a mailto url.")
;; describes 'mailto:'
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 59a93a839e..2aef6ea10f 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -3799,7 +3799,7 @@ tramp-sh-inotifywait-process-filter
(unless (string-match
(eval-when-compile
(concat "^[^[:blank:]]+"
- "[[:blank:]]+\\([^[:blank:]]+\\)+"
+ "[[:blank:]]+\\([^[:blank:]]+\\)"
"\\([[:blank:]]+\\([^\n\r]+\\)\\)?"))
line)
(tramp-error proc 'file-notify-error "%s" line))
diff --git a/lisp/obsolete/terminal.el b/lisp/obsolete/terminal.el
index ce6f2309fd..c12d225bef 100644
--- a/lisp/obsolete/terminal.el
+++ b/lisp/obsolete/terminal.el
@@ -1166,7 +1166,7 @@ te-parse-program-and-args
(let ((l ()) (p 0))
(while p
(setq l (cons (if (string-match
- "\\([-a-zA-Z0-9+=_.@/:]+\\)\\([ \t]+\\)*"
+ "\\([-a-zA-Z0-9+=_.@/:]+\\)[ \t]*"
s p)
(prog1 (substring s p (match-end 1))
(setq p (match-end 0))
diff --git a/lisp/org/org-table.el b/lisp/org/org-table.el
index a21587acbe..5f42db5068 100644
--- a/lisp/org/org-table.el
+++ b/lisp/org/org-table.el
@@ -4642,7 +4642,7 @@ org-table-wrap-region
(skip-chars-backward " ")
(insert " " (org-trim s))
(org-table-align)))
- ((looking-at "\\([^|]+\\)+|") ; Split field.
+ ((looking-at "\\([^|]+\\)|") ; Split field.
(let ((s (match-string 1)))
(replace-match " |")
(goto-char (match-beginning 0))
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index 0afbdc3dd1..6ec8d995c1 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -10973,7 +10973,7 @@ verilog-inject-inst
(t
;; Delete identical interconnect
(let ((case-fold-search nil)) ; So we don't convert upper-to-lower, etc
- (while (verilog-re-search-forward-quick "\\.\\s *\\([a-zA-Z0-9`_$]+\\)*\\s *(\\s *\\1\\s *)\\s *" end-pt t)
+ (while (verilog-re-search-forward-quick "\\.\\s *\\([a-zA-Z0-9`_$]+\\)?\\s *(\\s *\\1\\s *)\\s *" end-pt t)
(delete-region (match-beginning 0) (match-end 0))
(setq end-pt (- end-pt (- (match-end 0) (match-beginning 0)))) ; Keep it correct
(while (or (looking-at "[ \t\n\f,]+")
--
2.23.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: Regexp linting scan
2019-12-05 0:57 ` Paul Eggert
@ 2019-12-05 2:10 ` Michael Welsh Duggan
2019-12-05 11:38 ` Mattias Engdegård
2019-12-05 10:21 ` Mattias Engdegård
1 sibling, 1 reply; 11+ messages in thread
From: Michael Welsh Duggan @ 2019-12-05 2:10 UTC (permalink / raw)
To: Paul Eggert; +Cc: Richard Copley, Mattias Engdegård, Emacs developers
Paul Eggert <eggert@cs.ucla.edu> writes:
> Thanks for the scan; I installed the attached.
>
> diff --git a/lisp/mail/rfc2368.el b/lisp/mail/rfc2368.el
> index 05f27e4d99..b658ffab58 100644
> --- a/lisp/mail/rfc2368.el
> +++ b/lisp/mail/rfc2368.el
> @@ -61,7 +61,7 @@
> ;; only an approximation?
> ;; see rfc 1738
> (defconst rfc2368-mailto-regexp
> - "^\\(mailto:\\)\\([^?]+\\)*\\(\\?\\(.*\\)\\)*"
> + "^\\(mailto:\\)\\([^?]+\\)?\\(\\?\\(.*\\)\\)*"
> "Regular expression to match and aid in parsing a mailto url.")
>
> ;; describes 'mailto:'
Wouldn't "^\\(mailto:\\)\\([^?]*\\)\\(\\?\\(.*\\)\\)*" make more sense?
Maybe even without the grouping, as it doesn't seem to be used. If I'm
not mistaken (and I might be) this matches "mailto:" followed by anything
as long as it contains at most one question mark.
> diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
> index 0afbdc3dd1..6ec8d995c1 100644
> --- a/lisp/progmodes/verilog-mode.el
> +++ b/lisp/progmodes/verilog-mode.el
> @@ -10973,7 +10973,7 @@ verilog-inject-inst
> (t
> ;; Delete identical interconnect
> (let ((case-fold-search nil)) ; So we don't convert upper-to-lower, etc
> - (while (verilog-re-search-forward-quick "\\.\\s *\\([a-zA-Z0-9`_$]+\\)*\\s *(\\s *\\1\\s *)\\s *" end-pt t)
> + (while (verilog-re-search-forward-quick "\\.\\s *\\([a-zA-Z0-9`_$]+\\)?\\s *(\\s *\\1\\s *)\\s *" end-pt t)
> (delete-region (match-beginning 0) (match-end 0))
> (setq end-pt (- end-pt (- (match-end 0) (match-beginning 0)))) ; Keep it correct
> (while (or (looking-at "[ \t\n\f,]+")
Similarly, in this one I think you could also replace the `+' with a `*'
and leave out the `?'.
--
Michael Welsh Duggan
(md5i@md5i.com)
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Regexp linting scan
2019-12-05 0:57 ` Paul Eggert
2019-12-05 2:10 ` Michael Welsh Duggan
@ 2019-12-05 10:21 ` Mattias Engdegård
1 sibling, 0 replies; 11+ messages in thread
From: Mattias Engdegård @ 2019-12-05 10:21 UTC (permalink / raw)
To: Paul Eggert; +Cc: Richard Copley, Bastien, Emacs developers
5 dec. 2019 kl. 01.57 skrev Paul Eggert <eggert@cs.ucla.edu>:
> Thanks for the scan; I installed the attached.
Thank you, looks very reasonable.
Since repetition of capture groups (like "\\(a.\\)+" is usually a mistake I tried to locate those specifically, but it's hard to know for sure that a group is unused.
Bonus: fresh from newly committed Org changes!
lisp/org/org-agenda.el:7673:40: In call to string-match: Unescaped literal `+' (pos 1)
"^+[-+]"
.^
lisp/org/org.el:7828:34: In call to string-match: Duplicated `\' inside character alternative (pos 12)
"\\`[ \t]*\\([\\+\\-]?[0-9]+\\)\\([dwmy]\\)[ \t]*\\'"
................^
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Regexp linting scan
2019-12-05 2:10 ` Michael Welsh Duggan
@ 2019-12-05 11:38 ` Mattias Engdegård
2019-12-05 12:11 ` Mattias Engdegård
0 siblings, 1 reply; 11+ messages in thread
From: Mattias Engdegård @ 2019-12-05 11:38 UTC (permalink / raw)
To: Michael Welsh Duggan; +Cc: Richard Copley, Paul Eggert, Emacs developers
5 dec. 2019 kl. 03.10 skrev Michael Welsh Duggan <mwd@md5i.com>:
>> - "^\\(mailto:\\)\\([^?]+\\)*\\(\\?\\(.*\\)\\)*"
>> + "^\\(mailto:\\)\\([^?]+\\)?\\(\\?\\(.*\\)\\)*"
>
> Wouldn't "^\\(mailto:\\)\\([^?]*\\)\\(\\?\\(.*\\)\\)*" make more sense?
> Maybe even without the grouping, as it doesn't seem to be used. If I'm
> not mistaken (and I might be) this matches "mailto:" followed by anything
> as long as it contains at most one question mark.
Group 2 is actually used (see rfc2368-mailto-prequery-index). Although your suggested change does not alter the set of matched strings, the code would need to be altered as well, since group 2 would then be the empty string instead of nil when it did not match anything.
(The group around mailto: is harder to justify.)
>> - (while (verilog-re-search-forward-quick "\\.\\s *\\([a-zA-Z0-9`_$]+\\)*\\s *(\\s *\\1\\s *)\\s *" end-pt t)
>> + (while (verilog-re-search-forward-quick "\\.\\s *\\([a-zA-Z0-9`_$]+\\)?\\s *(\\s *\\1\\s *)\\s *" end-pt t)
>
> Similarly, in this one I think you could also replace the `+' with a `*'
> and leave out the `?'.
Group 1 is used in a backref, which only matches if the group matched. With your change, the regexp would match ".()", which isn't matched at present.
The repetition-of-repetition check does not complain about \(X+\)? for these reasons. It is also not a performance concern.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Regexp linting scan
2019-12-05 11:38 ` Mattias Engdegård
@ 2019-12-05 12:11 ` Mattias Engdegård
2019-12-06 3:34 ` Paul Eggert
0 siblings, 1 reply; 11+ messages in thread
From: Mattias Engdegård @ 2019-12-05 12:11 UTC (permalink / raw)
To: Michael Welsh Duggan; +Cc: Richard Copley, Paul Eggert, Emacs developers
5 dec. 2019 kl. 12.38 skrev Mattias Engdegård <mattiase@acm.org>:
>
> 5 dec. 2019 kl. 03.10 skrev Michael Welsh Duggan <mwd@md5i.com>:
>
>>> - (while (verilog-re-search-forward-quick "\\.\\s *\\([a-zA-Z0-9`_$]+\\)*\\s *(\\s *\\1\\s *)\\s *" end-pt t)
>>> + (while (verilog-re-search-forward-quick "\\.\\s *\\([a-zA-Z0-9`_$]+\\)?\\s *(\\s *\\1\\s *)\\s *" end-pt t)
>>
>> Similarly, in this one I think you could also replace the `+' with a `*'
>> and leave out the `?'.
>
> Group 1 is used in a backref, which only matches if the group matched. With your change, the regexp would match ".()", which isn't matched at present.
Correction: the '?' can be removed (keeping the '+') since the \1 is matched unconditionally.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Regexp linting scan
2019-12-05 12:11 ` Mattias Engdegård
@ 2019-12-06 3:34 ` Paul Eggert
0 siblings, 0 replies; 11+ messages in thread
From: Paul Eggert @ 2019-12-06 3:34 UTC (permalink / raw)
To: Mattias Engdegård
Cc: Michael Welsh Duggan, Richard Copley, Emacs developers
[-- Attachment #1: Type: text/plain, Size: 254 bytes --]
On 12/5/19 4:11 AM, Mattias Engdegård wrote:
> Correction: the '?' can be removed (keeping the '+') since the \1 is matched unconditionally.
Thanks, I installed the attached patch to fix that and the two new Org
problems you mentioned today.
[-- Attachment #2: 0001-2019-12-05-regexp-lint-fixes.patch --]
[-- Type: text/x-patch, Size: 2945 bytes --]
From b59a0352c5245ba63ce0be5fd2eec58229e45330 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Thu, 5 Dec 2019 19:31:00 -0800
Subject: [PATCH] 2019-12-05 regexp lint fixes
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* lisp/org/org-agenda.el (org-agenda-filter):
Fix unescaped literal ‘+’ in regexp. Reported by Mattias Engdegård in:
https://lists.gnu.org/r/emacs-devel/2019-12/msg00215.html
* lisp/org/org.el (org-clone-subtree-with-time-shift):
Fix a regexp typo that mishandled strings like ‘\1d’,
reported by the same emaikl.
* lisp/progmodes/verilog-mode.el (verilog-inject-inst):
Omit unnecessary ‘?’ in regexp. Reported by Mattias Engdegård in:
https://lists.gnu.org/r/emacs-devel/2019-12/msg00217.html
---
lisp/org/org-agenda.el | 2 +-
lisp/org/org.el | 2 +-
lisp/progmodes/verilog-mode.el | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/lisp/org/org-agenda.el b/lisp/org/org-agenda.el
index 7cb5cca34c..2404ca43dc 100644
--- a/lisp/org/org-agenda.el
+++ b/lisp/org/org-agenda.el
@@ -7670,7 +7670,7 @@ org-agenda-filter
(if negate "Negative filter" "Filter")
" [+cat-tag<0:10-/regexp/]: ")
'org-agenda-filter-completion-function))
- (keep (or (if (string-match "^+[-+]" f-string)
+ (keep (or (if (string-match "^\\+[+-]" f-string)
(progn (setq f-string (substring f-string 1)) t))
(equal strip-or-accumulate '(16))))
(fc (if keep org-agenda-category-filter))
diff --git a/lisp/org/org.el b/lisp/org/org.el
index b37beeb96a..f25c53caaf 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -7825,7 +7825,7 @@ org-clone-subtree-with-time-shift
""))) ;No time shift
(doshift
(and (org-string-nw-p shift)
- (or (string-match "\\`[ \t]*\\([\\+\\-]?[0-9]+\\)\\([dwmy]\\)[ \t]*\\'"
+ (or (string-match "\\`[ \t]*\\([+-]?[0-9]+\\)\\([dwmy]\\)[ \t]*\\'"
shift)
(user-error "Invalid shift specification %s" shift)))))
(goto-char end-of-tree)
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index 6ec8d995c1..01914aade5 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -10973,7 +10973,7 @@ verilog-inject-inst
(t
;; Delete identical interconnect
(let ((case-fold-search nil)) ; So we don't convert upper-to-lower, etc
- (while (verilog-re-search-forward-quick "\\.\\s *\\([a-zA-Z0-9`_$]+\\)?\\s *(\\s *\\1\\s *)\\s *" end-pt t)
+ (while (verilog-re-search-forward-quick "\\.\\s *\\([a-zA-Z0-9`_$]+\\)\\s *(\\s *\\1\\s *)\\s *" end-pt t)
(delete-region (match-beginning 0) (match-end 0))
(setq end-pt (- end-pt (- (match-end 0) (match-beginning 0)))) ; Keep it correct
(while (or (looking-at "[ \t\n\f,]+")
--
2.23.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Regexp linting scan
@ 2020-01-30 16:16 Mattias Engdegård
2020-02-20 15:13 ` Mattias Engdegård
0 siblings, 1 reply; 11+ messages in thread
From: Mattias Engdegård @ 2020-01-30 16:16 UTC (permalink / raw)
To: Emacs developers
[-- Attachment #1: Type: text/plain, Size: 631 bytes --]
Here is a new scan of regexp irregularities in the Emacs tree (master at 1ed7cd41db), using relint 1.13, xr 1.15.
Relint now finds more regexps, and the xr linting engine has a new subsumption check. This check finds pairs of repetitions, one made unnecessary by the other, like [ab]+a* or a*a*. The check is somewhat experimental, but is accurate enough and not only indicates possible mistakes and general waste but also potential slow regexps.
As an example of the last point, the running time of
(string-match "a*a*b" (make-string N ?a))
is cubical in N. (Not all mistakes are exponential, but it's bad enough.)
[-- Attachment #2: relint.log --]
[-- Type: application/octet-stream, Size: 19818 bytes --]
-*- compilation -*-
Relint results for ~/emacs
lisp/cedet/semantic/grammar.el:1309:8: In comment-start-skip: Duplicated `\' inside character alternative (pos 10)
"\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *"
..............^
lisp/cedet/srecode/srt-mode.el:198:8: In comment-start-skip: Duplicated `\' inside character alternative (pos 10)
"\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *"
..............^
lisp/cedet/data-debug.el:883:8: In comment-start-skip: Duplicated `\' inside character alternative (pos 10)
"\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *"
..............^
lisp/emacs-lisp/lisp-mode.el:431:7: In lisp-el-font-lock-keywords-2 (font-lock-type-face): Escaped non-special character `&' (pos 3)
"\\_<\\&\\(?:\\sw\\|\\s_\\|\\\\.\\)+\\_>"
....^
lisp/emacs-lisp/lisp-mode.el:487:7: In lisp-cl-font-lock-keywords-2 (font-lock-type-face): Escaped non-special character `&' (pos 3)
"\\_<\\&\\(?:\\sw\\|\\s_\\|\\\\.\\)+\\_>"
....^
lisp/emacs-lisp/lisp-mode.el:542:3: In lisp-el-font-lock-keywords-for-backtraces-2 (font-lock-type-face): Escaped non-special character `&' (pos 3)
"\\_<\\&\\(?:\\sw\\|\\s_\\|\\\\.\\)+\\_>"
....^
lisp/emacs-lisp/lisp-mode.el:753:15: In comment-start-skip: Duplicated `\' inside character alternative (pos 10)
"\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *"
..............^
lisp/gnus/deuglify.el:406:14: In call to re-search-forward: Repetition subsumes preceding repetition (pos 19)
"^[>|#% \t]*--* ?[^-]+ [^-]+ ?--*\\s *\n[^\n:]+:[ \t]*\\([^\n]+\\)\n\\([^\n:]+:[ \t]*[^\n]+\n\\)+"
....................^
lisp/gnus/deuglify.el:406:14: In call to re-search-forward: Repetition subsumed by preceding repetition (pos 27)
"^[>|#% \t]*--* ?[^-]+ [^-]+ ?--*\\s *\n[^\n:]+:[ \t]*\\([^\n]+\\)\n\\([^\n:]+:[ \t]*[^\n]+\n\\)+"
............................^
lisp/gnus/deuglify.el:406:14: In call to re-search-forward: Repetition subsumes preceding repetition (pos 76)
"^[>|#% \t]*--* ?[^-]+ [^-]+ ?--*\\s *\n[^\n:]+:[ \t]*\\([^\n]+\\)\n\\([^\n:]+:[ \t]*[^\n]+\n\\)+"
.........................................................................................^
lisp/gnus/message.el:325:3: In message-subject-trailing-was-ask-regexp: Repetition subsumes preceding repetition (pos 32)
"[ \t]*\\([[(]+[Ww][Aa][Ss]:?[ \t]*.*[])]+\\)"
...................................^
lisp/gnus/message.el:340:3: In message-subject-trailing-was-regexp: Repetition subsumes preceding repetition (pos 28)
"[ \t]*\\((*[Ww][Aa][Ss]:[ \t]*.*)\\)"
...............................^
lisp/gnus/message.el:2271:25: In call to string-match: Repetition subsumes preceding repetition (pos 28)
"[ \t]*\\((*[Ww][Aa][Ss]:[ \t]*.*)\\)"
...............................^
lisp/net/browse-url.el:209:3: In browse-url-button-regexp: Repetition subsumed by preceding repetition (pos 219)
"\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?\\(?:[-a-z0-9_=#$@~%&*+\\/[:word:]!?:;.,]+([-a-z0-9_=#$@~%&*+\\/[:word:]!?:;.,]+[-a-z0-9_=#$@~%&*+\\/[:word:]]*)\\(?:[-a-z0-9_=#$@~%&*+\\/[:word:]!?:;.,]+[-a-z0-9_=#$@~%&*+\\/[:word:]]\\)?\\|[-a-z0-9_=#$@~%&*+\\/[:word:]!?:;.,]+[-a-z0-9_=#$@~%&*+\\/[:word:]]\\)\\)"
..................................................................................................................................................................................................................................................^
lisp/net/rcirc.el:2414:3: In rcirc-url-regexp: Repetition subsumed by preceding repetition (pos 219)
"\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?\\(?:[-a-z0-9_=#$@~%&*+\\/[:word:]!?:;.,]+([-a-z0-9_=#$@~%&*+\\/[:word:]!?:;.,]+[-a-z0-9_=#$@~%&*+\\/[:word:]]*)[-a-z0-9_=#$@~%&*+\\/[:word:]]\\|[-a-z0-9_=#$@~%&*+\\/[:word:]!?:;.,]+[-a-z0-9_=#$@~%&*+\\/[:word:]]\\)\\)"
..................................................................................................................................................................................................................................................^
lisp/org/ob-core.el:2440:27: In call to looking-at: Repetition subsumes preceding repetition (pos 131)
"^[ \t]*#\\+RESULTS\\(?:\\[\\(?:<\\(?:[0-9]\\{4\\}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]\\(?::[0-5][0-9]\\)\\{2\\}\\)> \\)?\\([[:alnum:]]+\\)\\]\\)?:[ \t]*.*$"
......................................................................................................................................................^
lisp/org/ob-fortran.el:109:21: In call to string-match: Repetition subsumes preceding repetition (pos 19)
"^[ \t]*program[ \t]*.*"
.....................^
lisp/org/org-capture.el:1024:40: In call to string-match: Repetition subsumes preceding repetition (pos 16)
"\\([^ ]+\\)--?[^ ]+[ ]+\\(.*\\)"
..................^
lisp/org/org-table.el:3102:27: In call to string-match-p: Repetition subsumes preceding repetition (pos 12)
"\\`@-?[-+0-9]+\\$-?[0-9]+\\'"
.............^
lisp/org/org.el:457:3: In org-maybe-keyword-time-regexp: Repetition subsumes preceding repetition (pos 104)
"\\(\\<\\(\\(?:CLO\\(?:CK\\|SED\\)\\|DEADLINE\\|SCHEDULED\\):\\)\\)? *\\([[<][0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^]\r\n>]*?[]>]\\|<%%([^\r\n>]*>\\)"
.............................................................................................................................^
lisp/org/org.el:567:25: In org-ts-regexp: Repetition subsumes preceding repetition (pos 43)
"<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^\r\n>]*?\\)>"
....................................................^
lisp/org/org.el:571:3: In org-ts-regexp-inactive: Repetition subsumes preceding repetition (pos 44)
"\\[\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^\r\n>]*?\\)\\]"
......................................................^
lisp/org/org.el:574:30: In org-ts-regexp-both: Repetition subsumes preceding repetition (pos 47)
"[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^]\r\n>]*?\\)[]>]"
........................................................^
lisp/org/org.el:592:25: In org-tr-regexp: Repetition subsumes preceding repetition (pos 43)
"<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^\r\n>]*?\\)>--?-?<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^\r\n>]*?\\)>"
....................................................^
lisp/org/org.el:592:25: In org-tr-regexp: Repetition subsumes preceding repetition (pos 96)
"<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^\r\n>]*?\\)>--?-?<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^\r\n>]*?\\)>"
...................................................................................................................^
lisp/org/org.el:596:3: In org-tr-regexp-both: Repetition subsumes preceding repetition (pos 47)
"[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^]\r\n>]*?\\)[]>]--?-?[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^]\r\n>]*?\\)[]>]"
........................................................^
lisp/org/org.el:596:3: In org-tr-regexp-both: Repetition subsumes preceding repetition (pos 107)
"[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^]\r\n>]*?\\)[]>]--?-?[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^]\r\n>]*?\\)[]>]"
..............................................................................................................................^
lisp/org/org.el:599:26: In org-tsr-regexp: Repetition subsumes preceding repetition (pos 43)
"<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^\r\n>]*?\\)>\\(--?-?<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^\r\n>]*?\\)>\\)?"
....................................................^
lisp/org/org.el:599:26: In org-tsr-regexp: Repetition subsumes preceding repetition (pos 98)
"<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^\r\n>]*?\\)>\\(--?-?<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^\r\n>]*?\\)>\\)?"
......................................................................................................................^
lisp/org/org.el:604:3: In org-tsr-regexp-both: Repetition subsumes preceding repetition (pos 47)
"[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^]\r\n>]*?\\)[]>]\\(--?-?[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^]\r\n>]*?\\)[]>]\\)?"
........................................................^
lisp/org/org.el:604:3: In org-tsr-regexp-both: Repetition subsumes preceding repetition (pos 109)
"[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^]\r\n>]*?\\)[]>]\\(--?-?[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^]\r\n>]*?\\)[]>]\\)?"
.................................................................................................................................^
lisp/org/org.el:9988:19: In call to re-search-forward: Repetition subsumes preceding repetition (pos 106)
"\\(\\<SCHEDULED: *<\\([^>]+\\)>\\)\\|\\(\\<DEADLINE: *<\\([^>]+\\)>\\)\\|\\(<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} ?[^\r\n>]*?\\)>\\)"
................................................................................................................................^
lisp/play/gametree.el:327:21: In call to looking-at: Repetition subsumed by preceding repetition (pos 6)
"[^\n]*-*-[^\n]*gametree-local-layout: \\([^;\n]*\\);"
.......^
lisp/progmodes/cc-mode.el:2674:3: In c-Java-defun-prompt-regexp: Repetition subsumes preceding repetition (pos 182)
"^[ \t]*\\(\\(\\(public\\|protected\\|private\\|const\\|abstract\\|synchronized\\|final\\|static\\|threadsafe\\|transient\\|native\\|volatile\\)\\s-+\\)*\\(\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*[][_$.a-zA-Z0-9]+\\|[[a-zA-Z]\\)\\s-*\\)\\s-+\\)\\)?\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*\\s-+\\)\\s-*\\)?\\([_a-zA-Z][^][ \t:;.,{}()\177=]*\\|\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)\\)\\s-*\\(([^);{}]*)\\)?\\([] \t]*\\)\\(\\s-*\\<throws\\>\\s-*\\(\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)[, \t\n\r\f\v]*\\)+\\)?\\s-*"
...........................................................................................................................................................................................................^
lisp/progmodes/cfengine.el:1325:8: In comment-start-skip: Duplicated `\' inside character alternative (pos 12)
"\\(\\(?:^\\|[^\\\\\n]\\)\\(?:\\\\\\\\\\)*\\)#+[ \t]*"
................^
lisp/progmodes/ebnf2ps.el:5983:26: `ebnf-range-regexp' cannot be used for arguments to `skip-chars-forward'
lisp/progmodes/fortran.el:428:3: In fortran-font-lock-keywords-3: Unescaped literal `*' (pos 407)
"\\<\\(byte\\|c\\(?:haracter\\|om\\(?:mon\\|plex\\)\\)\\|d\\(?:ata\\|imension\\|ouble[ \t]*\\(?:complex\\|precision\\)\\)\\|e\\(?:nd[ \t]*\\(?:map\\|structure\\|union\\)\\|quivalence\\|xternal\\)\\|i\\(?:mplicit[ \t]*\\(?:byte\\|c\\(?:haracter\\|omplex\\)\\|double[ \t]*\\(?:complex\\|precision\\)\\|integer\\|logical\\|none\\|real\\)\\|nt\\(?:eger\\|rinsic\\)\\)\\|logical\\|map\\|none\\|parameter\\|re\\(?:al\\|cord\\)\\|s\\(?:\\(?:av\\|tructur\\)e\\)\\|union\\)\\>[ \t(/]*\\(*\\)?"
.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^
lisp/progmodes/fortran.el:463:3: In fortran-font-lock-keywords-4: Unescaped literal `*' (pos 407)
"\\<\\(byte\\|c\\(?:haracter\\|om\\(?:mon\\|plex\\)\\)\\|d\\(?:ata\\|imension\\|ouble[ \t]*\\(?:complex\\|precision\\)\\)\\|e\\(?:nd[ \t]*\\(?:map\\|structure\\|union\\)\\|quivalence\\|xternal\\)\\|i\\(?:mplicit[ \t]*\\(?:byte\\|c\\(?:haracter\\|omplex\\)\\|double[ \t]*\\(?:complex\\|precision\\)\\|integer\\|logical\\|none\\|real\\)\\|nt\\(?:eger\\|rinsic\\)\\)\\|logical\\|map\\|none\\|parameter\\|re\\(?:al\\|cord\\)\\|s\\(?:\\(?:av\\|tructur\\)e\\)\\|union\\)\\>[ \t(/]*\\(*\\)?"
.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^
lisp/progmodes/idlw-shell.el:1601:3: In idlwave-shell-halting-error: Repetition subsumes preceding repetition (pos 65)
"^% .*\n\\([^%].*\n\\)*% Execution halted at:\\(\\s-*\\S-+\\s-*[0-9]+\\s-*.*\\)\n"
..........................................................................^
lisp/progmodes/opascal.el:1691:5: In call to syntax-propertize-rules: Escaped non-special character `/' (pos 3)
"(\\(\\/\\)"
....^
lisp/progmodes/pascal.el:190:5: In call to syntax-propertize-rules: Escaped non-special character `/' (pos 3)
"(\\(\\/\\)"
....^
lisp/progmodes/perl-mode.el:238:8: In call to syntax-propertize-rules: Unescaped literal `^' (pos 6)
"\\$ ?{?^?[_[:alpha:]][_[:alnum:]]*\\('\\)[_[:alpha:]]"
.......^
lisp/progmodes/ruby-mode.el:804:30: In call to looking-at: Repetition subsumes preceding repetition (pos 10)
"\\s *#\\s *.*\\(en\\)?coding\\s *:\\s *\\([-a-z0-9_]*\\)"
............^
lisp/progmodes/sh-script.el:1161:6: In call to syntax-propertize-rules: Repetition of repetition (pos 25)
"\"\\(?:\\(?:[^\\\"]\\|\\\\.\\)*?\\)??\\(\\$(\\|`\\)"
...................................^
lisp/progmodes/simula.el:370:47: In paragraph-start: Escaped non-special character `f' (pos 8)
"[ \t]*$\\|\\f"
..........^
lisp/progmodes/verilog-mode.el:925:3: In verilog-error-font-lock-keywords: Repetition subsumed by preceding repetition (pos 3)
".*%?\\(Error\\|Warning\\)\\(-[^:]+\\|\\):[\n ]*\\([^ \t:]+\\):\\([0-9]+\\):"
...^
lisp/progmodes/verilog-mode.el:925:3: In verilog-error-font-lock-keywords: Repetition subsumed by preceding repetition (pos 3)
".*%?\\(Error\\|Warning\\)\\(-[^:]+\\|\\):[\n ]*\\([^ \t:]+\\):\\([0-9]+\\):"
...^
lisp/progmodes/verilog-mode.el:5348:23: In call to looking-at: Repetition subsumes preceding repetition (pos 64)
"\\(.*\\)([WE]\\([0-9A-Z]+\\)).*,\\s +line\\s +[0-9]+:\\s +\\([^:\n]+\\):?.*$"
..........................................................................^
lisp/progmodes/verilog-mode.el:6791:24: In call to looking-at: Repetition subsumed by preceding repetition (pos 11)
"^[^:;]+[ \t]*:"
............^
lisp/progmodes/verilog-mode.el:7785:11: In call to re-search-backward: Repetition subsumes preceding repetition (pos 7)
"//\\s-*.*\\s-*\\(translate\\|coverage\\|lint\\)_\\(on\\|off\\)\\>"
........^
lisp/progmodes/verilog-mode.el:7785:11: In call to re-search-backward: Repetition subsumed by preceding repetition (pos 11)
"//\\s-*.*\\s-*\\(translate\\|coverage\\|lint\\)_\\(on\\|off\\)\\>"
.............^
lisp/progmodes/verilog-mode.el:7793:10: In call to re-search-forward: Repetition subsumes preceding repetition (pos 7)
"//\\s-*.*\\s-*\\(translate\\|coverage\\|lint\\)_off\\>"
........^
lisp/progmodes/verilog-mode.el:7793:10: In call to re-search-forward: Repetition subsumed by preceding repetition (pos 11)
"//\\s-*.*\\s-*\\(translate\\|coverage\\|lint\\)_off\\>"
.............^
lisp/progmodes/verilog-mode.el:7800:10: In call to re-search-backward: Repetition subsumes preceding repetition (pos 7)
"//\\s-*.*\\s-*\\(translate\\|coverage\\|lint\\)_off\\>"
........^
lisp/progmodes/verilog-mode.el:7800:10: In call to re-search-backward: Repetition subsumed by preceding repetition (pos 11)
"//\\s-*.*\\s-*\\(translate\\|coverage\\|lint\\)_off\\>"
.............^
lisp/progmodes/verilog-mode.el:7807:22: In call to re-search-forward: Repetition subsumes preceding repetition (pos 7)
"//\\s-*.*\\s-*\\(translate\\|coverage\\|lint\\)_on\\>"
........^
lisp/progmodes/verilog-mode.el:7807:22: In call to re-search-forward: Repetition subsumed by preceding repetition (pos 11)
"//\\s-*.*\\s-*\\(translate\\|coverage\\|lint\\)_on\\>"
.............^
lisp/progmodes/verilog-mode.el:9985:30: In call to string-match: Repetition subsumes preceding repetition (pos 15)
"^\\(\\|[/\\]*[^*?]*[/\\]\\)\\([^/\\]*[*?][^/\\]*\\)\\(.*\\)"
..................^
lisp/textmodes/reftex-vars.el:894:5: In reftex-label-regexps: Repetition subsumes preceding repetition (pos 234)
"\\\\\\(?:begin[[:space:]]*{\\(?:d\\(?:array\\|group\\|math\\|series\\)\\|lstlisting\\)}[[:space:]]*\\|\\(?:ctable\\)\\)\\[[^][]*\\(?:{[^}{]*\\(?:{[^}{]*\\(?:{[^}{]*}[^}{]*\\)*}[^}{]*\\)*}[^][]*\\)*\\<label[[:space:]]*=[[:space:]]*{?\\(?1:[^] ,}\r\n\t%]+\\)}?[^]]*\\]"
......................................................................................................................................................................................................................................................................^
lisp/textmodes/tex-mode.el:1255:31: In paragraph-start: Duplicated `\' inside character alternative (pos 11)
"[ \t]*$\\|[\f\\\\%]\\|[ \t]*\\$\\$"
...............^
lisp/textmodes/tex-mode.el:1258:34: In paragraph-separate: Duplicated `\' inside character alternative (pos 11)
"[ \t]*$\\|[\f\\\\%]\\|[ \t]*\\$\\$[ \t]*$"
...............^
lisp/url/url-gw.el:194:30: In call to url-wait-for-string: Repetition subsumed by preceding repetition (pos 22)
"^\r*Escape character.*\r*\n+"
........................^
lisp/vc/ediff-ptch.el:120:3: In ediff-context-diff-label-regexp: Repetition subsumed by preceding repetition (pos 31)
"\\(^\\*\\*\\* +\\([^ \t\n]+\\)[^*]+[\t ]*\n--- +\\([^ \t\n]+\\)\\|^--- +\\([^ \t\n]+\\).*\n\\+\\+\\+ +\\([^ \t\n]+\\)\\)"
........................................^
lisp/vc/pcvs-parse.el:475:18: In call to cvs-match: Repetition subsumes preceding repetition (pos 36)
" *RCS Version:[ \t]*\\([0-9.]+\\)[ \t]*.*$"
........................................^
lisp/bs.el:180:3: In bs-mode-font-lock-keywords: Repetition subsumed by preceding repetition (pos 20)
"^\\( *M *R *Buffer * *Size * *Mode * *File * *$\\)"
.....................^
lisp/bs.el:180:3: In bs-mode-font-lock-keywords: Repetition subsumed by preceding repetition (pos 28)
"^\\( *M *R *Buffer * *Size * *Mode * *File * *$\\)"
.............................^
lisp/bs.el:180:3: In bs-mode-font-lock-keywords: Repetition subsumed by preceding repetition (pos 36)
"^\\( *M *R *Buffer * *Size * *Mode * *File * *$\\)"
.....................................^
lisp/bs.el:180:3: In bs-mode-font-lock-keywords: Repetition subsumed by preceding repetition (pos 44)
"^\\( *M *R *Buffer * *Size * *Mode * *File * *$\\)"
.............................................^
lisp/informat.el:340:45: In call to re-search-forward: Repetition subsumes preceding repetition (pos 16)
"\\*note[ \n]*[^:\t]*:"
...................^
lisp/term.el:2794:3: In term-control-seq-regexp: Repetition subsumed by preceding repetition (pos 23)
"\\(?:[\r\n\000\007\t\b\016\017]\\|\032[^\n]+\r?\n\\|\e\\(?:[DM78c]\\|AnSiT[^\n]+\r?\n\\|\\[\\([0-?]*\\)[ -/]*[@-~]\\)\\)"
..............................................^
lisp/term.el:2794:3: In term-control-seq-regexp: Repetition subsumed by preceding repetition (pos 52)
"\\(?:[\r\n\000\007\t\b\016\017]\\|\032[^\n]+\r?\n\\|\e\\(?:[DM78c]\\|AnSiT[^\n]+\r?\n\\|\\[\\([0-?]*\\)[ -/]*[@-~]\\)\\)"
..................................................................................^
test/src/regex-emacs-tests.el:508:43: In call to re-search-forward: Repetition subsumed by preceding repetition (pos 14)
"^/\\(.*\\)/\\(.*i?\\)$"
.................^
Finished -- 72 errors (2 suppressed).
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Regexp linting scan
2020-01-30 16:16 Regexp linting scan Mattias Engdegård
@ 2020-02-20 15:13 ` Mattias Engdegård
0 siblings, 0 replies; 11+ messages in thread
From: Mattias Engdegård @ 2020-02-20 15:13 UTC (permalink / raw)
To: Emacs developers
30 jan. 2020 kl. 17.16 skrev Mattias Engdegård <mattiase@acm.org>:
> Here is a new scan of regexp irregularities in the Emacs tree
These have now been remedied, most in master, a few functional bugs in emacs-27.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2020-02-20 15:13 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-01-30 16:16 Regexp linting scan Mattias Engdegård
2020-02-20 15:13 ` Mattias Engdegård
-- strict thread matches above, loose matches on Subject: below --
2019-12-01 22:20 Mattias Engdegård
2019-12-02 10:14 ` Richard Copley
2019-12-02 10:19 ` Mattias Engdegård
2019-12-05 0:57 ` Paul Eggert
2019-12-05 2:10 ` Michael Welsh Duggan
2019-12-05 11:38 ` Mattias Engdegård
2019-12-05 12:11 ` Mattias Engdegård
2019-12-06 3:34 ` Paul Eggert
2019-12-05 10:21 ` Mattias Engdegård
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).