[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/parseclj a08b85ffa8 032/185: Implement parsing maps
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/parseclj a08b85ffa8 032/185: Implement parsing maps |
Date: |
Tue, 28 Dec 2021 14:05:11 -0500 (EST) |
branch: elpa/parseclj
commit a08b85ffa8ab54dd92c5af9cf820ee36855e7f0c
Author: Arne Brasseur <arne@arnebrasseur.net>
Commit: Arne Brasseur <arne@arnebrasseur.net>
Implement parsing maps
Parse to alist because hash maps don't have value semantics.
---
clj-lex-test.el | 11 ++++++++++-
clj-lex.el | 8 ++++++++
clj-parse-test.el | 8 +++++++-
clj-parse.el | 8 ++++++--
4 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/clj-lex-test.el b/clj-lex-test.el
index 8da315ca50..3710ad2945 100644
--- a/clj-lex-test.el
+++ b/clj-lex-test.el
@@ -116,7 +116,16 @@
(goto-char 1)
(should (equal (clj-lex-next) (clj-lex-token :lbracket "[" 1)))
(should (equal (clj-lex-next) (clj-lex-token :number "123" 2)))
- (should (equal (clj-lex-next) (clj-lex-token :rbracket "]" 5)))))
+ (should (equal (clj-lex-next) (clj-lex-token :rbracket "]" 5))))
+
+ (with-temp-buffer
+ (insert "{:count 123}")
+ (goto-char 1)
+ (should (equal (clj-lex-next) (clj-lex-token :lbrace "{" 1)))
+ (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)))))
(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 377e8c766b..94e5c5823d 100644
--- a/clj-lex.el
+++ b/clj-lex.el
@@ -185,6 +185,14 @@
(right-char)
(clj-lex-token :rbracket "]" pos))
+ ((equal char ?{)
+ (right-char)
+ (clj-lex-token :lbrace "{" pos))
+
+ ((equal char ?})
+ (right-char)
+ (clj-lex-token :rbrace "}" pos))
+
((clj-lex-at-number?)
(clj-lex-number))
diff --git a/clj-parse-test.el b/clj-parse-test.el
index 8f2869cd06..0554f5d1a5 100644
--- a/clj-parse-test.el
+++ b/clj-parse-test.el
@@ -84,7 +84,13 @@
(with-temp-buffer
(insert "[123]")
(goto-char 1)
- (should (equal (clj-parse) '([123])))))
+ (should (equal (clj-parse) '([123]))))
+
+ (with-temp-buffer
+ (insert "{:count 123}")
+ (goto-char 1)
+ (should (equal (clj-parse) '(((:count . 123)))))))
+
(provide 'clj-parse-test)
diff --git a/clj-parse.el b/clj-parse.el
index 7a12152357..3c90cd302d 100644
--- a/clj-parse.el
+++ b/clj-parse.el
@@ -98,7 +98,10 @@
(:whitespace :ws)
(:number coll)
(:list (-butlast (cdr coll)))
- (:vector (apply #'vector (-butlast (cdr coll)))))
+ (:vector (apply #'vector (-butlast (cdr coll))))
+ (:map (mapcar (lambda (pair)
+ (cons (car pair) (cadr pair)))
+ (-partition 2 (-butlast (cdr coll))))))
stack))
;; TODO move this to clj-lex
@@ -134,7 +137,8 @@
(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))))
+ (:rbracket (setf stack (clj-parse--reduce-coll stack :lbracket :vector
reduceN)))
+ (:rbrace (setf stack (clj-parse--reduce-coll stack :lbrace :map
reduceN))))
(setq token (clj-lex-next)))
- [nongnu] elpa/parseclj 7fba1624e0 142/185: Update DESIGN.md to name difference between parseclj and parseedn, (continued)
- [nongnu] elpa/parseclj 7fba1624e0 142/185: Update DESIGN.md to name difference between parseclj and parseedn, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 3693dd148f 145/185: Fix Cask file, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj af6102c4a8 146/185: Minor fix to README file, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 91c2ad82af 147/185: Add enough feature to be able to parse clojure.core, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj b40670a561 149/185: Add namespaced maps, fix backquote implementation, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj ff0443c27c 151/185: Add :read-one option, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 40e36c41eb 006/185: alist-get was only introduced in 25.1? :sadpanda:, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 6f36bbf6b4 009/185: Try to set up a build matrix, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj d4286f9071 010/185: Give README the right extension, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj ce7ad0e427 025/185: implement strings, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj a08b85ffa8 032/185: Implement parsing maps,
ELPA Syncer <=
- [nongnu] elpa/parseclj 60fd8eb965 053/185: Copy tests from edn.el, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 212e0dc42b 063/185: silly typo, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 96b8180987 087/185: Unparse ASTs that have lexical preservation., ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj da0c877940 069/185: Remove dash, using seq is good enough, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 6ae14f26ce 070/185: Work on tests and EDN printer + other things, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 496a7356bb 064/185: Add edn.el as a dependency, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 87953e44ba 092/185: Parse options on to the reducers, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 496c965edc 074/185: Make t print as true - thanks @martinklepsch, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 1cf0fb9d3f 065/185: More build related fixes, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 0644bcdbf4 085/185: Implement :fail-fast, ELPA Syncer, 2021/12/28