emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/parseclj 4f54ba52fe 033/185: Add support for sets


From: ELPA Syncer
Subject: [nongnu] elpa/parseclj 4f54ba52fe 033/185: Add support for sets
Date: Tue, 28 Dec 2021 14:05:11 -0500 (EST)

branch: elpa/parseclj
commit 4f54ba52fe8a97c6792a9fb5a360822a43a3dfef
Author: Arne Brasseur <arne@arnebrasseur.net>
Commit: Arne Brasseur <arne@arnebrasseur.net>

    Add support for sets
---
 clj-lex-test.el   |  9 ++++++++-
 clj-lex.el        |  8 ++++++++
 clj-parse-test.el |  6 +++++-
 clj-parse.el      | 12 +++++++++++-
 4 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/clj-lex-test.el b/clj-lex-test.el
index 3710ad2945..99cea11c28 100644
--- a/clj-lex-test.el
+++ b/clj-lex-test.el
@@ -125,7 +125,14 @@
     (should (equal (clj-lex-next) (clj-lex-token :keyword ":count" 2)))
     (should (equal (clj-lex-next) (clj-lex-token :whitespace " " 8)))
     (should (equal (clj-lex-next) (clj-lex-token :number "123" 9)))
-    (should (equal (clj-lex-next) (clj-lex-token :rbrace "}" 12)))))
+    (should (equal (clj-lex-next) (clj-lex-token :rbrace "}" 12))))
+
+  (with-temp-buffer
+    (insert "#{:x}")
+    (goto-char 1)
+    (should (equal (clj-lex-next) (clj-lex-token :set "#{" 1)))
+    (should (equal (clj-lex-next) (clj-lex-token :keyword ":x" 3)))
+    (should (equal (clj-lex-next) (clj-lex-token :rbrace "}" 5)))))
 
 (ert-deftest clj-lex-test-at-number? ()
   (dolist (str '("123" ".9" "+1" "0" "-456"))
diff --git a/clj-lex.el b/clj-lex.el
index 94e5c5823d..4901667d3f 100644
--- a/clj-lex.el
+++ b/clj-lex.el
@@ -208,6 +208,14 @@
        ((equal char ?:)
         (clj-lex-keyword))
 
+       ((equal char ?#)
+        (right-char)
+        (let ((char (char-after (point))))
+          (cl-case char
+            (?{
+             (right-char)
+             (clj-lex-token :set "#{" pos)))))
+
        ":("))))
 
 (provide 'clj-lex)
diff --git a/clj-parse-test.el b/clj-parse-test.el
index 0554f5d1a5..ef06cb6d04 100644
--- a/clj-parse-test.el
+++ b/clj-parse-test.el
@@ -89,8 +89,12 @@
   (with-temp-buffer
     (insert "{:count 123}")
     (goto-char 1)
-    (should (equal (clj-parse) '(((:count . 123)))))))
+    (should (equal (clj-parse) '(((:count . 123))))))
 
+  (with-temp-buffer
+    (insert "#{:x}")
+    (goto-char 1)
+    (should (equal (clj-parse) '((:x))))))
 
 (provide 'clj-parse-test)
 
diff --git a/clj-parse.el b/clj-parse.el
index 3c90cd302d..85cfd7db66 100644
--- a/clj-parse.el
+++ b/clj-parse.el
@@ -98,6 +98,7 @@
      (:whitespace :ws)
      (:number coll)
      (:list (-butlast (cdr coll)))
+     (:set (-butlast (cdr coll)))
      (:vector (apply #'vector (-butlast (cdr coll))))
      (:map (mapcar (lambda (pair)
                      (cons (car pair) (cadr pair)))
@@ -138,7 +139,16 @@
       (cl-case (clj-parse--token-type (car stack))
         (:rparen (setf stack (clj-parse--reduce-coll stack :lparen :list 
reduceN)))
         (:rbracket (setf stack (clj-parse--reduce-coll stack :lbracket :vector 
reduceN)))
-        (:rbrace (setf stack (clj-parse--reduce-coll stack :lbrace :map 
reduceN))))
+        (:rbrace
+         (let ((open-token (-find (lambda (token)
+                                    (member (clj-parse--token-type token) 
'(:lbrace :set)))
+                                  stack)))
+
+           (cl-case (clj-parse--token-type open-token)
+             (:lbrace
+              (setf stack (clj-parse--reduce-coll stack :lbrace :map reduceN)))
+             (:set
+              (setf stack (clj-parse--reduce-coll stack :set :set 
reduceN)))))))
 
 
       (setq token (clj-lex-next)))



reply via email to

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