]> git.eshelyaron.com Git - emacs.git/commit
rx: fix `or' ordering by adding argument to regexp-opt
authorMattias Engdegård <mattiase@acm.org>
Sun, 24 Feb 2019 21:12:52 +0000 (22:12 +0100)
committerMattias Engdegård <mattiase@acm.org>
Sat, 2 Mar 2019 14:35:28 +0000 (15:35 +0100)
commitda758046da74e33273265cd2e72a8aa1a0c9c7e3
tree4337523f0b56c12d69f27a91ee0a1b61376c0e7e
parentdbffbe08815644fd30404891ef81496277ed27da
rx: fix `or' ordering by adding argument to regexp-opt

The rx `or' form may reorder its arguments in an unpredictable way,
contrary to user expectation, since it sometimes uses `regexp-opt'.
Add a NOREORDER option to `regexp-opt' for preventing it from
producing a reordered regexp (Bug#34641).

* doc/lispref/searching.texi (Regular Expression Functions):
* etc/NEWS (Lisp Changes in Emacs 27.1):
Describe the new regexp-opt NOREORDER argument.
* lisp/emacs-lisp/regexp-opt.el (regexp-opt): Add NOREORDER.
Make no attempt at regexp improvement if the set of strings contains
a prefix of another string.
(regexp-opt--contains-prefix): New.
* lisp/emacs-lisp/rx.el (rx-or): Call regexp-opt with NOREORDER.
* test/lisp/emacs-lisp/rx-tests.el: Test rx `or' form match order.
doc/lispref/searching.texi
etc/NEWS
lisp/emacs-lisp/regexp-opt.el
lisp/emacs-lisp/rx.el
test/lisp/emacs-lisp/rx-tests.el