GNU bug report logs - #72263
31.0.50; Wrong indentation c++-ts-mode

Previous Next

Package: emacs;

Reported by: Ergus <spacibba <at> aol.com>

Date: Wed, 24 Jul 2024 00:03:02 UTC

Severity: normal

Found in version 31.0.50

Done: Eli Zaretskii <eliz <at> gnu.org>

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 72263 in the body.
You can then email your comments to 72263 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#72263; Package emacs. (Wed, 24 Jul 2024 00:03:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ergus <spacibba <at> aol.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Wed, 24 Jul 2024 00:03:02 GMT) Full text and rfc822 format available.

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

From: Ergus <spacibba <at> aol.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 31.0.50; Wrong indentation c++-ts-mode
Date: Wed, 24 Jul 2024 02:02:33 +0200
Hi:

When using c++-ts-mode there is an indentation issue apparently related
with namespaces+templates.

c-ts-mode-indent-style 'linux (but with 'gnu also happens)

```
namespace A {

	T myfunction1(const char *fname)
	{
	}

	template <class T>
T myfunction2(const char *fname)
{
}

}
```

The myfunction2 may be indented as expected, but it is not.

The explorer shows:

```
(translation_unit
 (namespace_definition namespace name: (namespace_identifier)
  body: 
   (declaration_list {
    (function_definition type: (primitive_type)
     declarator: 
      (function_declarator declarator: (identifier)
       parameters: 
	(parameter_list (
	 (parameter_declaration
	  (type_qualifier const)
	  type: (primitive_type)
	  declarator: (pointer_declarator * declarator: (identifier)))
	 )))
     body: (compound_statement { }))
    (template_declaration template
     parameters: 
      (template_parameter_list <
       (type_parameter_declaration class (type_identifier))
       >)
     (function_definition type: (type_identifier)
      declarator: 
       (function_declarator declarator: (identifier)
	parameters: 
	 (parameter_list (
	  (parameter_declaration
	   (type_qualifier const)
	   type: (primitive_type)
	   declarator: (pointer_declarator * declarator: (identifier)))
	  )))
      body: (compound_statement { })))
    })))
```



In GNU Emacs 31.0.50 (build 15, x86_64-pc-linux-gnu, GTK+ Version
 3.24.43, cairo version 1.18.0) of 2024-07-21 built on RTX
Repository revision: cb0f25e4f966a53d52db5190d189ae85c7154d70
Repository branch: project
System Description: Arch Linux

Configured using:
 'configure --prefix=/home/ergo/.local/ --with-mailutils --with-pgtk
 --with-modules --with-cairo --with-harfbuzz
 --with-native-compilation=aot
 '--program-transform-name=s/^ctags$/ctags.emacs/''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK
PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP XIM GTK3 ZLIB

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: C++//

Minor modes in effect:
  fancy-compilation-mode: t
  global-auto-revert-mode: t
  electric-pair-mode: t
  whitespace-mode: t
  flyspell-mode: t
  completion-preview-mode: t
  diff-hl-margin-local-mode: t
  diff-hl-margin-mode: t
  diff-hl-mode: t
  corfu-terminal-mode: t
  global-corfu-mode: t
  corfu-mode: t
  project-multi-mode: t
  gtags-mode: t
  repeat-mode: t
  xterm-mouse-mode: t
  xclip-mode: t
  override-global-mode: t
  winner-mode: t
  save-place-mode: t
  delete-selection-mode: t
  savehist-mode: t
  global-display-fill-column-indicator-mode: t
  display-fill-column-indicator-mode: t
  global-display-line-numbers-mode: t
  display-line-numbers-mode: t
  which-key-mode: t
  show-paren-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  context-menu-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  size-indication-mode: t
  column-number-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/mnt/casa/gits/emacs_clones/cuda-mode/cuda-mode hides /home/ergo/.config/emacs/elpa/cuda-mode-20240716.1936/cuda-mode
/mnt/casa/gits/emacs_clones/gtags-mode/gtags-mode hides /home/ergo/.config/emacs/elpa/gtags-mode-1.8/gtags-mode
/home/ergo/.config/emacs/elpa/transient-20240713.2102/transient hides /home/ergo/.local/share/emacs/31.0.50/lisp/transient

Features:
(shadow sort gnus-cite shr-color color qp mail-extr textsec uni-scripts
idna-mapping ucs-normalize uni-confusable textsec-check gnus-async
gnus-bcklg gnus-agent gnus-srvr gnus-score score-mode nnvirtual nntp
gnus-ml gnus-msg nndoc gnus-cache url-handlers gnus-dup gnus-art mm-uu
mml2015 mm-view mml-smime smime dig gnus-sum shr pixel-fill kinsoku
url-file svg dom gnus-group gnus-undo gnus-start gnus-dbus dbus
gnus-cloud nnimap nnmail browse-url mail-source utf7 nnoo parse-time
iso8601 gnus-spec gnus-int gnus-range gnus-win gnus nnheader range
wid-edit misearch multi-isearch mule-util mm-archive gnutls
network-stream url-cache fancy-compilation compile comint ansi-osc
ansi-color comp-run comp-common crm debbugs-gnu add-log debbugs-compat
debbugs soap-client url-http url-auth url-gw nsm url url-proxy
url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util warnings rng-xsd rng-dt rng-util
xsd-regexp xml emacsbug message mailcap yank-media puny rfc822 mml
mml-sec epa derived epg rfc6068 epg-config gnus-util
text-property-search time-date mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils autorevert filenotify ffap
thingatpt url-parse auth-source eieio eieio-core icons password-cache
json map url-vars elec-pair whitespace flyspell-correct flyspell ispell
completion-preview diff-hl-margin diff-hl-dired citre-lang-fileref
citre-tags citre-ctags citre-readtags citre-readtags-tables
citre-backend-interface citre-common-tag rx citre-common-util dired-x
dired dired-loaddefs diff-hl log-view pcvs-util vc-dir ewoc vc
vc-dispatcher diff-mode track-changes corfu-terminal popon corfu
project-multi-mode gtags-mode cl-macs subr-x files-x xref project
c++-ts-mode c-ts-mode c-ts-common treesit term/tmux term/xterm xterm
init repeat cape compat use-package-ensure use-package-diminish xt-mouse
xclip edmacro kmacro byte-opt gv use-package-bind-key bind-key cl-extra
help-mode simple-16-theme winner ring saveplace delsel savehist
easy-mmode display-fill-column-indicator display-line-numbers diminish
which-key cl-seq use-package-core cl-loaddefs cl-lib bytecomp
byte-compile disp-table info 0blayout-autoloads ac-emoji-autoloads
ac-haskell-process-autoloads ac-html-autoloads
arduino-cli-mode-autoloads auctex-autoloads tex-site
auto-complete-autoloads avy-zap-autoloads avy-autoloads
better-shell-autoloads caml-autoloads cape-autoloads citre-autoloads
clang-format-autoloads cobol-mode-autoloads compile-multi-autoloads
corfu-terminal-autoloads corfu-autoloads crdt-autoloads
csv-mode-autoloads cuda-mode-autoloads d-mode-autoloads
deadgrep-autoloads debbugs-autoloads diff-hl-autoloads
diminish-autoloads dired-sidebar-autoloads dired-subtree-autoloads
dired-hacks-utils-autoloads dumb-jump-autoloads e2ansi-autoloads
emamux-autoloads esup-autoloads evil-collection-autoloads
annalist-autoloads evil-leader-autoloads evil-autoloads
face-explorer-autoloads fancy-compilation-autoloads flx-autoloads
flycheck-julia-autoloads flycheck-rust-autoloads flycheck-autoloads
flymake-nasm-autoloads flymake-quickdef-autoloads
flyspell-correct-autoloads git-modes-autoloads git-timemachine-autoloads
gnuplot-autoloads google-c-style-autoloads goto-chg-autoloads
groovy-mode-autoloads gtags-mode-autoloads haskell-mode-autoloads
highlight-indent-guides-autoloads i3wm-config-mode-autoloads
ibuffer-sidebar-autoloads iedit-autoloads imenu-list-autoloads
julia-ts-mode-autoloads julia-mode-autoloads languagetool-autoloads
lice-autoloads lorem-ipsum-autoloads lua-mode-autoloads magit-autoloads
git-commit-autoloads magit-section-autoloads markdown-mode-autoloads
modern-cpp-font-lock-autoloads move-dup-autoloads
multiple-cursors-autoloads mutt-mode-autoloads nasm-mode-autoloads
neotree-autoloads nftables-mode-autoloads nginx-mode-autoloads
notmuch-autoloads objed-autoloads opencl-mode-autoloads
paradox-autoloads phi-search-autoloads pkg-info-autoloads epl-autoloads
pkgbuild-mode-autoloads platformio-mode-autoloads async-autoloads
popon-autoloads popup-autoloads projectile-autoloads
projection-autoloads protobuf-mode-autoloads protobuf-ts-mode-autoloads
ptemplate-templates-autoloads ptemplate-autoloads scopeline-autoloads
shell-command+-autoloads slime-autoloads macrostep-autoloads
sphinx-mode-autoloads f-autoloads dash-autoloads s-autoloads
spinner-autoloads ssh-config-mode-autoloads string-inflection-autoloads
sudo-edit-autoloads systemd-autoloads tmux-mode-autoloads
transient-autoloads tsc-autoloads urgrep-autoloads vdiff-autoloads
hydra-autoloads lv-autoloads vterm-toggle-autoloads vterm-autoloads
vundo-autoloads with-editor-autoloads xclip-autoloads
yasnippet-snippets-autoloads yasnippet-autoloads early-init rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win
term/common-win touch-screen pgtk-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
dynamic-setting system-font-setting font-render-setting cairo gtk pgtk
lcms2 multi-tty move-toolbar make-network-process native-compile emacs)

Memory information:
((conses 16 565759 70059) (symbols 48 23739 21)
 (strings 32 123309 12843) (string-bytes 1 3961754) (vectors 16 67839)
 (vector-slots 8 774089 73975) (floats 8 1463 706)
 (intervals 56 9768 1998) (buffers 992 25))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#72263; Package emacs. (Thu, 25 Jul 2024 07:31:01 GMT) Full text and rfc822 format available.

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

From: Eli Zaretskii <eliz <at> gnu.org>
To: Ergus <spacibba <at> aol.com>, Yuan Fu <casouri <at> gmail.com>
Cc: 72263 <at> debbugs.gnu.org
Subject: Re: bug#72263: 31.0.50; Wrong indentation c++-ts-mode
Date: Thu, 25 Jul 2024 10:29:47 +0300
> Date: Wed, 24 Jul 2024 02:02:33 +0200
> From:  Ergus via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> 
> When using c++-ts-mode there is an indentation issue apparently related
> with namespaces+templates.
> 
> c-ts-mode-indent-style 'linux (but with 'gnu also happens)
> 
> ```
> namespace A {
> 
> 	T myfunction1(const char *fname)
> 	{
> 	}
> 
> 	template <class T>
> T myfunction2(const char *fname)
> {
> }
> 
> }
> ```
> 
> The myfunction2 may be indented as expected, but it is not.
> 
> The explorer shows:
> 
> ```
> (translation_unit
>  (namespace_definition namespace name: (namespace_identifier)
>   body: 
>    (declaration_list {
>     (function_definition type: (primitive_type)
>      declarator: 
>       (function_declarator declarator: (identifier)
>        parameters: 
> 	(parameter_list (
> 	 (parameter_declaration
> 	  (type_qualifier const)
> 	  type: (primitive_type)
> 	  declarator: (pointer_declarator * declarator: (identifier)))
> 	 )))
>      body: (compound_statement { }))
>     (template_declaration template
>      parameters: 
>       (template_parameter_list <
>        (type_parameter_declaration class (type_identifier))
>        >)
>      (function_definition type: (type_identifier)
>       declarator: 
>        (function_declarator declarator: (identifier)
> 	parameters: 
> 	 (parameter_list (
> 	  (parameter_declaration
> 	   (type_qualifier const)
> 	   type: (primitive_type)
> 	   declarator: (pointer_declarator * declarator: (identifier)))
> 	  )))
>       body: (compound_statement { })))
>     })))
> ```

Yuan, can you take a look, please?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#72263; Package emacs. (Thu, 25 Jul 2024 07:55:01 GMT) Full text and rfc822 format available.

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

From: Yuan Fu <casouri <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: Ergus <spacibba <at> aol.com>, 72263 <at> debbugs.gnu.org
Subject: Re: bug#72263: 31.0.50; Wrong indentation c++-ts-mode
Date: Thu, 25 Jul 2024 00:53:16 -0700

> On Jul 25, 2024, at 12:29 AM, Eli Zaretskii <eliz <at> gnu.org> wrote:
> 
>> Date: Wed, 24 Jul 2024 02:02:33 +0200
>> From:  Ergus via "Bug reports for GNU Emacs,
>> the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>> 
>> When using c++-ts-mode there is an indentation issue apparently related
>> with namespaces+templates.
>> 
>> c-ts-mode-indent-style 'linux (but with 'gnu also happens)
>> 
>> ```
>> namespace A {
>> 
>> T myfunction1(const char *fname)
>> {
>> }
>> 
>> template <class T>
>> T myfunction2(const char *fname)
>> {
>> }
>> 
>> }
>> ```
>> 
>> The myfunction2 may be indented as expected, but it is not.
>> 
>> The explorer shows:
>> 
>> ```
>> (translation_unit
>> (namespace_definition namespace name: (namespace_identifier)
>>  body: 
>>   (declaration_list {
>>    (function_definition type: (primitive_type)
>>     declarator: 
>>      (function_declarator declarator: (identifier)
>>       parameters: 
>> (parameter_list (
>> (parameter_declaration
>>  (type_qualifier const)
>>  type: (primitive_type)
>>  declarator: (pointer_declarator * declarator: (identifier)))
>> )))
>>     body: (compound_statement { }))
>>    (template_declaration template
>>     parameters: 
>>      (template_parameter_list <
>>       (type_parameter_declaration class (type_identifier))
>>> )
>>     (function_definition type: (type_identifier)
>>      declarator: 
>>       (function_declarator declarator: (identifier)
>> parameters: 
>> (parameter_list (
>>  (parameter_declaration
>>   (type_qualifier const)
>>   type: (primitive_type)
>>   declarator: (pointer_declarator * declarator: (identifier)))
>>  )))
>>      body: (compound_statement { })))
>>    })))
>> ```
> 
> Yuan, can you take a look, please?

Yeah let me take a look.

Yuan



Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#72263; Package emacs. (Wed, 31 Jul 2024 21:11:01 GMT) Full text and rfc822 format available.

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

From: Ergus <spacibba <at> aol.com>
To: Yuan Fu <casouri <at> gmail.com>, Eli Zaretskii <eliz <at> gnu.org>
Cc: 72263 <at> debbugs.gnu.org
Subject: Re: bug#72263: 31.0.50; Wrong indentation c++-ts-mode
Date: Wed, 31 Jul 2024 23:09:53 +0200
[Message part 1 (text/plain, inline)]
Hi again Yuan:

I found another indentation issue in if-else conditions without
parenthesis:

if (pid == 0)
   print "hello from the child"
   else
   print "hello from the parent"


The else is not indented properly:

This is the explore output:

(translation_unit
 (if_statement if
  condition: 
   (parenthesized_expression (
    (binary_expression left: (identifier) operator: == right: (number_literal))
    ))
  consequence: 
   (expression_statement
    (concatenated_string (identifier)
     (string_literal " (string_content) ")
     (identifier) (identifier)
     (string_literal " (string_content) "))
    ;)))


Best,
Ergus


On July 25, 2024 9:53:16 AM GMT+02:00, Yuan Fu <casouri <at> gmail.com> wrote:
>
>
>> On Jul 25, 2024, at 12:29 AM, Eli Zaretskii <eliz <at> gnu.org> wrote:
>> 
>>> Date: Wed, 24 Jul 2024 02:02:33 +0200
>>> From:  Ergus via "Bug reports for GNU Emacs,
>>> the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>> 
>>> When using c++-ts-mode there is an indentation issue apparently related
>>> with namespaces+templates.
>>> 
>>> c-ts-mode-indent-style 'linux (but with 'gnu also happens)
>>> 
>>> ```
>>> namespace A {
>>> 
>>> T myfunction1(const char *fname)
>>> {
>>> }
>>> 
>>> template <class T>
>>> T myfunction2(const char *fname)
>>> {
>>> }
>>> 
>>> }
>>> ```
>>> 
>>> The myfunction2 may be indented as expected, but it is not.
>>> 
>>> The explorer shows:
>>> 
>>> ```
>>> (translation_unit
>>> (namespace_definition namespace name: (namespace_identifier)
>>>  body: 
>>>   (declaration_list {
>>>    (function_definition type: (primitive_type)
>>>     declarator: 
>>>      (function_declarator declarator: (identifier)
>>>       parameters: 
>>> (parameter_list (
>>> (parameter_declaration
>>>  (type_qualifier const)
>>>  type: (primitive_type)
>>>  declarator: (pointer_declarator * declarator: (identifier)))
>>> )))
>>>     body: (compound_statement { }))
>>>    (template_declaration template
>>>     parameters: 
>>>      (template_parameter_list <
>>>       (type_parameter_declaration class (type_identifier))
>>>> )
>>>     (function_definition type: (type_identifier)
>>>      declarator: 
>>>       (function_declarator declarator: (identifier)
>>> parameters: 
>>> (parameter_list (
>>>  (parameter_declaration
>>>   (type_qualifier const)
>>>   type: (primitive_type)
>>>   declarator: (pointer_declarator * declarator: (identifier)))
>>>  )))
>>>      body: (compound_statement { })))
>>>    })))
>>> ```
>> 
>> Yuan, can you take a look, please?
>
>Yeah let me take a look.
>
>Yuan
-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.
[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#72263; Package emacs. (Thu, 01 Aug 2024 05:08:02 GMT) Full text and rfc822 format available.

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

From: Eli Zaretskii <eliz <at> gnu.org>
To: Ergus <spacibba <at> aol.com>
Cc: casouri <at> gmail.com, 72263 <at> debbugs.gnu.org
Subject: Re: bug#72263: 31.0.50; Wrong indentation c++-ts-mode
Date: Thu, 01 Aug 2024 08:06:38 +0300
> Date: Wed, 31 Jul 2024 23:09:53 +0200
> From: Ergus <spacibba <at> aol.com>
> CC: 72263 <at> debbugs.gnu.org
> 
> I found another indentation issue in if-else conditions without
> parenthesis:
> 
> if (pid == 0)
>    print "hello from the child"
>    else
>    print "hello from the parent"
> 
> The else is not indented properly:

The above is not valid C++ code, AFAIU, so I don't understand why you
expect c++-ts-mode to handle it properly (and what exactly is "proper"
indentation in that case?).




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#72263; Package emacs. (Thu, 01 Aug 2024 07:06:01 GMT) Full text and rfc822 format available.

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

From: Yuan Fu <casouri <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: Ergus <spacibba <at> aol.com>, 72263 <at> debbugs.gnu.org
Subject: Re: bug#72263: 31.0.50; Wrong indentation c++-ts-mode
Date: Thu, 1 Aug 2024 00:03:52 -0700
Pushed a fix for the original bug to emacs-30. Now it indents like this:

namespace A {

  T myfunction1(const char *fname)
  {
  }

  template <class T>
  T myfunction2(const char *fname)
  {
  }
}


> On Jul 31, 2024, at 10:06 PM, Eli Zaretskii <eliz <at> gnu.org> wrote:
> 
>> Date: Wed, 31 Jul 2024 23:09:53 +0200
>> From: Ergus <spacibba <at> aol.com>
>> CC: 72263 <at> debbugs.gnu.org
>> 
>> I found another indentation issue in if-else conditions without
>> parenthesis:
>> 
>> if (pid == 0)
>>   print "hello from the child"
>>   else
>>   print "hello from the parent"
>> 
>> The else is not indented properly:
> 
> The above is not valid C++ code, AFAIU, so I don't understand why you
> expect c++-ts-mode to handle it properly (and what exactly is "proper"
> indentation in that case?).

As Eli said, if you add the trailing semicolon then it indents fine. If the code isn’t grammatically correct it’s hard for tree-sitter modes to indent the code.

Yuan



Reply sent to Eli Zaretskii <eliz <at> gnu.org>:
You have taken responsibility. (Sat, 17 Aug 2024 07:30:02 GMT) Full text and rfc822 format available.

Notification sent to Ergus <spacibba <at> aol.com>:
bug acknowledged by developer. (Sat, 17 Aug 2024 07:30:02 GMT) Full text and rfc822 format available.

Message #25 received at 72263-done <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Yuan Fu <casouri <at> gmail.com>
Cc: spacibba <at> aol.com, 72263-done <at> debbugs.gnu.org
Subject: Re: bug#72263: 31.0.50; Wrong indentation c++-ts-mode
Date: Sat, 17 Aug 2024 10:28:26 +0300
> From: Yuan Fu <casouri <at> gmail.com>
> Date: Thu, 1 Aug 2024 00:03:52 -0700
> Cc: Ergus <spacibba <at> aol.com>,
>  72263 <at> debbugs.gnu.org
> 
> Pushed a fix for the original bug to emacs-30. Now it indents like this:
> 
> namespace A {
> 
>   T myfunction1(const char *fname)
>   {
>   }
> 
>   template <class T>
>   T myfunction2(const char *fname)
>   {
>   }
> }
> 
> 
> > On Jul 31, 2024, at 10:06 PM, Eli Zaretskii <eliz <at> gnu.org> wrote:
> > 
> >> Date: Wed, 31 Jul 2024 23:09:53 +0200
> >> From: Ergus <spacibba <at> aol.com>
> >> CC: 72263 <at> debbugs.gnu.org
> >> 
> >> I found another indentation issue in if-else conditions without
> >> parenthesis:
> >> 
> >> if (pid == 0)
> >>   print "hello from the child"
> >>   else
> >>   print "hello from the parent"
> >> 
> >> The else is not indented properly:
> > 
> > The above is not valid C++ code, AFAIU, so I don't understand why you
> > expect c++-ts-mode to handle it properly (and what exactly is "proper"
> > indentation in that case?).
> 
> As Eli said, if you add the trailing semicolon then it indents fine. If the code isn’t grammatically correct it’s hard for tree-sitter modes to indent the code.

No further comments, so I'm now closing this bug.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 14 Sep 2024 11:24:12 GMT) Full text and rfc822 format available.

This bug report was last modified 180 days ago.

Previous Next


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