emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/zig-mode e0bccb1 047/104: add zig-format-buffer command


From: ELPA Syncer
Subject: [nongnu] elpa/zig-mode e0bccb1 047/104: add zig-format-buffer command
Date: Sun, 29 Aug 2021 11:37:00 -0400 (EDT)

branch: elpa/zig-mode
commit e0bccb1114be0e03e8a507076e6ad5e9b9f6ee8b
Author: Marcio Giaxa <i@mgxm.me>
Commit: Marcio Giaxa <i@mgxm.me>

    add zig-format-buffer command
    
    By default the value of `zig-format-on-save` is set to `t`, meaning
    that the code is automatically formatted before saves, to disable it,
    you can set it to nil.
    Besides that, you can toggle the behavior on certain buffers using
    `M-x zig-toggle-format-on-save`.
    
    * adds defcustom:
     - zig-format-on-save
     - zig-zig-bin
    
    * adds defun:
     - zig-toggle-format-on-save
     - zig-format-buffer
---
 zig-mode.el | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 51 insertions(+), 2 deletions(-)

diff --git a/zig-mode.el b/zig-mode.el
index d0f8500..833eb0e 100644
--- a/zig-mode.el
+++ b/zig-mode.el
@@ -34,6 +34,51 @@
   :type 'integer
   :group 'zig-mode
   :safe #'integerp)
+
+(defcustom zig-format-on-save t
+  "Format buffers before saving using zig fmt."
+  :type 'boolean
+  :safe #'booleanp
+  :group 'zig-mode)
+
+(defcustom zig-zig-bin "zig"
+  "Path to zig executable."
+  :type 'string
+  :safe #'stringp
+  :group 'zig-mode)
+
+;; zig CLI commands
+
+;;;###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-format-buffer ()
+  "Format the current buffer using the zig fmt."
+  (interactive)
+  (let ((fmt-buffer-name "*zig-fmt*"))
+       ;; 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)
+         (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)
+                (when (> (process-exit-status process) 0)
+                  (switch-to-buffer-other-window fmt-buffer)
+                  (compilation-mode)))))))
+
 (defun zig-re-word (inner)
   "Construct a regular expression for the word INNER."
   (concat "\\<" inner "\\>"))
@@ -313,9 +358,13 @@
   (setq-local imenu-generic-expression zig-imenu-generic-expression)
   (setq font-lock-defaults '(zig-font-lock-keywords
                              nil nil nil nil
-                             (font-lock-syntactic-face-function
-                              . zig-mode-syntactic-face-function))))
+                             (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)))
 ;;;###autoload
 (add-to-list 'auto-mode-alist '("\\.zig\\'" . zig-mode))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]