Avoid duplicated character classes in rx
For example, (any digit digit) should produce "[[:digit:]]", not "[[:digit:][:digit:]]". * lisp/emacs-lisp/rx.el (rx--translate-any): Deduplicate character classes. * test/lisp/emacs-lisp/rx-tests.el (rx-any): Add test case.
This commit is contained in:
parent
a05bafffdc
commit
a6b598518c
2 changed files with 6 additions and 2 deletions
|
@ -376,7 +376,9 @@ If NEGATED, negate the sense."
|
|||
(push (cons arg arg) conses))
|
||||
((and (symbolp arg)
|
||||
(let ((class (cdr (assq arg rx--char-classes))))
|
||||
(and class (push class classes)))))
|
||||
(and class
|
||||
(or (memq class classes)
|
||||
(push class classes))))))
|
||||
(t (error "Invalid rx `any' argument: %s" arg))))
|
||||
(let ((items
|
||||
;; Translate strings and conses into nonoverlapping intervals,
|
||||
|
|
|
@ -128,7 +128,9 @@
|
|||
(should (equal (rx (any) (not (any)))
|
||||
"\\`a\\`[^z-a]"))
|
||||
(should (equal (rx (any "") (not (any "")))
|
||||
"\\`a\\`[^z-a]")))
|
||||
"\\`a\\`[^z-a]"))
|
||||
(should (equal (rx (any space ?a digit space))
|
||||
"[a[:space:][:digit:]]")))
|
||||
|
||||
(ert-deftest rx-pcase ()
|
||||
(should (equal (pcase "a 1 2 3 1 1 b"
|
||||
|
|
Loading…
Add table
Reference in a new issue