GNU bug report logs - #61142
29.0.60; java-ts-mode - Wrong indentation for the body of multiple lines conditions

Previous Next

Package: emacs;

Reported by: 太阳 <zjyzhaojiyang <at> hotmail.com>

Date: Sun, 29 Jan 2023 08:33:03 UTC

Severity: normal

Found in version 29.0.60

Fixed in version 29.1

Done: Theodor Thornhill <theo <at> thornhill.no>

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 61142 in the body.
You can then email your comments to 61142 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 29 Jan 2023 08:33:03 GMT) Full text and rfc822 format available.

Acknowledgement sent to 太阳 <zjyzhaojiyang <at> hotmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sun, 29 Jan 2023 08:33:03 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: 太阳 <zjyzhaojiyang <at> hotmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.0.60; java-ts-mode - Wrong indentation for the body of multiple
 lines conditions
Date: Sun, 29 Jan 2023 04:00:46 +0000
Hi
I mean for code like this:

```

public class T {
    public void F(String s) {
        if ("abc".equals(s)           // if condition occupies two lines.
            || "bcd".equals(s)) {
                return;                      // <==== this line has one more level of indentation
            }
    }
}
```
It seems that the body is indented according to the last line of the condition.

If the `if` condition is rewritten to one line, `return;` is indented correctly.

This also happens to multiple-line `while` (I haven't only tested `if` and `while`).


Thanks for your hard work. :)


In GNU Emacs 29.0.60 (build 14, x86_64-pc-linux-gnu, X toolkit, Xaw3d
 scroll bars) of 2023-01-29 built on tux-manjaro
Repository revision: 2bd0b9475384adfb4dd2cc794bbe1d8621546717
Repository branch: makepkg
Windowing system distributor 'The X.Org Foundation', version 11.0.12101006
System Description: Manjaro Linux

Configured using:
 'configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib
 --localstatedir=/var --mandir=/usr/share/man --with-gameuser=:games
 --with-modules --without-libotf --without-m17n-flt --without-gconf
 --with-native-compilation=no --with-xinput2 --with-x-toolkit=lucid
 --with-xft --with-xaw3d --without-cairo --with-sound=no
 --with-tree-sitter --without-gpm --without-compress-install
 '--program-transform-name=s/\([ec]tags\)/\1.emacs/'
 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions
 -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security
 -fstack-clash-protection -fcf-protection'
 LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now'

Configured features:
ACL DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON LCMS2
LIBSYSTEMD LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP
SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XAW3D XDBE
XFT XIM XINPUT2 XPM LUCID ZLIB

Important settings:
  value of $LC_MONETARY: zh_CN.UTF-8
  value of $LC_NUMERIC: zh_CN.UTF-8
  value of $LC_TIME: zh_CN.UTF-8
  value of $LANG: zh_CN.UTF-8
  value of $XMODIFIERS: @im=fcitx
  locale-coding-system: utf-8

Major mode: Java

Minor modes in effect:
  yas-global-mode: t
  yas-minor-mode: t
  winner-mode: t
  recentf-mode: t
  helm--remap-mouse-mode: t
  async-bytecomp-package-mode: t
  which-function-mode: t
  hl-todo-mode: t
  dumb-jump-mode: t
  yafolding-mode: t
  auto-dim-other-buffers-mode: t
  global-display-line-numbers-mode: t
  display-line-numbers-mode: t
  global-so-long-mode: t
  global-hl-line-mode: t
  super-save-mode: t
  ctags-global-auto-update-mode: t
  ctags-auto-update-mode: t
  highlight-symbol-mode: t
  hungry-delete-mode: t
  corfu-history-mode: t
  corfu-popupinfo-mode: t
  global-corfu-mode: t
  corfu-mode: t
  evil-escape-mode: t
  global-evil-surround-mode: t
  evil-surround-mode: t
  shell-dirtrack-mode: t
  evil-local-mode: t
  windmove-mode: t
  eww-plus-mode: t
  all-the-icons-ivy-rich-mode: t
  ivy-rich-project-root-cache-mode: t
  ivy-rich-mode: t
  ivy-mode: t
  global-highlight-parentheses-mode: t
  highlight-parentheses-mode: t
  electric-pair-mode: t
  which-key-mode: t
  psessionm-mode: t
  psessionm-savehist-mode: t
  ace-pinyin-global-mode: t
  ace-pinyin-mode: t
  global-anzu-mode: t
  anzu-mode: t
  amx-mode: t
  auto-compile-on-load-mode: t
  auto-compile-on-save-mode: t
  override-global-mode: t
  save-place-mode: t
  display-time-mode: t
  global-auto-revert-mode: t
  gcmh-mode: t
  tooltip-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/home/lucency/.emacs.d/data/unsync/elpa29/transient-20230124.2013/transient hides /usr/share/emacs/29.0.60/lisp/transient
/home/lucency/.emacs.d/data/unsync/elpa29/use-package-20221209.2013/use-package-bind-key hides /usr/share/emacs/29.0.60/lisp/use-package/use-package-bind-key
/home/lucency/.emacs.d/data/unsync/elpa29/use-package-20221209.2013/use-package-diminish hides /usr/share/emacs/29.0.60/lisp/use-package/use-package-diminish
/home/lucency/.emacs.d/data/unsync/elpa29/use-package-20221209.2013/use-package-lint hides /usr/share/emacs/29.0.60/lisp/use-package/use-package-lint
/home/lucency/.emacs.d/data/unsync/elpa29/use-package-20221209.2013/use-package hides /usr/share/emacs/29.0.60/lisp/use-package/use-package
/home/lucency/.emacs.d/data/unsync/elpa29/use-package-20221209.2013/use-package-ensure hides /usr/share/emacs/29.0.60/lisp/use-package/use-package-ensure
/home/lucency/.emacs.d/data/unsync/elpa29/use-package-20221209.2013/use-package-core hides /usr/share/emacs/29.0.60/lisp/use-package/use-package-core
/home/lucency/.emacs.d/data/unsync/elpa29/use-package-20221209.2013/use-package-delight hides /usr/share/emacs/29.0.60/lisp/use-package/use-package-delight
/home/lucency/.emacs.d/data/unsync/elpa29/use-package-20221209.2013/use-package-jump hides /usr/share/emacs/29.0.60/lisp/use-package/use-package-jump
/home/lucency/.emacs.d/data/unsync/elpa29/bind-key-20221209.2013/bind-key hides /usr/share/emacs/29.0.60/lisp/use-package/bind-key

Features:
(shadow mail-extr emacsbug message yank-media rfc822 mml mml-sec epa epg
rfc6068 epg-config mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils sendmail rfc2047 rfc2045 ietf-drums mule-util
dabbrev helm-command helm-mode modern-cpp-font-lock cc-mode cc-fonts
cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs
yasnippet-snippets yasnippet winner ffap recentf tree-widget
tramp-archive tramp-gvfs dbus helm-x-files helm-for-files helm-bookmark
helm-adaptive helm-external helm-net helm-misc helm-elisp helm-files
image-dired image-dired-tags image-dired-external image-dired-util
helm-buffers helm-occur helm-tags helm-locate helm-grep helm-regexp
helm-eval helm-info helm-utils helm-types helm-help helm
helm-global-bindings helm-easymenu helm-core async-bytecomp helm-source
helm-multi-match helm-lib which-func imenu hl-todo dumb-jump yafolding
auto-dim-other-buffers display-line-numbers so-long hl-line super-save
ivy-stock stock-analyze stock-leek stock stock-baostock stock-tushare
stock-db stock-db-tushare stock-db-baostock stock-util stock-struct csv
gitec gnuplot info-look aggressive-indent java-ts-mode c-ts-common
ob-rust cmake-mode rst flymake-cursor ctags-update etags fileloop
highlight-symbol hungry-delete topsy treesit pb corfu-history
corfu-popupinfo cape corfu cal-china-x cal-china lunar solar cal-dst
holidays holiday-loaddefs language-chunk lc-memo lc-corpus lc-storage
lc-db emacsql-sqlite3 emacsql emacsql-compiler lc-util lc-struct
lc-const ivy-anotes anotes anotes-struct counsel-deft f f-shortdoc
dash-docs gnutls doc-view jka-compr image-mode exif vterm vc-git
diff-mode vc-dispatcher bookmark tramp tramp-loaddefs trampver
tramp-integration tramp-compat parse-time iso8601 ls-lisp term
disp-table ehelp vterm-module term/xterm xterm evil-god-state god-mode
evil-escape evil-surround evil-anzu evil evil-keybindings evil-maps
evil-commands reveal evil-jumps evil-command-window evil-search evil-ex
shell evil-types evil-macros evil-repeat evil-states evil-core
evil-common windmove calc calc-loaddefs calc-macs rect evil-digraphs
evil-vars diminish eww-plus eww url-queue shr-tag-pre-highlight
language-detection shrface shr pixel-fill kinsoku url-file svg xml dom
puny mm-url gnus nnheader gnus-util range mm-util mail-prsvr request
mailheader mail-utils bm ivy-xref ivy-hydra hydra lv
all-the-icons-ivy-rich all-the-icons all-the-icons-faces data-material
data-weathericons data-octicons data-fileicons data-faicons
data-alltheicons ivy-rich ivy-plus pulse flymake-proc flymake warnings
heap counsel xref project dired-open dired-hacks-utils dired-x dired
dired-loaddefs compile text-property-search swiper ivy ivy-faces
ivy-overlay colir color weblorg templatel em-glob esh-util cus-edit
wid-edit files-x ox-odt rng-loc rng-uri rng-parse rng-match rng-dt
rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex
ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-appear
org-element org-persist xdg org-id org-refile avl-tree generator
diary-lib diary-loaddefs org ob ob-tangle ob-ref ob-lob ob-table ob-exp
org-macro org-src ob-comint org-pcomplete pcomplete comint ansi-osc
ansi-color org-list org-footnote org-faces org-entities time-date
noutline outline icons ob-emacs-lisp ob-core ob-eval org-cycle org-table
ol org-fold org-fold-core org-keys oc org-loaddefs cal-menu calendar
cal-loaddefs org-version org-compat org-macs highlight-parentheses
log4j-mode elec-pair which-key psessionm gitignore-mode vundo pcase
pyim-cstring-utils pyim-cregexp-utils pyim pyim-cloudim pyim-probe
pyim-preview pyim-page popup posframe-plus posframe pyim-indicator
pyim-dregcache pyim-dhashcache sort pyim-dict async pyim-autoselector
pyim-process pyim-punctuation pyim-outcome pyim-candidates pyim-cstring
pyim-cregexp xr rx pyim-codes pyim-imobjs pyim-pinyin pyim-entered
pyim-dcache pyim-pymap pyim-scheme pyim-common ace-pinyin avy ring
pinyinlib anzu thingatpt amx s transient format-spec compat ht dash
use-package-diminish auto-compile ispell edmacro kmacro
use-package-bind-key bind-key easy-mmode conf-mode saveplace time server
pinentry autorevert filenotify tab-line doom-vibrant-theme
doom-themes-ext-org doom-themes-ext-visual-bell face-remap doom-themes
doom-themes-base gcmh cl-extra use-package-core delsel cus-load
finder-inf amx-autoloads all-the-icons-ivy-rich-autoloads
corfu-doc-autoloads dired-open-autoloads helm-autoloads
helm-core-autoloads auto-compile-autoloads evil-surround-autoloads
use-package-autoloads rainbow-mode-autoloads alert-autoloads
cal-china-x-autoloads posframe-autoloads hungry-delete-autoloads
counsel-autoloads sdcv-autoloads smart-compile-autoloads
eww-lnum-autoloads elfeed-autoloads jsonian-autoloads corfu-autoloads
expand-region-autoloads hide-lines-autoloads php-mode-autoloads
magit-autoloads magit-section-autoloads ivy-rich-autoloads
crontab-mode-autoloads yaml-mode-autoloads topsy-autoloads
company-box-autoloads frame-local-autoloads dumb-jump-autoloads
ivy-hydra-autoloads sql-indent-autoloads highlight-symbol-autoloads
git-modes-autoloads cape-autoloads evil-tutor-autoloads
pinentry-autoloads request-autoloads heap-autoloads showtip-autoloads
go-mode-autoloads highlight-parentheses-autoloads powerline-autoloads
ascii-table-autoloads vundo-autoloads shr-tag-pre-highlight-autoloads
log4j-mode-autoloads youdao-dictionary-autoloads derived pp names edebug
debug backtrace help-mode find-func names-autoloads advice
gcmh-autoloads hl-todo-autoloads hydra-autoloads lv-autoloads
ob-rust-autoloads rust-mode-autoloads git-commit-autoloads
with-editor-autoloads chinese-word-at-point-autoloads iedit-autoloads
diminish-autoloads language-detection-autoloads vterm-autoloads
doom-themes-autoloads evil-anzu-autoloads anzu-autoloads popup-autoloads
packed-autoloads evil-escape-autoloads evil-autoloads
emacsql-sqlite3-autoloads emacsql-autoloads ace-pinyin-autoloads
pinyinlib-autoloads avy-autoloads auto-dim-other-buffers-autoloads
pos-tip-autoloads async-autoloads ht-autoloads
yasnippet-snippets-autoloads yasnippet-autoloads templatel-autoloads
gntp-autoloads eshell-toggle-autoloads xr-autoloads org-appear-autoloads
gnuplot-autoloads cargo-autoloads markdown-mode-autoloads
htmlize-autoloads sqlup-mode-autoloads modern-cpp-font-lock-autoloads
unicad-autoloads super-save-autoloads queue-autoloads bind-key-autoloads
aggressive-indent-autoloads which-key-autoloads
company-statistics-autoloads company-autoloads log4e-autoloads
transient-autoloads compat-autoloads csv-mode-autoloads
helpful-autoloads elisp-refs-autoloads f-autoloads s-autoloads
rfc-mode-autoloads web-mode-autoloads swiper-autoloads ivy-autoloads
dired-hacks-utils-autoloads info dash-autoloads
dockerfile-mode-autoloads all-the-icons-autoloads kv-autoloads
goto-chg-autoloads bm-autoloads package-installer-package package
browse-url url url-proxy url-privacy url-expand url-methods url-history
url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers
url-parse auth-source cl-seq eieio eieio-core cl-macs password-cache
json subr-x map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs
cl-lib china-util rmc iso-transl tooltip cconv eldoc paren electric
uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting x-toolkit
xinput2 x multi-tty make-network-process emacs)

Memory information:
((conses 16 868713 194867)
 (symbols 48 55153 0)
 (strings 32 258665 59271)
 (string-bytes 1 7565062)
 (vectors 16 286268)
 (vector-slots 8 2047867 360407)
 (floats 8 92581 819)
 (intervals 56 5305 1112)
 (buffers 984 19))

-- 
发送自 Vivaldi 邮件。访问 vivaldi.com 免费下载




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Wed, 01 Feb 2023 09:14:03 GMT) Full text and rfc822 format available.

Message #8 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: 太阳 <zjyzhaojiyang <at> hotmail.com>
To: 61142 <at> debbugs.gnu.org, GNU bug Tracking System <help-debbugs <at> gnu.org>
Subject: Re: bug#61142: Acknowledgement (29.0.60; java-ts-mode - Wrong
 indentation for the body of multiple lines conditions)
Date: Wed, 01 Feb 2023 08:46:28 +0000
After reading treesit's manual, I found that we can use `n-p-gp` as the matcher and `grand-parent` as the anchor to match the body of `if` (and `while`, which has a similar issue). 

I mean a rule looks like the following:
```
((n-p-gp nil "block" "if_statement") grand-parent java-ts-mode-indent-offset)
```


GNU bug Tracking System 在 2023年01月29日 星期日 16时33分03秒 (+08:00) 写道:


> Thank you for filing a new bug report with debbugs.gnu.org.

> 

> This is an automatically generated reply to let you know your message

> has been received.

> 

> Your message is being forwarded to the package maintainers and other

> interested parties for their attention; they will reply in due course.

> 

> Your message has been sent to the package maintainer(s):

>  bug-gnu-emacs <at> gnu.org

> 

> If you wish to submit further information on this problem, please

> send it to 61142 <at> debbugs.gnu.org.

> 

> Please do not send mail to help-debbugs <at> gnu.org unless you wish

> to report a problem with the Bug-tracking system.

> 

-- 
发送自 Vivaldi 邮件。访问 vivaldi.com 免费下载




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sat, 04 Feb 2023 10:46:02 GMT) Full text and rfc822 format available.

Message #11 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Theodor Thornhill <theo <at> thornhill.no>
To: 太阳 <zjyzhaojiyang <at> hotmail.com>
Cc: 61142 <at> debbugs.gnu.org
Subject: Re: bug#61142: 29.0.60; java-ts-mode - Wrong indentation for the
 body of multiple lines conditions
Date: Sat, 04 Feb 2023 11:45:31 +0100
太阳 <zjyzhaojiyang <at> hotmail.com> writes:

> After reading treesit's manual, I found that we can use `n-p-gp` as the matcher
> and `grand-parent` as the anchor to match the body of `if` (and `while`, which
> has a similar issue).
>
> I mean a rule looks like the following:
>
> ```
> ((n-p-gp nil "block" "if_statement") grand-parent java-ts-mode-indent-offset)
> ```
>
>


Thanks!  We have a mechanism in place for this, see
'c-ts-common-statement-offset' in 'c-ts-common.el'.  I didn't get to it
yet, but I'll try to look at it this evening, unless you want to?  See
c-ts-mode for examples of how to use it, if you're interested!

Theo




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 07:54:01 GMT) Full text and rfc822 format available.

Message #14 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Theodor Thornhill <theo <at> thornhill.no>
To: 太阳 <zjyzhaojiyang <at> hotmail.com>
Cc: 61142 <at> debbugs.gnu.org
Subject: Re: bug#61142: 29.0.60; java-ts-mode - Wrong indentation for the
 body of multiple lines conditions
Date: Sun, 05 Feb 2023 08:53:33 +0100
[Message part 1 (text/plain, inline)]
Theodor Thornhill <theo <at> thornhill.no> writes:

> 太阳 <zjyzhaojiyang <at> hotmail.com> writes:
>
>> After reading treesit's manual, I found that we can use `n-p-gp` as the matcher
>> and `grand-parent` as the anchor to match the body of `if` (and `while`, which
>> has a similar issue).
>>
>> I mean a rule looks like the following:
>>
>> ```
>> ((n-p-gp nil "block" "if_statement") grand-parent java-ts-mode-indent-offset)
>> ```
>>
>>
>
>
> Thanks!  We have a mechanism in place for this, see
> 'c-ts-common-statement-offset' in 'c-ts-common.el'.  I didn't get to it
> yet, but I'll try to look at it this evening, unless you want to?  See
> c-ts-mode for examples of how to use it, if you're interested!
>
> Theo

Hi again!

Can you test this patch for me?

@Eli: Is this ok for emacs-29?  I'd love to add some test for this, but
now they are on the master branch.  What is the common procedure to move
stuff from master branch to the release branch?  I _can_ just add some
test to the master branch, but it would be nice to have them on emacs-29
too :-)

Theo

[0001-Use-c-ts-common-statement-offset-in-java-ts-mode.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 07:55:02 GMT) Full text and rfc822 format available.

Message #17 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Theodor Thornhill <theo <at> thornhill.no>
To: 太阳 <zjyzhaojiyang <at> hotmail.com>
Cc: 61142 <at> debbugs.gnu.org, eliz <at> gnu.org
Subject: Re: bug#61142: 29.0.60; java-ts-mode - Wrong indentation for the
 body of multiple lines conditions
Date: Sun, 05 Feb 2023 08:54:51 +0100
(Actually adding Eli to Cc...)

> @Eli: Is this ok for emacs-29?  I'd love to add some test for this, but
> now they are on the master branch.  What is the common procedure to move
> stuff from master branch to the release branch?  I _can_ just add some
> test to the master branch, but it would be nice to have them on emacs-29
> too :-)
>


Theo





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 09:21:02 GMT) Full text and rfc822 format available.

Message #20 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Theodor Thornhill <theo <at> thornhill.no>
Cc: 61142 <at> debbugs.gnu.org, zjyzhaojiyang <at> hotmail.com
Subject: Re: bug#61142: 29.0.60;
 java-ts-mode - Wrong indentation for the body of multiple lines
 conditions
Date: Sun, 05 Feb 2023 11:20:27 +0200
> Cc: 61142 <at> debbugs.gnu.org
> Date: Sun, 05 Feb 2023 08:53:33 +0100
> From:  Theodor Thornhill via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> 
> Theodor Thornhill <theo <at> thornhill.no> writes:
> 
> > 太阳 <zjyzhaojiyang <at> hotmail.com> writes:
> >
> >> After reading treesit's manual, I found that we can use `n-p-gp` as the matcher
> >> and `grand-parent` as the anchor to match the body of `if` (and `while`, which
> >> has a similar issue).
> >>
> >> I mean a rule looks like the following:
> >>
> >> ```
> >> ((n-p-gp nil "block" "if_statement") grand-parent java-ts-mode-indent-offset)
> >> ```
> >>
> >>
> >
> >
> > Thanks!  We have a mechanism in place for this, see
> > 'c-ts-common-statement-offset' in 'c-ts-common.el'.  I didn't get to it
> > yet, but I'll try to look at it this evening, unless you want to?  See
> > c-ts-mode for examples of how to use it, if you're interested!
> >
> > Theo
> 
> Hi again!
> 
> Can you test this patch for me?
> 
> @Eli: Is this ok for emacs-29?  I'd love to add some test for this, but
> now they are on the master branch.  What is the common procedure to move
> stuff from master branch to the release branch?  I _can_ just add some
> test to the master branch, but it would be nice to have them on emacs-29
> too :-)

The procedure is "git cherry-pick", but I don't think I understand
what exactly is the problem here and what is the solution suggested to
solve it.  Also, why does it need to be on emacs-29.  Can you help me
understand that?

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 09:29:02 GMT) Full text and rfc822 format available.

Message #23 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Theodor Thornhill <theo <at> thornhill.no>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 61142 <at> debbugs.gnu.org, zjyzhaojiyang <at> hotmail.com
Subject: Re: bug#61142: 29.0.60; java-ts-mode - Wrong indentation for the
 body of multiple lines conditions
Date: Sun, 05 Feb 2023 10:28:29 +0100
Eli Zaretskii <eliz <at> gnu.org> writes:

>
> The procedure is "git cherry-pick", but I don't think I understand
> what exactly is the problem here and what is the solution suggested to
> solve it.  Also, why does it need to be on emacs-29.  Can you help me
> understand that?
>

No need to have the test files on emacs-29.  I could just as well add a
test when emacs-29 is synced to master later.  The test-files themselves
don't exist on emacs-29.

Theo




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 10:16:01 GMT) Full text and rfc822 format available.

Message #26 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Theodor Thornhill <theo <at> thornhill.no>
Cc: 61142 <at> debbugs.gnu.org, zjyzhaojiyang <at> hotmail.com
Subject: Re: bug#61142: 29.0.60; java-ts-mode - Wrong indentation for the
 body of multiple lines conditions
Date: Sun, 05 Feb 2023 12:15:47 +0200
> From: Theodor Thornhill <theo <at> thornhill.no>
> Cc: zjyzhaojiyang <at> hotmail.com, 61142 <at> debbugs.gnu.org
> Date: Sun, 05 Feb 2023 10:28:29 +0100
> 
> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
> >
> > The procedure is "git cherry-pick", but I don't think I understand
> > what exactly is the problem here and what is the solution suggested to
> > solve it.  Also, why does it need to be on emacs-29.  Can you help me
> > understand that?
> >
> 
> No need to have the test files on emacs-29.  I could just as well add a
> test when emacs-29 is synced to master later.  The test-files themselves
> don't exist on emacs-29.

OK, but still: what exactly is the problem that your patch is trying
to fix?  I didn't understand that from the original report.

And one comment to the patch:

> @@ -300,6 +302,20 @@ java-ts-mode
>    (c-ts-common-comment-setup)
>  
>    ;; Indent.
> +  (setq-local c-ts-common-indent-block-type-regexp
> +              (rx (or "class_body"
> +                      "\\`array_initializer"
> +                      "annotation_type_body"
> +                      "interface_body"
> +                      "interface_constructor_body"
> +                      "enum_body"
> +                      "switch_block"
> +                      "record_declaration_body"
> +                      "block")))
> +  (setq-local c-ts-common-indent-bracketless-type-regexp
> +              (rx (or "if_statement" "do_statement"
> +                      "for_statement" "while_statement")))
> +  (setq-local c-ts-common-indent-offset 'java-ts-mode-indent-offset)
>    (setq-local treesit-simple-indent-rules java-ts-mode--indent-rules)
>  
>    ;; Electric

Why are we adding a c-ts-common-SOMETHING variable to java-ts-mode.el?
Shouldn't it be named java-ts-SOMETHING instead?  Or am I missing
something?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 10:27:02 GMT) Full text and rfc822 format available.

Message #29 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Theodor Thornhill <theo <at> thornhill.no>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 61142 <at> debbugs.gnu.org, zjyzhaojiyang <at> hotmail.com
Subject: Re: bug#61142: 29.0.60; java-ts-mode - Wrong indentation for the body of multiple lines conditions
Date: Sun, 05 Feb 2023 11:25:52 +0100

On 5 February 2023 11:15:47 CET, Eli Zaretskii <eliz <at> gnu.org> wrote:
>> From: Theodor Thornhill <theo <at> thornhill.no>
>> Cc: zjyzhaojiyang <at> hotmail.com, 61142 <at> debbugs.gnu.org
>> Date: Sun, 05 Feb 2023 10:28:29 +0100
>> 
>> Eli Zaretskii <eliz <at> gnu.org> writes:
>> 
>> >
>> > The procedure is "git cherry-pick", but I don't think I understand
>> > what exactly is the problem here and what is the solution suggested to
>> > solve it.  Also, why does it need to be on emacs-29.  Can you help me
>> > understand that?
>> >
>> 
>> No need to have the test files on emacs-29.  I could just as well add a
>> test when emacs-29 is synced to master later.  The test-files themselves
>> don't exist on emacs-29.
>
>OK, but still: what exactly is the problem that your patch is trying
>to fix?  I didn't understand that from the original report.
>

Oh right! 

There are some indentation issues where if you have 

void foo(
  String foo) {
  // ...
}

Then the normal code will indent like

void foo(
  String foo) {
    //...
}

Because of the parent-bol anchor. When these paired brackets are nested (and some other cases) we have to find the grand-parent, but that caused some other issues with ie c-ts-mode where compound_statements can be nested _and_ siblings. Yuan made an effort to make this work in c-ts-mode due to the many bug reports. He then generalized it into c-ts-common, for use in other modes, like java.

This patch adds support for that in java.


>And one comment to the patch:
>
>> @@ -300,6 +302,20 @@ java-ts-mode
>>    (c-ts-common-comment-setup)
>>  
>>    ;; Indent.
>> +  (setq-local c-ts-common-indent-block-type-regexp
>> +              (rx (or "class_body"
>> +                      "\\`array_initializer"
>> +                      "annotation_type_body"
>> +                      "interface_body"
>> +                      "interface_constructor_body"
>> +                      "enum_body"
>> +                      "switch_block"
>> +                      "record_declaration_body"
>> +                      "block")))
>> +  (setq-local c-ts-common-indent-bracketless-type-regexp
>> +              (rx (or "if_statement" "do_statement"
>> +                      "for_statement" "while_statement")))
>> +  (setq-local c-ts-common-indent-offset 'java-ts-mode-indent-offset)
>>    (setq-local treesit-simple-indent-rules java-ts-mode--indent-rules)
>>  
>>    ;; Electric
>
>Why are we adding a c-ts-common-SOMETHING variable to java-ts-mode.el?
>Shouldn't it be named java-ts-SOMETHING instead?  Or am I missing
>something?

This is because there is some setup involved in the new bracket-counting code in c-ts-common.

Theo




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 11:00:02 GMT) Full text and rfc822 format available.

Message #32 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Theodor Thornhill <theo <at> thornhill.no>
Cc: 61142 <at> debbugs.gnu.org, zjyzhaojiyang <at> hotmail.com
Subject: Re: bug#61142: 29.0.60;
 java-ts-mode - Wrong indentation for the body of multiple lines
 conditions
Date: Sun, 05 Feb 2023 12:59:43 +0200
> Date: Sun, 05 Feb 2023 11:25:52 +0100
> From: Theodor Thornhill <theo <at> thornhill.no>
> CC: zjyzhaojiyang <at> hotmail.com, 61142 <at> debbugs.gnu.org
> 
> There are some indentation issues where if you have 
> 
> void foo(
>   String foo) {
>   // ...
> }
> 
> Then the normal code will indent like
> 
> void foo(
>   String foo) {
>     //...
> }
> 
> Because of the parent-bol anchor. When these paired brackets are nested (and some other cases) we have to find the grand-parent, but that caused some other issues with ie c-ts-mode where compound_statements can be nested _and_ siblings. Yuan made an effort to make this work in c-ts-mode due to the many bug reports. He then generalized it into c-ts-common, for use in other modes, like java.
> 
> This patch adds support for that in java.
> 
> 
> >And one comment to the patch:
> >
> >> @@ -300,6 +302,20 @@ java-ts-mode
> >>    (c-ts-common-comment-setup)
> >>  
> >>    ;; Indent.
> >> +  (setq-local c-ts-common-indent-block-type-regexp
> >> +              (rx (or "class_body"
> >> +                      "\\`array_initializer"
> >> +                      "annotation_type_body"
> >> +                      "interface_body"
> >> +                      "interface_constructor_body"
> >> +                      "enum_body"
> >> +                      "switch_block"
> >> +                      "record_declaration_body"
> >> +                      "block")))
> >> +  (setq-local c-ts-common-indent-bracketless-type-regexp
> >> +              (rx (or "if_statement" "do_statement"
> >> +                      "for_statement" "while_statement")))
> >> +  (setq-local c-ts-common-indent-offset 'java-ts-mode-indent-offset)
> >>    (setq-local treesit-simple-indent-rules java-ts-mode--indent-rules)
> >>  
> >>    ;; Electric
> >
> >Why are we adding a c-ts-common-SOMETHING variable to java-ts-mode.el?
> >Shouldn't it be named java-ts-SOMETHING instead?  Or am I missing
> >something?
> 
> This is because there is some setup involved in the new bracket-counting code in c-ts-common.

OK, please install on emacs-29, and thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 19:20:01 GMT) Full text and rfc822 format available.

Message #35 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Theodor Thornhill <theo <at> thornhill.no>
To: 赵 纪阳 <zjyzhaojiyang <at> hotmail.com>
Cc: "61142 <at> debbugs.gnu.org" <61142 <at> debbugs.gnu.org>
Subject: Re: 回复: bug#61142: 29.0.60; java-ts-mode -
 Wrong indentation for the body of multiple lines conditions
Date: Sun, 05 Feb 2023 20:19:19 +0100
[Message part 1 (text/plain, inline)]
赵 纪阳 <zjyzhaojiyang <at> hotmail.com> writes:

> Thanks for the patch.
>

Thanks for testing!

> I've not tested this patch adequately, but I found an issue:
> java-ts-mode indents the body of `else if` with one more level of indentation.
>
> ```
> public class T {
>     int f() {
>         int a = 0;
>         int b = 1;
>         if (a == 0
>             && b == 1) {
>             // indentation ok
>             return 0;
>         } else if (a == 1 ) {
>                 // indentation more
>                 return 1;
>             }
>     }
> }
> ```
> If the second branch of the if-statement is just an `else` (not `else if`), the body of it will be indented correctly.
>
>
> I've also tested c-ts-mode (use 'linux as c-ts-mode-indent-style) and it also has this kind of problem.
> ```
> int main() {
>     int a = 0;
>     if (a == 0) {
>         // indentation ok
>     } else if (a == 2) {
>             // indentation more
>         }
> }
> ```
>

Right, I remember this.  This finally made me create a fix - can you
test the provided patch and check if this works for you?  It works
nicely for me, at least.

Theo

[0001-Use-c-ts-common-statement-offset-in-java-ts-mode.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 19:31:01 GMT) Full text and rfc822 format available.

Message #38 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Theodor Thornhill <theo <at> thornhill.no>
Cc: 61142 <at> debbugs.gnu.org, zjyzhaojiyang <at> hotmail.com
Subject: Re: bug#61142: 回复: bug#61142: 29.0.60;
 java-ts-mode - Wrong indentation for the body of multiple lines
 conditions
Date: Sun, 05 Feb 2023 21:30:29 +0200
> Cc: "61142 <at> debbugs.gnu.org" <61142 <at> debbugs.gnu.org>
> Date: Sun, 05 Feb 2023 20:19:19 +0100
> From:  Theodor Thornhill via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> 
> +(defvar c-ts-common-nestable-if-statement-p t
> +  "Does the current parser nest if-else statements?
> +
> +T if the current tree-sitter grammar nests the else if
> +statements, NIL otherwise.")

A nit: we use t and nil, lowercase, to refer to these two symbols.

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 19:33:02 GMT) Full text and rfc822 format available.

Message #41 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Theodor Thornhill <theo <at> thornhill.no>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 61142 <at> debbugs.gnu.org, zjyzhaojiyang <at> hotmail.com
Subject: Re: bug#61142: 回复: bug#61142: 29.0.60;
 java-ts-mode - Wrong
 indentation for the body of multiple lines conditions
Date: Sun, 05 Feb 2023 20:32:51 +0100
Eli Zaretskii <eliz <at> gnu.org> writes:

>> Cc: "61142 <at> debbugs.gnu.org" <61142 <at> debbugs.gnu.org>
>> Date: Sun, 05 Feb 2023 20:19:19 +0100
>> From:  Theodor Thornhill via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>> 
>> +(defvar c-ts-common-nestable-if-statement-p t
>> +  "Does the current parser nest if-else statements?
>> +
>> +T if the current tree-sitter grammar nests the else if
>> +statements, NIL otherwise.")
>
> A nit: we use t and nil, lowercase, to refer to these two symbols.
>
> Thanks.

Thanks!

Theo




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 20:13:01 GMT) Full text and rfc822 format available.

Message #44 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Theodor Thornhill <theo <at> thornhill.no>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 61142 <at> debbugs.gnu.org, zjyzhaojiyang <at> hotmail.com
Subject: Re: bug#61142: 回复: bug#61142: 29.0.60;
 java-ts-mode - Wrong
 indentation for the body of multiple lines conditions
Date: Sun, 05 Feb 2023 21:12:23 +0100
[Message part 1 (text/plain, inline)]
Theodor Thornhill <theo <at> thornhill.no> writes:

> Eli Zaretskii <eliz <at> gnu.org> writes:
>
>>> Cc: "61142 <at> debbugs.gnu.org" <61142 <at> debbugs.gnu.org>
>>> Date: Sun, 05 Feb 2023 20:19:19 +0100
>>> From:  Theodor Thornhill via "Bug reports for GNU Emacs,
>>>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>> 
>>> +(defvar c-ts-common-nestable-if-statement-p t
>>> +  "Does the current parser nest if-else statements?
>>> +
>>> +T if the current tree-sitter grammar nests the else if
>>> +statements, NIL otherwise.")
>>
>> A nit: we use t and nil, lowercase, to refer to these two symbols.
>>
>> Thanks.
>
> Thanks!
>
> Theo

I added some small tweaks, and will add the following as a test later:

```
public class Java {
    
    public Java(
        String foo) {
        this.foo = foo;
    }

    void foo(
        String foo) {

        for (var f : rs)
            return new String[]{
                "foo",
                "bar"
            };
        if (a == 0
            && b == 1
            && foo) {
            return 0;
        } else if (a == 1) {
            return 1;
        } else if (true)
            return 5;
        else {
            if (a == 0
                && b == 1
                && foo)
                while (true)
                    for (
                        ;;)
                        if (true)
                            return 5;
                        else if (false) {
                            return 6;
                        } else
                            if (true
                                && false)
                                return 6;
        }
    }
}
```

Even though its some pretty wild code, its indented correctly after this
patch.  I'll create something similar for C as well.

Theo

[0001-Use-c-ts-common-statement-offset-in-java-ts-mode-bug.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Sun, 05 Feb 2023 21:21:02 GMT) Full text and rfc822 format available.

Message #47 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Theodor Thornhill <theo <at> thornhill.no>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 61142 <at> debbugs.gnu.org, zjyzhaojiyang <at> hotmail.com
Subject: Re: bug#61142: 回复: bug#61142: 29.0.60;
 java-ts-mode - Wrong
 indentation for the body of multiple lines conditions
Date: Sun, 05 Feb 2023 22:20:19 +0100
[Message part 1 (text/plain, inline)]
Theodor Thornhill <theo <at> thornhill.no> writes:

> Theodor Thornhill <theo <at> thornhill.no> writes:
>
>> Eli Zaretskii <eliz <at> gnu.org> writes:
>>
>>>> Cc: "61142 <at> debbugs.gnu.org" <61142 <at> debbugs.gnu.org>
>>>> Date: Sun, 05 Feb 2023 20:19:19 +0100
>>>> From:  Theodor Thornhill via "Bug reports for GNU Emacs,
>>>>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>>> 
>>>> +(defvar c-ts-common-nestable-if-statement-p t
>>>> +  "Does the current parser nest if-else statements?
>>>> +
>>>> +T if the current tree-sitter grammar nests the else if
>>>> +statements, NIL otherwise.")
>>>
>>> A nit: we use t and nil, lowercase, to refer to these two symbols.
>>>
>>> Thanks.
>>
>> Thanks!
>>
>> Theo
>
> I added some small tweaks, and will add the following as a test later:
>

I made even further tweaks, and while testing the c variant I noticed
that the C tests weren't actually working. There were missing rules for
many of the cases in the tests, so I added some more rules to the
c-ts-mode indentation and added a big-ish test with some wonky but
seemingly working indentation.

Because the tests are now working I think this is good to go, so unless
somebody objects I'll install this sometime tomorrow :-)

Theo

[0001-Use-c-ts-common-statement-offset-in-java-ts-mode-bug.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Mon, 06 Feb 2023 05:52:03 GMT) Full text and rfc822 format available.

Message #50 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: 赵 纪阳 <zjyzhaojiyang <at> hotmail.com>
To: Theodor Thornhill <theo <at> thornhill.no>
Cc: "61142 <at> debbugs.gnu.org" <61142 <at> debbugs.gnu.org>
Subject: 回复: bug#61142: 29.0.60; java-ts-mode - Wrong indentation for the body of multiple lines conditions
Date: Sun, 5 Feb 2023 13:09:19 +0000
[Message part 1 (text/plain, inline)]
Thanks for the patch.

I've not tested this patch adequately, but I found an issue:
java-ts-mode indents the body of `else if` with one more level of indentation.

```
public class T {
    int f() {
        int a = 0;
        int b = 1;
        if (a == 0
            && b == 1) {
            // indentation ok
            return 0;
        } else if (a == 1 ) {
                // indentation more
                return 1;
            }
    }
}
```
If the second branch of the if-statement is just an `else` (not `else if`), the body of it will be indented correctly.


I've also tested c-ts-mode (use 'linux as c-ts-mode-indent-style) and it also has this kind of problem.
```
int main() {
    int a = 0;
    if (a == 0) {
        // indentation ok
    } else if (a == 2) {
            // indentation more
        }
}
```

________________________________
发件人: Theodor Thornhill <theo <at> thornhill.no>
发送时间: 2023年2月5日 15:53
收件人: 太阳 <zjyzhaojiyang <at> hotmail.com>
抄送: 61142 <at> debbugs.gnu.org <61142 <at> debbugs.gnu.org>
主题: Re: bug#61142: 29.0.60; java-ts-mode - Wrong indentation for the body of multiple lines conditions

Theodor Thornhill <theo <at> thornhill.no> writes:

> 太阳 <zjyzhaojiyang <at> hotmail.com> writes:
>
>> After reading treesit's manual, I found that we can use `n-p-gp` as the matcher
>> and `grand-parent` as the anchor to match the body of `if` (and `while`, which
>> has a similar issue).
>>
>> I mean a rule looks like the following:
>>
>> ```
>> ((n-p-gp nil "block" "if_statement") grand-parent java-ts-mode-indent-offset)
>> ```
>>
>>
>
>
> Thanks!  We have a mechanism in place for this, see
> 'c-ts-common-statement-offset' in 'c-ts-common.el'.  I didn't get to it
> yet, but I'll try to look at it this evening, unless you want to?  See
> c-ts-mode for examples of how to use it, if you're interested!
>
> Theo

Hi again!

Can you test this patch for me?

@Eli: Is this ok for emacs-29?  I'd love to add some test for this, but
now they are on the master branch.  What is the common procedure to move
stuff from master branch to the release branch?  I _can_ just add some
test to the master branch, but it would be nice to have them on emacs-29
too :-)

Theo

[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Mon, 06 Feb 2023 05:52:04 GMT) Full text and rfc822 format available.

Message #53 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: 赵 纪阳 <zjyzhaojiyang <at> hotmail.com>
To: Theodor Thornhill <theo <at> thornhill.no>
Cc: "61142 <at> debbugs.gnu.org" <61142 <at> debbugs.gnu.org>
Subject: 回复: bug#61142: 回复: bug#61142: 29.0.60; java-ts-mode - Wrong indentation for the body of multiple lines conditions
Date: Mon, 6 Feb 2023 02:34:12 +0000
[Message part 1 (text/plain, inline)]
Hi Theo

This patch works well for me. Great! Thanks!

________________________________
发件人: Theodor Thornhill <theo <at> thornhill.no>
发送时间: 2023年2月6日 5:20
收件人: Eli Zaretskii <eliz <at> gnu.org>
抄送: zjyzhaojiyang <at> hotmail.com <zjyzhaojiyang <at> hotmail.com>; 61142 <at> debbugs.gnu.org <61142 <at> debbugs.gnu.org>
主题: Re: bug#61142: 回复: bug#61142: 29.0.60; java-ts-mode - Wrong indentation for the body of multiple lines conditions

Theodor Thornhill <theo <at> thornhill.no> writes:

> Theodor Thornhill <theo <at> thornhill.no> writes:
>
>> Eli Zaretskii <eliz <at> gnu.org> writes:
>>
>>>> Cc: "61142 <at> debbugs.gnu.org" <61142 <at> debbugs.gnu.org>
>>>> Date: Sun, 05 Feb 2023 20:19:19 +0100
>>>> From:  Theodor Thornhill via "Bug reports for GNU Emacs,
>>>>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>>>
>>>> +(defvar c-ts-common-nestable-if-statement-p t
>>>> +  "Does the current parser nest if-else statements?
>>>> +
>>>> +T if the current tree-sitter grammar nests the else if
>>>> +statements, NIL otherwise.")
>>>
>>> A nit: we use t and nil, lowercase, to refer to these two symbols.
>>>
>>> Thanks.
>>
>> Thanks!
>>
>> Theo
>
> I added some small tweaks, and will add the following as a test later:
>

I made even further tweaks, and while testing the c variant I noticed
that the C tests weren't actually working. There were missing rules for
many of the cases in the tests, so I added some more rules to the
c-ts-mode indentation and added a big-ish test with some wonky but
seemingly working indentation.

Because the tests are now working I think this is good to go, so unless
somebody objects I'll install this sometime tomorrow :-)

Theo

[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61142; Package emacs. (Mon, 06 Feb 2023 06:46:02 GMT) Full text and rfc822 format available.

Message #56 received at 61142 <at> debbugs.gnu.org (full text, mbox):

From: Theodor Thornhill <theo <at> thornhill.no>
To: 赵 纪阳 <zjyzhaojiyang <at> hotmail.com>
Cc: "61142 <at> debbugs.gnu.org" <61142 <at> debbugs.gnu.org>
Subject: Re: 回复: bug#61142: 回复:
 bug#61142: 29.0.60; java-ts-mode - Wrong
 indentation for the body of multiple lines conditions
Date: Mon, 06 Feb 2023 07:45:37 +0100
赵 纪阳 <zjyzhaojiyang <at> hotmail.com> writes:

> Hi Theo
>
> This patch works well for me. Great! Thanks!
>


Great news - thanks for the feedback - now pushed :-)

Theo




bug marked as fixed in version 29.1, send any further explanations to 61142 <at> debbugs.gnu.org and 太阳 <zjyzhaojiyang <at> hotmail.com> Request was from Theodor Thornhill <theo <at> thornhill.no> to control <at> debbugs.gnu.org. (Mon, 06 Feb 2023 06:47:01 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 06 Mar 2023 12:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 1 year and 57 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.