Add `unmatchable' as alias for (or) in rx (bug#37659)
* lisp/emacs-lisp/rx.el (rx--translate-symbol, rx--builtin-symbols, rx): * test/lisp/emacs-lisp/rx-tests.el (rx-atoms): * doc/lispref/searching.texi (Rx Constructs): * etc/NEWS: Add `unmatchable', more descriptive than (or), and corresponding to the variable `regexp-unmatchable'.
This commit is contained in:
parent
e5a446b0a7
commit
ae5407b857
4 changed files with 12 additions and 2 deletions
|
@ -1083,6 +1083,11 @@ Corresponding string regexp: @samp{@var{A}@var{B}@dots{}}
|
|||
Match exactly one of the @var{rx}s, trying from left to right.
|
||||
Without arguments, the expression will not match anything at all.@*
|
||||
Corresponding string regexp: @samp{@var{A}\|@var{B}\|@dots{}}.
|
||||
|
||||
@item @code{unmatchable}
|
||||
@cindex @code{unmatchable} in rx
|
||||
Refuse any match. Equivalent to @code{(or)}.
|
||||
@xref{regexp-unmatchable}.
|
||||
@end table
|
||||
|
||||
@subsubheading Repetition
|
||||
|
@ -1806,6 +1811,7 @@ list of characters @var{chars}.
|
|||
|
||||
@c Internal functions: regexp-opt-group
|
||||
|
||||
@anchor{regexp-unmatchable}
|
||||
@defvar regexp-unmatchable
|
||||
This variable contains a regexp that is guaranteed not to match any
|
||||
string at all. It is particularly useful as default value for
|
||||
|
|
1
etc/NEWS
1
etc/NEWS
|
@ -1844,6 +1844,7 @@ the 128...255 range, as expected.
|
|||
matches the empty string, each being an identity for the operation.
|
||||
This also works for their aliases: '|' for 'or'; ':', 'and' and
|
||||
'sequence' for 'seq'.
|
||||
The symbol 'unmatchable' can be used as an alternative to (or).
|
||||
|
||||
---
|
||||
*** 'regexp' and new 'literal' accept arbitrary lisp as arguments.
|
||||
|
|
|
@ -126,7 +126,6 @@ Each entry is:
|
|||
(get name 'rx-definition)))
|
||||
|
||||
;; TODO: Additions to consider:
|
||||
;; - A name for (or), maybe `unmatchable'.
|
||||
;; - A construct like `or' but without the match order guarantee,
|
||||
;; maybe `unordered-or'. Useful for composition or generation of
|
||||
;; alternatives; permits more effective use of regexp-opt.
|
||||
|
@ -138,6 +137,7 @@ Each entry is:
|
|||
;; since the return value may be mutated.
|
||||
((or 'nonl 'not-newline 'any) (cons (list ".") t))
|
||||
((or 'anychar 'anything) (rx--translate-form '(or nonl "\n")))
|
||||
('unmatchable (rx--empty))
|
||||
((or 'bol 'line-start) (cons (list "^") 'lseq))
|
||||
((or 'eol 'line-end) (cons (list "$") 'rseq))
|
||||
((or 'bos 'string-start 'bot 'buffer-start) (cons (list "\\`") t))
|
||||
|
@ -912,7 +912,7 @@ can expand to any number of values."
|
|||
"List of built-in rx function-like symbols.")
|
||||
|
||||
(defconst rx--builtin-symbols
|
||||
(append '(nonl not-newline any anychar anything
|
||||
(append '(nonl not-newline any anychar anything unmatchable
|
||||
bol eol line-start line-end
|
||||
bos eos string-start string-end
|
||||
bow eow word-start word-end
|
||||
|
@ -1016,6 +1016,7 @@ CHAR Match a literal character.
|
|||
or a character class.
|
||||
not-newline Match any character except a newline. Alias: nonl.
|
||||
anychar Match any character. Alias: anything.
|
||||
unmatchable Never match anything at all.
|
||||
|
||||
CHARCLASS Match a character from a character class. One of:
|
||||
alpha, alphabetic, letter Alphabetic characters (defined by Unicode).
|
||||
|
|
|
@ -186,6 +186,8 @@
|
|||
(ert-deftest rx-atoms ()
|
||||
(should (equal (rx anychar anything)
|
||||
"\\(?:.\\|\n\\)\\(?:.\\|\n\\)"))
|
||||
(should (equal (rx unmatchable)
|
||||
"\\`a\\`"))
|
||||
(should (equal (rx line-start not-newline nonl any line-end)
|
||||
"^...$"))
|
||||
(should (equal (rx bol string-start string-end buffer-start buffer-end
|
||||
|
|
Loading…
Add table
Reference in a new issue