emacs-diffs
[Top][All Lists]
Advanced

[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"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]