[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master a6b5985: Avoid duplicated character classes in rx
From: |
Mattias Engdegård |
Subject: |
master a6b5985: Avoid duplicated character classes in rx |
Date: |
Tue, 3 Dec 2019 09:22:45 -0500 (EST) |
branch: master
commit a6b598518c4bf6dfc587cfb2b61fa5fb04b99494
Author: Mattias Engdegård <address@hidden>
Commit: Mattias Engdegård <address@hidden>
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.
---
lisp/emacs-lisp/rx.el | 4 +++-
test/lisp/emacs-lisp/rx-tests.el | 4 +++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index 52a35ff..6fde278 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -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,
diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el
index 4ecc805..26e39f8 100644
--- a/test/lisp/emacs-lisp/rx-tests.el
+++ b/test/lisp/emacs-lisp/rx-tests.el
@@ -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"
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master a6b5985: Avoid duplicated character classes in rx,
Mattias Engdegård <=