[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/parseclj 61513d2c99 164/185: Merge pull request #27 from c
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/parseclj 61513d2c99 164/185: Merge pull request #27 from clojure-emacs/shebang-and-symbolic-values |
Date: |
Tue, 28 Dec 2021 14:05:33 -0500 (EST) |
branch: elpa/parseclj
commit 61513d2c9939e3b423b2270c9652d0c6dae45c29
Merge: 1bb3800f8f 0d157d759b
Author: Arne Brasseur <arne.brasseur@gmail.com>
Commit: GitHub <noreply@github.com>
Merge pull request #27 from clojure-emacs/shebang-and-symbolic-values
Add support for shebang and symbolic values
---
CHANGELOG.md | 8 ++++-
parseclj-lex.el | 12 +++++--
test/parseclj-lex-test.el | 36 ++++++++++++++++++--
test/parseclj-test.el | 83 ++++++++++++++++++++++++++++++++++++++---------
4 files changed, 118 insertions(+), 21 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5489347902..7db45508be 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,10 @@
-# Changelog
+# Unreleased
+
+- Added a `:read-one` option to read/parse a single form at a time
+- Support more reader dispatch macro forms: eval (`#=`), shebang (`#!`),
+ symbolic value (`##NaN`)
+
+## Added
## 0.2.0 (2020-10-12)
diff --git a/parseclj-lex.el b/parseclj-lex.el
index f3d445f48e..f7592dec0d 100644
--- a/parseclj-lex.el
+++ b/parseclj-lex.el
@@ -29,6 +29,7 @@
(defvar parseclj-lex--leaf-tokens '(:whitespace
:comment
+ :symbolic-value
:number
:nil
:true
@@ -169,8 +170,8 @@ S goes through three transformations:
(:symbol (intern (alist-get :form token)))
(:keyword (intern (alist-get :form token)))
(:string (parseclj-lex--string-value (alist-get :form token)))
- (:character (parseclj-lex--character-value (alist-get :form token)))))
-
+ (:character (parseclj-lex--character-value (alist-get :form token)))
+ (:symbolic-value (intern (substring (alist-get :form token) 2)))))
;; Stream tokenization
@@ -515,6 +516,10 @@ See `parseclj-lex-token'."
((equal char ?=)
(right-char)
(parseclj-lex-token :eval "#=" pos))
+ ((equal char ?#)
+ (right-char)
+ (let ((sym (parseclj-lex-get-symbol-at-point (point))))
+ (parseclj-lex-token :symbolic-value (concat "##" sym) pos)))
((equal char ?\")
(parseclj-lex-regex))
((equal char ?:)
@@ -529,6 +534,9 @@ See `parseclj-lex-token'."
((parseclj-lex-symbol-start-p char t)
(right-char)
(parseclj-lex-token :tag (concat "#"
(parseclj-lex-get-symbol-at-point (1+ pos))) pos))
+ ((equal char ?!) ;; shebang
+ (left-char)
+ (parseclj-lex-comment))
(t
(while (not (or (parseclj-lex-at-whitespace-p)
(parseclj-lex-at-eof-p)))
diff --git a/test/parseclj-lex-test.el b/test/parseclj-lex-test.el
index 289fa72026..e528580ea8 100644
--- a/test/parseclj-lex-test.el
+++ b/test/parseclj-lex-test.el
@@ -21,11 +21,11 @@
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
-;;; Commentary
+;;; Commentary:
;; Unit tests for the lexer
-;;; Code
+;;; Code:
(require 'ert)
(require 'parseclj-lex)
@@ -222,7 +222,37 @@
(should (equal (parseclj-lex-next) (parseclj-lex-token :number "13" 18)))
(should (equal (parseclj-lex-next) (parseclj-lex-token :whitespace " "
20)))
(should (equal (parseclj-lex-next) (parseclj-lex-token :number "14" 21)))
- (should (equal (parseclj-lex-next) (parseclj-lex-token :rparen ")" 23)))))
+ (should (equal (parseclj-lex-next) (parseclj-lex-token :rparen ")" 23))))
+
+ (with-temp-buffer
+ (insert "#!/usr/bin/clojure")
+ (goto-char 1)
+ (should (equal (parseclj-lex-next) (parseclj-lex-token :comment
"#!/usr/bin/clojure" 1))))
+
+ (with-temp-buffer
+ (insert "##-Inf ##Inf ##NaN")
+ (goto-char 1)
+ (should (equal
+ (list (parseclj-lex-next)
+ (parseclj-lex-next)
+ (parseclj-lex-next)
+ (parseclj-lex-next)
+ (parseclj-lex-next))
+ '(((:token-type . :symbolic-value)
+ (:form . "##-Inf")
+ (:pos . 1))
+ ((:token-type . :whitespace)
+ (:form . " ")
+ (:pos . 7))
+ ((:token-type . :symbolic-value)
+ (:form . "##Inf")
+ (:pos . 8))
+ ((:token-type . :whitespace)
+ (:form . " ")
+ (:pos . 13))
+ ((:token-type . :symbolic-value)
+ (:form . "##NaN")
+ (:pos . 14)))))))
(ert-deftest parseclj-lex-test-at-number-p ()
(dolist (str '("123" ".9" "+1" "0" "-456"))
diff --git a/test/parseclj-test.el b/test/parseclj-test.el
index a2c92e5fc2..3c4d690489 100644
--- a/test/parseclj-test.el
+++ b/test/parseclj-test.el
@@ -348,21 +348,74 @@
top-value)))
(ert-deftest parseclj---read-one-test ()
- (equal (parseclj-parse-clojure "(+ 1 1) foo bar" :read-one t)
- '((:node-type . :list)
- (:position . 1)
- (:children ((:node-type . :symbol)
- (:position . 2)
- (:form . "+")
- (:value . +))
- ((:node-type . :number)
- (:position . 4)
- (:form . "1")
- (:value . 1))
- ((:node-type . :number)
- (:position . 6)
- (:form . "1")
- (:value . 1))))))
+ (should (equal (parseclj-parse-clojure "(+ 1 1) foo bar" :read-one t)
+ '((:node-type . :list)
+ (:position . 1)
+ (:children ((:node-type . :symbol)
+ (:position . 2)
+ (:form . "+")
+ (:value . +))
+ ((:node-type . :number)
+ (:position . 4)
+ (:form . "1")
+ (:value . 1))
+ ((:node-type . :number)
+ (:position . 6)
+ (:form . "1")
+ (:value . 1)))))))
+
+(ert-deftest parseclj---shebang-test ()
+ (should
+ (equal (parseclj-parse-clojure "#!/bin/sh\n(+ 1 1)" :lexical-preservation t)
+ '((:node-type . :root)
+ (:lexical-preservation . t)
+ (:position . 1)
+ (:children ((:node-type . :comment)
+ (:position . 1)
+ (:form . "#!/bin/sh
+"))
+ ((:node-type . :list)
+ (:lexical-preservation . t)
+ (:position . 11)
+ (:children ((:node-type . :symbol)
+ (:position . 12)
+ (:form . "+")
+ (:value . +))
+ ((:node-type . :whitespace)
+ (:position . 13)
+ (:form . " "))
+ ((:node-type . :number)
+ (:position . 14)
+ (:form . "1")
+ (:value . 1))
+ ((:node-type . :whitespace)
+ (:position . 15)
+ (:form . " "))
+ ((:node-type . :number)
+ (:position . 16)
+ (:form . "1")
+ (:value . 1)))))))))
+
+
+(ert-deftest parseclj---symbolic-value-test ()
+ (should (equal (parseclj-parse-clojure "(* ##NaN 1)")
+ '((:node-type . :root)
+ (:position . 1)
+ (:children ((:node-type . :list)
+ (:position . 1)
+ (:children ((:node-type . :symbol)
+ (:position . 2)
+ (:form . "*")
+ (:value . *))
+ ((:node-type . :symbolic-value)
+ (:position . 4)
+ (:form . "##NaN")
+ (:value . NaN))
+ ((:node-type . :number)
+ (:position . 10)
+ (:form . "1")
+ (:value . 1)))))))))
+
(provide 'parseclj-test)
- [nongnu] elpa/parseclj 93a0f43529 150/185: Merge pull request #21 from clojure-emacs/add-more-syntax-features, (continued)
- [nongnu] elpa/parseclj 93a0f43529 150/185: Merge pull request #21 from clojure-emacs/add-more-syntax-features, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj adb55fa579 183/185: Merge pull request #34 from clojure-emacs/cl-case-to-cond, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj dec638c5ca 153/185: Tweak the keywords, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 5cf5cd5f53 182/185: Replace seq-doseq with mapcar... IDK, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 3de700b057 154/185: Add a changelog, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj f5f7ec1660 173/185: Release v1.0.1, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj b34d3e13a2 156/185: Support eval #=(foo...) forms, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj d659079598 174/185: Remove the remaining a.el dependency from non-test code, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 507720a632 170/185: Release 1.0, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 6d1c9c348a 184/185: Update CHANGELOG, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 61513d2c99 164/185: Merge pull request #27 from clojure-emacs/shebang-and-symbolic-values,
ELPA Syncer <=
- [nongnu] elpa/parseclj e6bce85062 159/185: Update the CHANGELOG, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 1f7fe675ae 172/185: Merge pull request #31 from clojure-emacs/remove-a-el-part-2, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj a8c4cf30fb 185/185: Correctly bump versions, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 7ae887b1de 037/185: Refactor clj-parse.el, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj a83816010e 039/185: Refactor clj-parse-test., ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 9d4c0b7b4b 041/185: Merge pull request #2 from volrath/tag-support, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 879ac980a8 056/185: Treat numbers with trailing symbol characters as lex errors, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 2781f0cd7f 088/185: Vocab chage: closer/opener => closing-token/opening-token, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 4fc37462ab 073/185: Make Travis use Cask, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj a71e57df4d 080/185: Rename clj-lex to parseclj-lex, ELPA Syncer, 2021/12/28