Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix reader syntaxes disrupted by newlines #655

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

RuijieYu
Copy link
Contributor

@RuijieYu RuijieYu commented Apr 8, 2023

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.

Fixes bug#653.

* lispy-test.el
(lispy-simulate-key) (lispy-simulate-keys) (lispy-simulate-expect):
Added facilities to assert results after a given set of keypresses.
(lispy-read-unsafe-chars): added regression tests for bug#648.
Fixes bug#647.

Lispy would assume an implicit nil after the reader syntax, like this:

```emacs-lisp
(defun foo ()
  '
  (bar baz)
  ) ;; point here, press i to format
```

Gets this incorrect result:

```emacs-lisp
(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; replaces
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.
@RuijieYu RuijieYu changed the title Bug 647 quote newline Fix reader syntaxes disrupted by newlines Apr 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

make test fails [BUG] " ` " at EOL reformats incorrectly
1 participant