summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/regexp-opt.el
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2019-02-25 15:22:02 +0100
committerMattias EngdegÄrd <mattiase@acm.org>2019-03-02 16:22:37 +0100
commit7bda34af52687440632127b4b79986e951b978b1 (patch)
treebe661e3d387f6bea5043746309b7d337da9e9014 /lisp/emacs-lisp/regexp-opt.el
parentda758046da74e33273265cd2e72a8aa1a0c9c7e3 (diff)
downloademacs-7bda34af52687440632127b4b79986e951b978b1.tar.gz
emacs-7bda34af52687440632127b4b79986e951b978b1.tar.bz2
emacs-7bda34af52687440632127b4b79986e951b978b1.zip
Correct regexp-opt return value for empty string list
When regexp-opt is called with an empty list of strings, return a regexp that doesn't match anything instead of the empty string (Bug#20307). * doc/lispref/searching.texi (Regular Expression Functions): * etc/NEWS: Document the new behaviour. * lisp/emacs-lisp/regexp-opt.el (regexp-opt): Return a never-match regexp for empty inputs.
Diffstat (limited to 'lisp/emacs-lisp/regexp-opt.el')
-rw-r--r--lisp/emacs-lisp/regexp-opt.el23
1 files changed, 15 insertions, 8 deletions
diff --git a/lisp/emacs-lisp/regexp-opt.el b/lisp/emacs-lisp/regexp-opt.el
index d0c5f2d3fc4..4404b905a6f 100644
--- a/lisp/emacs-lisp/regexp-opt.el
+++ b/lisp/emacs-lisp/regexp-opt.el
@@ -90,6 +90,9 @@ Each string should be unique in STRINGS and should not contain
any regexps, quoted or not. Optional PAREN specifies how the
returned regexp is surrounded by grouping constructs.
+If STRINGS is the empty list, the return value is a regexp that
+never matches anything.
+
The optional argument PAREN can be any of the following:
a string
@@ -140,14 +143,18 @@ usually more efficient than that of a simplified version:
(sorted-strings (delete-dups
(sort (copy-sequence strings) 'string-lessp)))
(re
- ;; If NOREORDER is non-nil and the list contains a prefix
- ;; of another string, we give up all attempts at optimisation.
- ;; There is plenty of room for improvement (Bug#34641).
- (if (and noreorder (regexp-opt--contains-prefix sorted-strings))
- (concat (or open "\\(?:")
- (mapconcat #'regexp-quote strings "\\|")
- "\\)")
- (regexp-opt-group sorted-strings (or open t) (not open)))))
+ (cond
+ ;; No strings: return a\` which cannot match anything.
+ ((null strings)
+ (concat (or open "\\(?:") "a\\`\\)"))
+ ;; If we cannot reorder, give up all attempts at
+ ;; optimisation. There is room for improvement (Bug#34641).
+ ((and noreorder (regexp-opt--contains-prefix sorted-strings))
+ (concat (or open "\\(?:")
+ (mapconcat #'regexp-quote strings "\\|")
+ "\\)"))
+ (t
+ (regexp-opt-group sorted-strings (or open t) (not open))))))
(cond ((eq paren 'words)
(concat "\\<" re "\\>"))
((eq paren 'symbols)