branch: elpa/zig-mode commit 4356724434037504d9b823220070a98d921bad3e Merge: 9cff802457 9980eabb99 Author: Joachim Schmidt <joachim.schmidt...@outlook.com> Commit: GitHub <nore...@github.com>
Merge pull request #51 from joachimschmidt557/reformatter Switch formatting to reformatter.el --- run_tests.sh | 15 ++++++++++++++- zig-mode.el | 62 ++++++++++++++---------------------------------------------- 2 files changed, 28 insertions(+), 49 deletions(-) diff --git a/run_tests.sh b/run_tests.sh index bbb57f0e24..cb504585d8 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -6,4 +6,17 @@ else echo "Running with EMACS=${EMACS}" fi -${EMACS} --batch -l zig-mode.el -l tests.el -f ert-run-tests-batch-and-exit +# From https://github.com/jcollard/elm-mode/blob/master/Makefile +NEEDED_PACKAGES="reformatter" +INIT_PACKAGES="(progn \ + (require 'package) \ + (push '(\"melpa\" . \"https://melpa.org/packages/\") package-archives) \ + (package-initialize) \ + (dolist (pkg '(${NEEDED_PACKAGES})) \ + (unless (package-installed-p pkg) \ + (unless (assoc pkg package-archive-contents) \ + (package-refresh-contents)) \ + (package-install pkg))) \ + )" + +${EMACS} --eval "${INIT_PACKAGES}" --batch -l zig-mode.el -l tests.el -f ert-run-tests-batch-and-exit diff --git a/zig-mode.el b/zig-mode.el index 782c80d0e8..32dc4c517b 100644 --- a/zig-mode.el +++ b/zig-mode.el @@ -3,7 +3,7 @@ ;; Version: 0.0.8 ;; Author: Andrea Orru <andreaorru1...@gmail.com>, Andrew Kelley <superjo...@gmail.com> ;; Keywords: zig, languages -;; Package-Requires: ((emacs "24.3")) +;; Package-Requires: ((emacs "24.3") (reformatter "0.6")) ;; Homepage: https://github.com/zig-lang/zig-mode ;; This file is free software; you can redistribute it and/or modify @@ -27,6 +27,8 @@ ;;; Code: +(require 'reformatter) + (defgroup zig-mode nil "Support for Zig code." :link '(url-link "https://ziglang.org/") @@ -52,7 +54,7 @@ (defcustom zig-zig-bin "zig" "Path to zig executable." - :type 'string + :type 'file :safe #'stringp :group 'zig-mode) @@ -79,14 +81,6 @@ If given a SOURCE, execute the CMD on it." args))) (compilation-start (concat zig-zig-bin " " cmd " " cmd-args)))) -;;;###autoload -(defun zig-toggle-format-on-save () - "Switch format before save on current buffer." - (interactive) - (if zig-format-on-save - (setq-local zig-format-on-save nil) - (setq-local zig-format-on-save t))) - ;;;###autoload (defun zig-compile () "Compile using `zig build`." @@ -123,42 +117,17 @@ If given a SOURCE, execute the CMD on it." (interactive) (zig--run-cmd "run" (buffer-file-name) "-O" zig-run-optimization-mode)) -(defvar zig-return-to-buffer-after-format nil - "Enable zig-format-buffer to return to file buffer after fmt is done.") +;; zig fmt -(defvar zig-ansi-color-for-format-errors nil - "Enable ansi-coloration of error output from zig fmt.") +(reformatter-define zig-format + :program zig-zig-bin + :args '("fmt" "--stdin") + :group 'zig-mode + :lighter " ZigFmt") -;;;###autoload -(defun zig-format-buffer () - "Format the current buffer using the zig fmt." - (interactive) - (let ((fmt-buffer-name "*zig-fmt*") - (file-buffer (current-buffer))) - ;; If we have an old *zig-fmt* buffer, we want to kill - ;; it and start a new one to show the new errors - (when (get-buffer fmt-buffer-name) - (switch-to-buffer-other-window fmt-buffer-name) - (quit-window) - (kill-buffer fmt-buffer-name)) - (let ((fmt-buffer (get-buffer-create fmt-buffer-name))) - (set-process-sentinel - (start-process "zig-fmt" - fmt-buffer - zig-zig-bin - "fmt" - (buffer-file-name)) - (lambda (process _e) - (if (> (process-exit-status process) 0) - (when zig-format-show-buffer - (progn - (pop-to-buffer fmt-buffer) - (when zig-ansi-color-for-format-errors - (ansi-color-apply-on-region (point-min) (point-max))) - (compilation-mode) - (when zig-return-to-buffer-after-format - (pop-to-buffer file-buffer)))) - (revert-buffer :ignore-auto :noconfirm))))))) +;;;###autoload (autoload 'zig-format-buffer "current-file" nil t) +;;;###autoload (autoload 'zig-format-region "current-file" nil t) +;;;###autoload (autoload 'zig-format-on-save-mode "current-file" nil t) (defun zig-re-word (inner) "Construct a regular expression for the word INNER." @@ -545,11 +514,8 @@ This is written mainly to be used as `end-of-defun-function' for Zig." nil nil nil nil (font-lock-syntactic-face-function . zig-mode-syntactic-face-function))) - (add-hook 'before-save-hook 'zig-before-save-hook nil t)) - -(defun zig-before-save-hook () (when zig-format-on-save - (zig-format-buffer))) + (zig-format-on-save-mode 1))) ;;;###autoload (add-to-list 'auto-mode-alist '("\\.zig\\'" . zig-mode))