mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-03 10:31:37 -08:00
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.
This commit is contained in:
parent
da758046da
commit
7bda34af52
3 changed files with 24 additions and 8 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue