Skip to content

Commit 415dc6e

Browse files
committed
Added: elixir-quoted-minor-mode
1 parent f7e954d commit 415dc6e

File tree

3 files changed

+76
-2
lines changed

3 files changed

+76
-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: 23 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,19 @@ 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+
(font-lock-ensure)))
509+
495510
;;;###autoload
496511
(defun elixir-mode-iex (&optional args-p)
497512
"Elixir mode interactive REPL.
@@ -542,7 +557,7 @@ Optional argument ARGS-P ."
542557
file))
543558

544559
(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))'"
560+
(format "%s -e 'IO.puts inspect(elem(Code.string_to_quoted(File.read!(\"%s\")), 1), pretty: true)'"
546561
elixir-mode-command
547562
file))
548563

@@ -566,7 +581,7 @@ Optional argument ARGS-P ."
566581

567582
(defun elixir-mode--string-to-quoted (string)
568583
(let* ((output (elixir-mode--execute-elixir-with-code-string-to-quoted string)))
569-
(message output)))
584+
(elixir-quoted--initialize-buffer output)))
570585

571586
(defun elixir-mode-eval-on-region (beg end)
572587
"Evaluate the Elixir code on the marked region.
@@ -646,6 +661,12 @@ Argument END End of the region."
646661
(t
647662
(remove-hook 'after-save-hook 'elixir-mode-compile-file t))))
648663

664+
(define-minor-mode elixir-quoted-minor-mode
665+
"Minor mode for displaying elixir quoted expressions"
666+
:group 'elixir-quoted :lighter " quoted"
667+
:keymap '(("q" . quit-window))
668+
(setq buffer-read-only t))
669+
649670
;;;###autoload
650671
(defun elixir-mode-run-tests ()
651672
"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)