From 415dc6e8f5e03c499887f874ae643030c2898288 Mon Sep 17 00:00:00 2001 From: Sviridov Alexander Date: Wed, 27 Aug 2014 01:09:52 +0600 Subject: [PATCH 1/2] Added: elixir-quoted-minor-mode --- elixir-mode-tests.el | 1 + elixir-mode.el | 25 ++++++++++++- test/elixir-quoted-minor-mode-tests.el | 52 ++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 test/elixir-quoted-minor-mode-tests.el diff --git a/elixir-mode-tests.el b/elixir-mode-tests.el index b3a63782..09b96bf0 100644 --- a/elixir-mode-tests.el +++ b/elixir-mode-tests.el @@ -22,6 +22,7 @@ (load "test/elixir-mode-indentation-tests.el") (load "test/elixir-mode-font-tests.el") +(load "test/elixir-quoted-minor-mode-tests.el") (provide 'elixir-mode-tests) ;;; elixir-mode-tests.el ends here diff --git a/elixir-mode.el b/elixir-mode.el index ccf71b2d..5bb265e3 100644 --- a/elixir-mode.el +++ b/elixir-mode.el @@ -199,6 +199,8 @@ (defvar elixir-mode--eval-filename "elixir-mode-tmp-eval-file.exs") +(defvar elixir-quoted--buffer-name "*elixir-quoted*") + (defvar elixir-basic-offset 2) (defvar elixir-key-label-offset 0) (defvar elixir-match-label-offset 2) @@ -492,6 +494,19 @@ Argument FILE-NAME ." (when (string= compiler-output "") (message "Compiled and saved as %s" (elixir-mode-compiled-file-name))))) +(defun elixir-quoted--initialize-buffer (quoted) + (pop-to-buffer elixir-quoted--buffer-name) + (setq buffer-undo-list nil) ; Get rid of undo information from + ; previous expansions + (let ((inhibit-read-only t) + (buffer-undo-list t)) ; Ignore undo information + (erase-buffer) + (insert quoted) + (goto-char (point-min)) + (elixir-mode) + (elixir-quoted-minor-mode 1) + (font-lock-ensure))) + ;;;###autoload (defun elixir-mode-iex (&optional args-p) "Elixir mode interactive REPL. @@ -542,7 +557,7 @@ Optional argument ARGS-P ." file)) (defun elixir-mode--code-string-to-quoted-command (file) - (format "%s -e 'IO.puts inspect(elem(Code.string_to_quoted(File.read!(\"%s\")), 1))'" + (format "%s -e 'IO.puts inspect(elem(Code.string_to_quoted(File.read!(\"%s\")), 1), pretty: true)'" elixir-mode-command file)) @@ -566,7 +581,7 @@ Optional argument ARGS-P ." (defun elixir-mode--string-to-quoted (string) (let* ((output (elixir-mode--execute-elixir-with-code-string-to-quoted string))) - (message output))) + (elixir-quoted--initialize-buffer output))) (defun elixir-mode-eval-on-region (beg end) "Evaluate the Elixir code on the marked region. @@ -646,6 +661,12 @@ Argument END End of the region." (t (remove-hook 'after-save-hook 'elixir-mode-compile-file t)))) +(define-minor-mode elixir-quoted-minor-mode + "Minor mode for displaying elixir quoted expressions" + :group 'elixir-quoted :lighter " quoted" + :keymap '(("q" . quit-window)) + (setq buffer-read-only t)) + ;;;###autoload (defun elixir-mode-run-tests () "Run ERT test for `elixir-mode'." diff --git a/test/elixir-quoted-minor-mode-tests.el b/test/elixir-quoted-minor-mode-tests.el new file mode 100644 index 00000000..36078e8a --- /dev/null +++ b/test/elixir-quoted-minor-mode-tests.el @@ -0,0 +1,52 @@ + +(ert-deftest elixir-quoted-minor-mode/base () + (elixir-test-with-temp-buffer + "sum(1, 2)" + (elixir-mode-string-to-quoted-on-current-line) + (should (string= (buffer-name) elixir-quoted--buffer-name)) + (should (search-forward "{:sum, [line: 1], [1, 2]}" nil t)) + (should (eq 'quit-window (key-binding "q"))) + (call-interactively (key-binding "q")) + (should-not (string= (buffer-name) elixir-quoted--buffer-name)))) + +(ert-deftest elixir-quoted-minor-mode/read-only () + (elixir-test-with-temp-buffer + "sum(1,2)" + (elixir-mode-string-to-quoted-on-current-line) + (should buffer-read-only) + (should-error (call-interactively (key-binding "w"))))) + +(ert-deftest elixir-quoted-minor-mode/multiple-invocation () + (elixir-test-with-temp-buffer + "sum(1,2)" + (elixir-mode-string-to-quoted-on-current-line) + (should (search-forward "{:sum, [line: 1], [1, 2]}" nil t)) + (quit-window) + (erase-buffer) + (insert "sum(3, 2)") + (elixir-mode-string-to-quoted-on-current-line) + (should-not (search-forward "{:sum, [line: 1], [1, 2]}" nil t)) + (should (search-forward "{:sum, [line: 1], [3, 2]}" nil t)))) + +(ert-deftest elixir-quoted-minor-mode/indentation () + (elixir-test-with-temp-buffer + "" + (insert "if a do\n") + (insert " b\n") + (insert "else\n") + (insert " c\n") + (insert "end") + (elixir-mode-string-to-quoted-on-region (point-min) (point-max)) + (should (search-forward "{:if, [line: 1],\n" nil t)) + (should (search-forward " [{:a, [line: 1], nil}" nil t)))) + +(ert-deftest elixir-quoted-minor-mode/undo () + (elixir-test-with-temp-buffer + "sum(1, 2)" + (elixir-mode-string-to-quoted-on-current-line) + (should-error (undo)) + (quit-window) + (erase-buffer) + (insert "sum(3, 2)") + (elixir-mode-string-to-quoted-on-current-line) + (should-error (undo)))) From 5981844157da34a6841e510472f52681d7aa0ac4 Mon Sep 17 00:00:00 2001 From: Sviridov Alexander Date: Wed, 27 Aug 2014 10:01:47 +0600 Subject: [PATCH 2/2] Removed: unnecessary font-lock-ensure call --- elixir-mode.el | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/elixir-mode.el b/elixir-mode.el index 5bb265e3..72a83985 100644 --- a/elixir-mode.el +++ b/elixir-mode.el @@ -504,8 +504,7 @@ Argument FILE-NAME ." (insert quoted) (goto-char (point-min)) (elixir-mode) - (elixir-quoted-minor-mode 1) - (font-lock-ensure))) + (elixir-quoted-minor-mode 1))) ;;;###autoload (defun elixir-mode-iex (&optional args-p)