clojure-emacs / parseedn

EDN parser for Emacs Lisp
58 stars 14 forks source link

Can't print empty vector #12

Closed tmpUser2022 closed 2 years ago

tmpUser2022 commented 2 years ago

(parseedn-print-str []) and (parseedn-print-str (parseedn-read-str "[]")) fails with error.

Debugger entered--Lisp error: (args-out-of-range [] 0)
  elt([] 0)
  (parseedn-print (elt coll 0))
  parseedn-print-seq([])
  (cond ((or (null datum) (numberp datum)) (prin1 datum (current-buffer))) ((stringp datum) (insert "\"") (seq-do #'(lambda (char) (insert (cond (... "\\t") (... "\\f") (... "\\\"") (... "\\r") (... "\\n") (... "\\\\") (t ...)))) datum) (insert "\"")) ((eq t datum) (insert "true")) ((or (keywordp datum) (symbolp datum)) (insert (symbol-name datum))) ((vectorp datum) (insert "[") (parseedn-print-seq datum) (insert "]")) ((or (hash-table-p datum) (parseedn-alist-p datum)) (insert "{") (parseedn-print-hash-or-alist datum) (insert "}")) ((parseedn-plist-p datum) (insert "{") (parseedn-print-plist datum) (insert "}")) ((consp datum) (cond ((not (listp (cdr datum))) (error "Don't know how to print: %s" datum)) ((eq 'edn-set (car datum)) (insert "#{") (parseedn-print-seq (car (cdr datum))) (insert "}")) ((eq 'edn-uuid (car datum)) (insert "#uuid ") (parseedn-print-seq (cdr datum))) ((eq 'edn-inst (car datum)) (insert "#inst ") (parseedn-print-inst (cdr datum))) ((eq 'edn-tagged-literal (car datum)) (insert "#" (symbol-name (car (cdr datum))) " ") (parseedn-print (car (cdr (cdr datum))))) (t (insert "(") (parseedn-print-seq datum) (insert ")")))) (t (error "Don't know how to print: %s" datum)))
  parseedn-print([])
  (progn (parseedn-print datum) (buffer-substring-no-properties (point-min) (point-max)))
  (unwind-protect (progn (parseedn-print datum) (buffer-substring-no-properties (point-min) (point-max))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))
  (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (parseedn-print datum) (buffer-substring-no-properties (point-min) (point-max))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))
  (let ((temp-buffer (generate-new-buffer " *temp*" t))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (parseedn-print datum) (buffer-substring-no-properties (point-min) (point-max))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))))
  parseedn-print-str([])