Note that I am writing this PR on a recent Emacs 30 build, whereas the min version supported for lispy is 24.3. I hope someone can test on some earlier versions.
Fixes #647. Also fixes #653 by its first commit.
Lispy would assume an implicit nil after the reader syntax, like this:
(defun foo ()
'
(bar baz)
) ;; point here, press i to format
Gets this incorrect result:
(defun foo ()
'() (bar baz))
lispy.el
(lispy--delete-insignificant-sexps): allow removing sexps that are
implicitly-created by lispy, and serve no purpose in the real input and output
sexp other than formatting. At the moment, just remove newline nodes.
(lispy--read-reader-syntax): helper function to avoid code duplication; converts
a reader syntax RS, e.g., "`", plus its immediately-next sexp, into an internal
representation with TAG.
(lispy--read): update handling of "#'", ",@", "'", "`", "," to make use of
lispy--read-reader-syntax.
(lispy--insert): fixed float and quasiquote handling (currently it calls
(insert (caddr sxp)), which is incorrect because insert considers it a
character; float was not problematic because this code path was never triggered:
things like 1.2 have not been converted into ly-raw float constructs anyway.
lispy-test.el
(lispy-read-quote-newline): added 5 simple tests for each of the
addressed reader syntaxes.
Note that I am writing this PR on a recent Emacs 30 build, whereas the min version supported for lispy is
24.3
. I hope someone can test on some earlier versions.Fixes #647. Also fixes #653 by its first commit.
Lispy would assume an implicit nil after the reader syntax, like this:
Gets this incorrect result:
(lispy--delete-insignificant-sexps): allow removing sexps that are implicitly-created by lispy, and serve no purpose in the real input and output sexp other than formatting. At the moment, just remove newline nodes.
(lispy--read-reader-syntax): helper function to avoid code duplication; converts a reader syntax RS, e.g.,
"`"
, plus its immediately-next sexp, into an internal representation with TAG.(lispy--read): update handling of
"#'"
,",@"
,"'"
,"`"
,","
to make use oflispy--read-reader-syntax
.(lispy--insert): fixed float and quasiquote handling (currently it calls
(insert (caddr sxp))
, which is incorrect becauseinsert
considers it a character; float was not problematic because this code path was never triggered: things like1.2
have not been converted intoly-raw float
constructs anyway.(lispy-read-quote-newline): added 5 simple tests for each of the addressed reader syntaxes.