GNU bug report logs -
#68297
[PATCH] Support indented continuation lines in lua-ts-mode
Previous Next
Reported by: john muhl <jm <at> pub.pink>
Date: Sat, 6 Jan 2024 22:03:01 UTC
Severity: wishlist
Tags: patch
Done: Stefan Kangas <stefankangas <at> gmail.com>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 68297 in the body.
You can then email your comments to 68297 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#68297
; Package
emacs
.
(Sat, 06 Jan 2024 22:03:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
john muhl <jm <at> pub.pink>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Sat, 06 Jan 2024 22:03:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
Add rules for indenting multi-line variables and if/elseif
statements, e.g.:
local very_long_variable_name =
"ABC"..
"XYZ"
local v = 123 *
456 +
789
if a
and b
or c then
print(1)
elseif b
and c
or a then
print(0)
end
The lua-ts-indent-continuation-lines option can be set to nil to
keep if statements flush left:
if a
and b
or c then
print(1)
elseif b
and c
or a then
print(0)
end
The option controlling this behavior in the EmmyLua code
formatter does not affect multi-line variables so neither does
lua-ts-indent-continuation-lines.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#68297
; Package
emacs
.
(Sat, 06 Jan 2024 22:40:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 68297 <at> debbugs.gnu.org (full text, mbox):
[0001-Support-indented-continuation-lines-in-lua-ts-mode.patch (text/x-patch, attachment)]
From 8e73025f048bcd5c405a19fc090f7c58cb728c5a Mon Sep 17 00:00:00 2001
From: john muhl <jm <at> pub.pink>
Date: Sat, 6 Jan 2024 09:36:33 -0600
Subject: [PATCH] Support indented continuation lines in lua-ts-mode
* lisp/progmodes/lua-ts-mode.el (lua-ts--simple-indent-rules):
Add a rule to indent multi-line assignments and if statements.
(lua-ts-indent-continuation-lines): New user option.
* test/lisp/progmodes/lua-ts-mode-resources/indent.erts: Add
tests. (bug#68279)
---
lisp/progmodes/lua-ts-mode.el | 47 ++++++++++++
.../lua-ts-mode-resources/indent.erts | 76 +++++++++++++++++++
2 files changed, 123 insertions(+)
diff --git a/lisp/progmodes/lua-ts-mode.el b/lisp/progmodes/lua-ts-mode.el
index e9ffb47cdb2..63a33a14ed7 100644
--- a/lisp/progmodes/lua-ts-mode.el
+++ b/lisp/progmodes/lua-ts-mode.el
@@ -150,6 +150,28 @@ lua-ts-align-params-and-props
:group 'lua-ts
:version "30.1")
+(defcustom lua-ts-indent-continuation-lines t
+ "Controls how multi-line if/else statements are aligned.
+
+If t, then continuation lines are indented by `lua-ts-indent-offset':
+
+ if a
+ and b then
+ print(1)
+ end
+
+If nil, then continuation lines are aligned with the beginning of
+the statement:
+
+ if a
+ and b then
+ print(1)
+ end"
+ :type 'boolean
+ :safe 'booleanp
+ :group 'lua-ts
+ :version "30.1")
+
(defvar lua-ts--builtins
'("assert" "bit32" "collectgarbage" "coroutine" "debug" "dofile"
"error" "getmetatable" "io" "ipairs" "load" "loadfile"
@@ -362,6 +384,17 @@ lua-ts--simple-indent-rules
((or (match "end" "function_definition")
(node-is "end"))
standalone-parent 0)
+ ((n-p-gp "expression_list" "assignment_statement" "variable_declaration")
+ lua-ts--variable-declaration-continuation-anchor
+ lua-ts-indent-offset)
+ ((and (parent-is "binary_expression")
+ lua-ts--variable-declaration-continuation)
+ lua-ts--variable-declaration-continuation-anchor
+ lua-ts-indent-offset)
+ ((and (lambda (&rest _) lua-ts-indent-continuation-lines)
+ (parent-is "binary_expression"))
+ standalone-parent lua-ts-indent-offset)
+ ((parent-is "binary_expression") standalone-parent 0)
((or (parent-is "function_declaration")
(parent-is "function_definition")
(parent-is "do_statement")
@@ -448,6 +481,20 @@ lua-ts--nested-function-last-function-matcher
(treesit-induce-sparse-tree parent #'lua-ts--function-definition-p)))
(= 1 (length (cadr sparse-tree)))))
+(defun lua-ts--variable-declaration-continuation (node &rest _)
+ "Matches if NODE is part of a multi-line variable declaration."
+ (treesit-parent-until node
+ (lambda (p)
+ (equal "variable_declaration"
+ (treesit-node-type p)))))
+
+(defun lua-ts--variable-declaration-continuation-anchor (node &rest _)
+ "Return the start position of the variable declaration for NODE."
+ (save-excursion
+ (goto-char (treesit-node-start
+ (lua-ts--variable-declaration-continuation node)))
+ (line-beginning-position)))
+
(defvar lua-ts--syntax-table
(let ((table (make-syntax-table)))
(modify-syntax-entry ?+ "." table)
diff --git a/test/lisp/progmodes/lua-ts-mode-resources/indent.erts b/test/lisp/progmodes/lua-ts-mode-resources/indent.erts
index 5e6ce7935f8..2e7384cac88 100644
--- a/test/lisp/progmodes/lua-ts-mode-resources/indent.erts
+++ b/test/lisp/progmodes/lua-ts-mode-resources/indent.erts
@@ -529,6 +529,46 @@ local Other = {
}
=-=-=
+Name: Continuation Indent
+
+=-=
+local very_long_variable_name =
+"ok"..
+ "ok"
+local n = a +
+b *
+c /
+1
+local x = "A"..
+"B"
+.."C"
+if a
+ and b
+ and c then
+elseif a
+ or b
+ or c then
+end
+=-=
+local very_long_variable_name =
+ "ok"..
+ "ok"
+local n = a +
+ b *
+ c /
+ 1
+local x = "A"..
+ "B"
+ .."C"
+if a
+ and b
+ and c then
+elseif a
+ or b
+ or c then
+end
+=-=-=
+
Code:
(lambda ()
(setq indent-tabs-mode nil)
@@ -711,3 +751,39 @@ tbl = {1,2,
3,4,
5,6}
=-=-=
+
+Code:
+ (lambda ()
+ (setq indent-tabs-mode nil)
+ (setq lua-ts-indent-continuation-lines nil)
+ (setq lua-ts-indent-offset 2)
+ (lua-ts-mode)
+ (indent-region (point-min) (point-max)))
+
+Name: Unaligned Continuation Indent
+
+=-=
+local n = a +
+ b *
+ c /
+ 1
+if a
+ and b
+and c then
+elseif a
+ or b
+ or c then
+end
+=-=
+local n = a +
+ b *
+ c /
+ 1
+if a
+and b
+and c then
+elseif a
+or b
+or c then
+end
+=-=-=
--
2.41.0
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#68297
; Package
emacs
.
(Sat, 06 Jan 2024 23:01:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 68297 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Ignore the previous. I accidentally made it from the wrong
branch. This one should apply cleanly.
[0001-Support-indented-continuation-lines-in-lua-ts-mode.patch (text/x-patch, attachment)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#68297
; Package
emacs
.
(Sun, 07 Jan 2024 00:44:02 GMT)
Full text and
rfc822 format available.
Message #14 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
...and now I see that only handled top-level statements. This
one works with nested ifs and variables too.
[0001-Support-indented-continuation-lines-in-lua-ts-mode.patch (text/x-patch, attachment)]
Severity set to 'wishlist' from 'normal'
Request was from
Stefan Kangas <stefankangas <at> gmail.com>
to
control <at> debbugs.gnu.org
.
(Thu, 11 Jan 2024 20:50:02 GMT)
Full text and
rfc822 format available.
Reply sent
to
Stefan Kangas <stefankangas <at> gmail.com>
:
You have taken responsibility.
(Thu, 11 Jan 2024 20:53:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
john muhl <jm <at> pub.pink>
:
bug acknowledged by developer.
(Thu, 11 Jan 2024 20:53:02 GMT)
Full text and
rfc822 format available.
Message #21 received at 68297-done <at> debbugs.gnu.org (full text, mbox):
john muhl <jm <at> pub.pink> writes:
> ...and now I see that only handled top-level statements. This
> one works with nested ifs and variables too.
Thanks, installed on master (43b4993d73b).
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Fri, 09 Feb 2024 12:24:20 GMT)
Full text and
rfc822 format available.
This bug report was last modified 1 year and 224 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.