Subject: bug#61131: closed (Re: bug#61131: [PATCH] Fix dockerfile-ts-mode line continuation indentation)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 29 Jan 2023 19:17:01 +0000

Your bug report

#61131: [PATCH] Fix dockerfile-ts-mode line continuation indentation

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
61131: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=61131
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#61131: [PATCH] Fix dockerfile-ts-mode line continuation indentation
From: Randy Taylor <[email-masked]>
To: Yuan Fu <[email-masked]>
Cc: "[email-masked]" <[email-masked]>
Date: Sun, 29 Jan 2023 19:16:05 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

On Sunday, January 29th, 2023 at 03:30, Yuan Fu <[email-masked]> wrote:
> 
> Randy Taylor [email-masked] writes:
> 
> > X-Debbugs-CC: [email-masked]
> > 
> > See attached patch.
> 
> 
> Thanks! Pushed.
> 
> Yuan

Thanks! Closing.

Subject: [PATCH] Fix dockerfile-ts-mode line continuation indentation
From: Randy Taylor <[email-masked]>
To: "[email-masked]" <[email-masked]>
Date: Sun, 29 Jan 2023 02:43:40 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

X-Debbugs-CC: [email-masked]

See attached patch.

From 8e2cde800da8d6a694a3626d255fd0d9952e1e8f Mon Sep 17 00:00:00 2001
From: Randy Taylor <[email-masked]>
Date: Sat, 28 Jan 2023 21:21:29 -0500
Subject: [PATCH] Fix dockerfile-ts-mode line continuation indentation

Without this rule, line continuations are only indented after entering
the contents for the line and hitting TAB or RET.

For example:
```
EXPOSE 1 \
```

After hitting RET to go to the next line, point would end up at BOL
instead of lining up with the previous entry, like so:
```
EXPOSE 1 \
2
```

The new rule will indent it as so:
```
EXPOSE 1 \
       2
```

* lisp/progmodes/dockerfile-ts-mode.el (dockerfile-ts-mode--indent-rules):
New rule.
(dockerfile-ts-mode--line-continuation-p)
(dockerfile-ts-mode--line-continuation-anchor): New functions.
---
 lisp/progmodes/dockerfile-ts-mode.el | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/lisp/progmodes/dockerfile-ts-mode.el b/lisp/progmodes/dockerfile-ts-mode.el
index 2a295e885b0..f2f30cf2617 100644
--- a/lisp/progmodes/dockerfile-ts-mode.el
+++ b/lisp/progmodes/dockerfile-ts-mode.el
@@ -51,9 +51,27 @@ dockerfile-ts-mode--indent-rules
      ((parent-is "expose_instruction") (nth-sibling 1) 0)
      ((parent-is "label_instruction") (nth-sibling 1) 0)
      ((parent-is "shell_command") first-sibling 0)
-     ((parent-is "string_array") first-sibling 1)))
+     ((parent-is "string_array") first-sibling 1)
+     ((dockerfile-ts-mode--line-continuation-p) dockerfile-ts-mode--line-continuation-anchor 0)))
   "Tree-sitter indent rules.")
 
+(defun dockerfile-ts-mode--line-continuation-p ()
+  "Return t if the current node is a line continuation node."
+  (lambda (node _ _ &rest _)
+    (string= (treesit-node-type node) "\n")))
+
+(defun dockerfile-ts-mode--line-continuation-anchor (_ _ &rest _)
+  "This anchor is used to align any nodes that are part of a line
+continuation to the previous entry."
+  (save-excursion
+    (forward-line -1)
+    (let ((prev-node (treesit-node-at (point))))
+      (if (string= (treesit-node-type prev-node) "\\\n")
+          (back-to-indentation)
+        (forward-word)
+        (forward-char))
+      (+ 1 (- (point) (pos-bol))))))
+
 (defvar dockerfile-ts-mode--keywords
   '("ADD" "ARG" "AS" "CMD" "COPY" "CROSS_BUILD" "ENTRYPOINT" "ENV"
     "EXPOSE" "FROM" "HEALTHCHECK" "LABEL" "MAINTAINER" "ONBUILD" "RUN"
-- 
2.39.1