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

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

[nongnu] elpa/nix-mode 9ab56cd6c9 035/500: Refactor indenting


From: ELPA Syncer
Subject: [nongnu] elpa/nix-mode 9ab56cd6c9 035/500: Refactor indenting
Date: Sat, 29 Jan 2022 08:26:33 -0500 (EST)

branch: elpa/nix-mode
commit 9ab56cd6c9d3f34fa8c1b1fa991e9ae7f896369c
Author: Matthew Bauer <mjbauer95@gmail.com>
Commit: Matthew Bauer <mjbauer95@gmail.com>

    Refactor indenting
---
 nix-mode.el | 64 ++++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 51 insertions(+), 13 deletions(-)

diff --git a/nix-mode.el b/nix-mode.el
index 95c5afdc1d..6ea8a238f6 100644
--- a/nix-mode.el
+++ b/nix-mode.el
@@ -150,22 +150,60 @@ If a close brace `}' ends an antiquote, the next 
character begins a string."
      (0 (ignore (nix-syntax-propertize-close-brace)))))
    start end))
 
-(defun nix-indent-level ()
-  "Get current indent level."
+(defun nix-indent-level-parens (p1)
+  "Find indent level based on parens."
+  (save-excursion
+    (beginning-of-line)
+    (let ((p2 (nth 1 (syntax-ppss))))
+      (if p2 (progn
+               (goto-char p2)
+               (backward-char)
+               (let ((l1 (line-number-at-pos p1))
+                     (l2 (line-number-at-pos p2)))
+                 (+ (if (eq l1 l2) 0 1) (nix-indent-level-parens p2))))
+        0))))
+
+(defun nix-indent-level-is-closing ()
+  "Go forward from beginning of line."
+  (save-excursion
+    (beginning-of-line)
+    (skip-chars-forward "[:space:]")
+    (or
+     (looking-at ")")
+     (looking-at "}")
+     (looking-at "''")
+     (looking-at ","))))
+
+(defun nix-indent-level-is-hanging ()
+  "Is hanging?"
   (save-excursion
     (beginning-of-line)
     (skip-chars-forward "[:space:]")
-    (let ((baseline (+
-                    (* tab-width (nth 0 (syntax-ppss)))
-                    (if (nth 3 (syntax-ppss)) tab-width 0))))
-      (cond
-       ;; ((looking-at "})") (- baseline (* 2 tab-width)))
-       ((looking-at "[]})]") (- baseline tab-width))
-       ((looking-at "''") (- baseline tab-width))
-       ((looking-at ", ") (- baseline tab-width))
-       ;; ((nix-inside-args) (- baseline tab-width))
-       ;; ((nix-inside-let) (+ baseline tab-width))
-       (t baseline)))))
+    (unless (or
+             (looking-at "}")
+             (looking-at ")"))
+      (forward-line -1)
+      (end-of-line)
+      (skip-chars-backward "\n[:space:]")
+      (while (nth 4 (syntax-ppss))
+       (goto-char (nth 8 (syntax-ppss)))
+       (skip-chars-backward "\n[:space:]"))
+      (forward-char -1)
+      (unless (or
+              (and (looking-at "/") (looking-back "*"))
+              (looking-at ";")
+              (looking-at ":")
+              (looking-at "{")
+              (looking-at "(")
+              (looking-at ","))
+         t))))
+
+(defun nix-indent-level ()
+  "Get current indent level."
+  (* tab-width (+
+                (nix-indent-level-parens (point))
+                (if (nix-indent-level-is-closing) -1
+                 (if (nix-indent-level-is-hanging) 1 0)))))
 
 (defun nix-indent-line ()
   "Indent current line in a Nix expression."



reply via email to

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