Skip to content

Commit 7376654

Browse files
committed
Merge pull request #103 from sviridov/elixir-quoted-minor-mode
Add elixir-quoted-minor-mode.
2 parents f7e954d + 5981844 commit 7376654

File tree

3 files changed

+75
-2
lines changed

3 files changed

+75
-2
lines changed

elixir-mode-tests.el

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
(load "test/elixir-mode-indentation-tests.el")
2424
(load "test/elixir-mode-font-tests.el")
25+
(load "test/elixir-quoted-minor-mode-tests.el")
2526

2627
(provide 'elixir-mode-tests)
2728
;;; elixir-mode-tests.el ends here

elixir-mode.el

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,8 @@
199199

200200
(defvar elixir-mode--eval-filename "elixir-mode-tmp-eval-file.exs")
201201

202+
(defvar elixir-quoted--buffer-name "*elixir-quoted*")
203+
202204
(defvar elixir-basic-offset 2)
203205
(defvar elixir-key-label-offset 0)
204206
(defvar elixir-match-label-offset 2)
@@ -492,6 +494,18 @@ Argument FILE-NAME ."
492494
(when (string= compiler-output "")
493495
(message "Compiled and saved as %s" (elixir-mode-compiled-file-name)))))
494496

497+
(defun elixir-quoted--initialize-buffer (quoted)
498+
(pop-to-buffer elixir-quoted--buffer-name)
499+
(setq buffer-undo-list nil) ; Get rid of undo information from
500+
; previous expansions
501+
(let ((inhibit-read-only t)
502+
(buffer-undo-list t)) ; Ignore undo information
503+
(erase-buffer)
504+
(insert quoted)
505+
(goto-char (point-min))
506+
(elixir-mode)
507+
(elixir-quoted-minor-mode 1)))
508+
495509
;;;###autoload
496510
(defun elixir-mode-iex (&optional args-p)
497511
"Elixir mode interactive REPL.
@@ -542,7 +556,7 @@ Optional argument ARGS-P ."
542556
file))
543557

544558
(defun elixir-mode--code-string-to-quoted-command (file)
545-
(format "%s -e 'IO.puts inspect(elem(Code.string_to_quoted(File.read!(\"%s\")), 1))'"
559+
(format "%s -e 'IO.puts inspect(elem(Code.string_to_quoted(File.read!(\"%s\")), 1), pretty: true)'"
546560
elixir-mode-command
547561
file))
548562

@@ -566,7 +580,7 @@ Optional argument ARGS-P ."
566580

567581
(defun elixir-mode--string-to-quoted (string)
568582
(let* ((output (elixir-mode--execute-elixir-with-code-string-to-quoted string)))
569-
(message output)))
583+
(elixir-quoted--initialize-buffer output)))
570584

571585
(defun elixir-mode-eval-on-region (beg end)
572586
"Evaluate the Elixir code on the marked region.
@@ -646,6 +660,12 @@ Argument END End of the region."
646660
(t
647661
(remove-hook 'after-save-hook 'elixir-mode-compile-file t))))
648662

663+
(define-minor-mode elixir-quoted-minor-mode
664+
"Minor mode for displaying elixir quoted expressions"
665+
:group 'elixir-quoted :lighter " quoted"
666+
:keymap '(("q" . quit-window))
667+
(setq buffer-read-only t))
668+
649669
;;;###autoload
650670
(defun elixir-mode-run-tests ()
651671
"Run ERT test for `elixir-mode'."
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
2+
(ert-deftest elixir-quoted-minor-mode/base ()
3+
(elixir-test-with-temp-buffer
4+
"sum(1, 2)"
5+
(elixir-mode-string-to-quoted-on-current-line)
6+
(should (string= (buffer-name) elixir-quoted--buffer-name))
7+
(should (search-forward "{:sum, [line: 1], [1, 2]}" nil t))
8+
(should (eq 'quit-window (key-binding "q")))
9+
(call-interactively (key-binding "q"))
10+
(should-not (string= (buffer-name) elixir-quoted--buffer-name))))
11+
12+
(ert-deftest elixir-quoted-minor-mode/read-only ()
13+
(elixir-test-with-temp-buffer
14+
"sum(1,2)"
15+
(elixir-mode-string-to-quoted-on-current-line)
16+
(should buffer-read-only)
17+
(should-error (call-interactively (key-binding "w")))))
18+
19+
(ert-deftest elixir-quoted-minor-mode/multiple-invocation ()
20+
(elixir-test-with-temp-buffer
21+
"sum(1,2)"
22+
(elixir-mode-string-to-quoted-on-current-line)
23+
(should (search-forward "{:sum, [line: 1], [1, 2]}" nil t))
24+
(quit-window)
25+
(erase-buffer)
26+
(insert "sum(3, 2)")
27+
(elixir-mode-string-to-quoted-on-current-line)
28+
(should-not (search-forward "{:sum, [line: 1], [1, 2]}" nil t))
29+
(should (search-forward "{:sum, [line: 1], [3, 2]}" nil t))))
30+
31+
(ert-deftest elixir-quoted-minor-mode/indentation ()
32+
(elixir-test-with-temp-buffer
33+
""
34+
(insert "if a do\n")
35+
(insert " b\n")
36+
(insert "else\n")
37+
(insert " c\n")
38+
(insert "end")
39+
(elixir-mode-string-to-quoted-on-region (point-min) (point-max))
40+
(should (search-forward "{:if, [line: 1],\n" nil t))
41+
(should (search-forward " [{:a, [line: 1], nil}" nil t))))
42+
43+
(ert-deftest elixir-quoted-minor-mode/undo ()
44+
(elixir-test-with-temp-buffer
45+
"sum(1, 2)"
46+
(elixir-mode-string-to-quoted-on-current-line)
47+
(should-error (undo))
48+
(quit-window)
49+
(erase-buffer)
50+
(insert "sum(3, 2)")
51+
(elixir-mode-string-to-quoted-on-current-line)
52+
(should-error (undo))))

0 commit comments

Comments
 (0)