GNU bug report logs - #61541
30.0.50; Wrong indentarion in csharp-mode

Previous Next

Package: emacs;

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

Date: Wed, 15 Feb 2023 21:20:01 UTC

Severity: normal

Found in version 30.0.50

Done: 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 61541 in the body.
You can then email your comments to 61541 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#61541; Package emacs. (Wed, 15 Feb 2023 21:20: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, 15 Feb 2023 21:20: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: 30.0.50; Wrong indentarion in csharp-mode
Date: Wed, 15 Feb 2023 22:19:03 +0100
Hi:

I just found that this indentations are wrong in csharp mode:

// wrong
new myNamespace.myClass
{
    Name1 = x.Value, // defun-block-intro
	var2 = 2     // statement-cont
	}            // statement-cont


The problem seems to be related with the dot (.) in the new, because
this variant indents correctly:

// right
new myClass
{
    Name1 = x.Value,   // brace-list-intro
    var2 = 2           // brace-list-entry
}                      // brace-list-close


csharp-ts-mode is doing it right BTW.




In GNU Emacs 30.0.50 (build 12, x86_64-pc-linux-gnu, GTK+ Version
 3.24.36, cairo version 1.17.8) of 2023-02-15 built on Ergus
Repository revision: 6a677fd3b6677248a8bc1787b105879684289fa2
Repository branch: master
System Description: Arch Linux

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

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

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

Major mode: C#//law

Minor modes in effect:
  subword-mode: t
  windmove-mode: t
  fancy-compilation-mode: t
  global-auto-revert-mode: t
  electric-pair-mode: t
  flyspell-mode: t
  company-mode: t
  flycheck-mode: t
  diff-hl-margin-mode: t
  gtags-mode: t
  repeat-mode: t
  c-ms-space-for-alignment-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
  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/gtags-mode/gtags-mode hides /home/ergo/.config/emacs/elpa/gtags-mode-1.0/gtags-mode
/home/ergo/.config/emacs/elpa/transient-20230213.1337/transient hides /home/ergo/.local/share/emacs/30.0.50/lisp/transient

Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny rfc822
mml mml-sec epa derived epg rfc6068 epg-config gnus-util mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils
time-date dabbrev cap-words superword subword cape-keyword windmove
jka-compr shortdoc csharp-mode c-ts-common treesit cc-langs cc-mode
cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars
cc-defs fancy-compilation compile text-property-search comint ansi-osc
help-fns radix-tree autorevert filenotify ffap thingatpt url-parse
auth-source password-cache url-vars elec-pair flyspell-correct flyspell
ispell company-semantic company-template company-capf company flycheck
ansi-color json map find-func dash pcase diff-hl-margin diff-hl-dired
dired-x dired dired-loaddefs diff-hl log-view pcvs-util vc-dir ewoc vc
vc-dispatcher diff-mode cape compat comp comp-cstr warnings icons rx
gtags-mode subr-x files-x xref project term/tmux term/xterm xterm init
repeat xt-mouse xclip edmacro kmacro use-package-bind-key bind-key
simple-16-theme winner ring saveplace delsel savehist easy-mmode
display-fill-column-indicator display-line-numbers diminish which-key
cl-extra help-mode use-package-diminish use-package-core disp-table info
dumb-jump-autoloads highlight-indent-guides-autoloads
company-lua-autoloads evil-collection-autoloads vundo-autoloads
sudo-edit-autoloads cuda-mode-autoloads nginx-mode-autoloads
crdt-autoloads annalist-autoloads company-auctex-autoloads
cape-autoloads groovy-mode-autoloads flycheck-rust-autoloads
string-inflection-autoloads company-c-headers-autoloads
protobuf-mode-autoloads markdown-mode-autoloads tree-sitter-autoloads
lice-autoloads lorem-ipsum-autoloads julia-mode-autoloads
nasm-mode-autoloads deadgrep-autoloads popup-autoloads
company-nginx-autoloads csv-mode-autoloads d-mode-autoloads
tsc-autoloads i3wm-config-mode-autoloads ssh-config-mode-autoloads
move-dup-autoloads clang-format-autoloads esup-autoloads
dired-sidebar-autoloads gnuplot-autoloads web-completion-data-autoloads
phi-search-autoloads better-shell-autoloads fancy-compilation-autoloads
arduino-cli-mode-autoloads flycheck-julia-autoloads magit-autoloads
magit-section-autoloads auctex-autoloads tex-site which-key-autoloads
git-commit-autoloads with-editor-autoloads evil-autoloads
goto-chg-autoloads flycheck-autoloads multiple-cursors-autoloads
ibuffer-sidebar-autoloads dired-subtree-autoloads
dired-hacks-utils-autoloads systemd-autoloads pkgbuild-mode-autoloads
neotree-autoloads modern-cpp-font-lock-autoloads
company-reftex-autoloads google-c-style-autoloads flymake-nasm-autoloads
request-autoloads caml-autoloads arduino-mode-autoloads ede/auto
eieio-base cl-seq eieio byte-opt bytecomp byte-compile eieio-core
cl-macs gv cl-loaddefs cl-lib sphinx-mode-autoloads f-autoloads
diff-hl-autoloads lua-mode-autoloads gtags-mode-autoloads
mutt-mode-autoloads xclip-autoloads diminish-autoloads
imenu-list-autoloads paradox-autoloads spinner-autoloads
avy-zap-autoloads nftables-mode-autoloads s-autoloads
ibuffer-vc-autoloads objed-autoloads iedit-autoloads
languagetool-autoloads vterm-toggle-autoloads vterm-autoloads
avy-autoloads git-timemachine-autoloads emamux-autoloads
transient-autoloads flymake-quickdef-autoloads slime-autoloads
yasnippet-snippets-autoloads ibuffer-project-autoloads
haskell-mode-autoloads shell-command+-autoloads notmuch-autoloads
e2ansi-autoloads face-explorer-autoloads pkg-info-autoloads
flx-autoloads opencl-mode-autoloads ptemplate-templates-autoloads
ptemplate-autoloads yasnippet-autoloads git-modes-autoloads
compat-autoloads ibuffer-tramp-autoloads debbugs-autoloads
cobol-mode-autoloads macrostep-autoloads flyspell-correct-autoloads
company-autoloads dash-autoloads epl-autoloads vdiff-autoloads
hydra-autoloads lv-autoloads early-init 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 cairo
move-toolbar gtk x-toolkit xinput2 x multi-tty make-network-process
native-compile emacs)

Memory information:
((conses 16 314716 25828)
 (symbols 48 18893 0)
 (strings 32 80618 11390)
 (string-bytes 1 2807148)
 (vectors 16 45056)
 (vector-slots 8 1351905 127627)
 (floats 8 236 1199)
 (intervals 56 3420 54)
 (buffers 984 15))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61541; Package emacs. (Fri, 17 Feb 2023 19:29:02 GMT) Full text and rfc822 format available.

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

From: Theodor Thornhill <theo <at> thornhill.no>
To: Ergus <spacibba <at> aol.com>
Cc: jostein <at> kjonigsen.net, 61541 <at> debbugs.gnu.org
Subject: Re: bug#61541: 30.0.50; Wrong indentarion in csharp-mode
Date: Fri, 17 Feb 2023 20:28:07 +0100
Ergus <spacibba <at> aol.com> writes:

> Hi:
>
> I just found that this indentations are wrong in csharp mode:
>
> // wrong
> new myNamespace.myClass
> {
>     Name1 = x.Value, // defun-block-intro
> 	var2 = 2     // statement-cont
> 	}            // statement-cont
>
>
> The problem seems to be related with the dot (.) in the new, because
> this variant indents correctly:
>
> // right
> new myClass
> {
>     Name1 = x.Value,   // brace-list-intro
>     var2 = 2           // brace-list-entry
> }                      // brace-list-close
>
>
> csharp-ts-mode is doing it right BTW.
>

Hi!

Yeah, this is one of the harder issues iirc, and one of the ones that
made us move to tree-sitter in csharp-mode in the first place.

What do you think Jostein?

Patches welcome!

Theo





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61541; Package emacs. (Fri, 17 Feb 2023 21:07:01 GMT) Full text and rfc822 format available.

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

From: Jostein Kjønigsen <jostein <at> secure.kjonigsen.net>
To: Theodor Thornhill <theo <at> thornhill.no>, Ergus <spacibba <at> aol.com>
Cc: jostein <at> kjonigsen.net, 61541 <at> debbugs.gnu.org
Subject: Re: bug#61541: 30.0.50; Wrong indentarion in csharp-mode
Date: Fri, 17 Feb 2023 22:06:50 +0100
2/17/23 20:28, Theodor Thornhill wrote:
> Ergus <spacibba <at> aol.com> writes:
>
>> Hi:
>>
>> I just found that this indentations are wrong in csharp mode:
>>
>> // wrong
>> new myNamespace.myClass
>> {
>>      Name1 = x.Value, // defun-block-intro
>> 	var2 = 2     // statement-cont
>> 	}            // statement-cont
>>
>>
>> The problem seems to be related with the dot (.) in the new, because
>> this variant indents correctly:
>>
>> // right
>> new myClass
>> {
>>      Name1 = x.Value,   // brace-list-intro
>>      var2 = 2           // brace-list-entry
>> }                      // brace-list-close
>>
>>
>> csharp-ts-mode is doing it right BTW.
>>
> Hi!
>
> Yeah, this is one of the harder issues iirc, and one of the ones that
> made us move to tree-sitter in csharp-mode in the first place.
>
> What do you think Jostein?
>
> Patches welcome!
>
> Theo
>
First of all: Thanks for a detailed bug-report.

Then for the bad news: I may be missing something here. I'm on the 
latest revision of the emacs-29 branch, and I really can't reproduce at all.

I've tried typing out the concrete code-samples above, and I've tried 
copy-pasting them.

No matter what I do, I cannot reproduce the behaviour outlined above.

Ergus: Could you come up with a even more complete example?

I mean... If I can't reproduce, I definitely won't be able to come up 
with a patch.

--
Jostein





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

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

From: Ergus <spacibba <at> aol.com>
To: jostein <at> kjonigsen.net
Cc: Theodor Thornhill <theo <at> thornhill.no>, 61541 <at> debbugs.gnu.org
Subject: Re: bug#61541: 30.0.50; Wrong indentarion in csharp-mode
Date: Fri, 17 Feb 2023 22:43:46 +0100
On Fri, Feb 17, 2023 at 10:06:50PM +0100, Jostein Kj�nigsen wrote:
>2/17/23 20:28, Theodor Thornhill wrote:
>>Ergus <spacibba <at> aol.com> writes:
>>
>>>Hi:
>>>
>>>I just found that this indentations are wrong in csharp mode:
>>>
>>>// wrong
>>>new myNamespace.myClass
>>>{
>>>     Name1 = x.Value, // defun-block-intro
>>>	var2 = 2     // statement-cont
>>>	}            // statement-cont
>>>
>>>
>>>The problem seems to be related with the dot (.) in the new, because
>>>this variant indents correctly:
>>>
>>>// right
>>>new myClass
>>>{
>>>     Name1 = x.Value,   // brace-list-intro
>>>     var2 = 2           // brace-list-entry
>>>}                      // brace-list-close
>>>
>>>
>>>csharp-ts-mode is doing it right BTW.
>>>
>>Hi!
>>
>>Yeah, this is one of the harder issues iirc, and one of the ones that
>>made us move to tree-sitter in csharp-mode in the first place.
>>
>>What do you think Jostein?
>>
>>Patches welcome!
>>
>>Theo
>>
>First of all: Thanks for a detailed bug-report.
>
>Then for the bad news: I may be missing something here. I'm on the 
>latest revision of the emacs-29 branch, and I really can't reproduce 
>at all.
>
>I've tried typing out the concrete code-samples above, and I've tried 
>copy-pasting them.
>
>No matter what I do, I cannot reproduce the behaviour outlined above.
>
>Ergus: Could you come up with a even more complete example?
>
>I mean... If I can't reproduce, I definitely won't be able to come up 
>with a patch.
>
>--
>Jostein
>

Hi Jostein:

I just do:

emacs -Q /tmp/main.cs

Then pasted (or write) the code snippet shown in the example, and
re-indent the buffer:

I get this:

new myNamespace.myClass
{
    Name1 = 1,
        Name2 =2
        }

Exactly like in the example C-c C-o shows the same than in the
example. Even the fontification is wrong.

If I remove the dot like this myNamespacemyClass the fontification and
indentation is fixed immediately.

I am using the master branch (emacs-version = 30.0.50) tomorrow I can
try to reproduce the issue on emacs-29 branch, but I have to build it.

Best,
Ergus





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#61541; Package emacs. (Fri, 17 Feb 2023 23:39:02 GMT) Full text and rfc822 format available.

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

From: Theodor Thornhill <theo <at> thornhill.no>
To: Ergus <spacibba <at> aol.com>, jostein <at> kjonigsen.net
Cc: 61541 <at> debbugs.gnu.org
Subject: Re: bug#61541: 30.0.50; Wrong indentarion in csharp-mode
Date: Sat, 18 Feb 2023 00:38:20 +0100
Ergus <spacibba <at> aol.com> writes:

> On Fri, Feb 17, 2023 at 10:06:50PM +0100, Jostein Kj�nigsen wrote:
>>2/17/23 20:28, Theodor Thornhill wrote:
>>>Ergus <spacibba <at> aol.com> writes:
>>>
>>>>Hi:
>>>>
>>>>I just found that this indentations are wrong in csharp mode:
>>>>
>>>>// wrong
>>>>new myNamespace.myClass
>>>>{
>>>>     Name1 = x.Value, // defun-block-intro
>>>>	var2 = 2     // statement-cont
>>>>	}            // statement-cont
>>>>
>>>>
>>>>The problem seems to be related with the dot (.) in the new, because
>>>>this variant indents correctly:
>>>>
>>>>// right
>>>>new myClass
>>>>{
>>>>     Name1 = x.Value,   // brace-list-intro
>>>>     var2 = 2           // brace-list-entry
>>>>}                      // brace-list-close
>>>>
>>>>
>>>>csharp-ts-mode is doing it right BTW.
>>>>
>>>Hi!
>>>
>>>Yeah, this is one of the harder issues iirc, and one of the ones that
>>>made us move to tree-sitter in csharp-mode in the first place.
>>>
>>>What do you think Jostein?
>>>
>>>Patches welcome!
>>>
>>>Theo
>>>
>>First of all: Thanks for a detailed bug-report.
>>
>>Then for the bad news: I may be missing something here. I'm on the 
>>latest revision of the emacs-29 branch, and I really can't reproduce 
>>at all.
>>
>>I've tried typing out the concrete code-samples above, and I've tried 
>>copy-pasting them.
>>
>>No matter what I do, I cannot reproduce the behaviour outlined above.
>>
>>Ergus: Could you come up with a even more complete example?
>>
>>I mean... If I can't reproduce, I definitely won't be able to come up 
>>with a patch.
>>
>>--
>>Jostein
>>
>
> Hi Jostein:
>
> I just do:
>
> emacs -Q /tmp/main.cs
>
> Then pasted (or write) the code snippet shown in the example, and
> re-indent the buffer:
>
> I get this:
>
> new myNamespace.myClass
> {
>      Name1 = 1,
>          Name2 =2
>          }
>
> Exactly like in the example C-c C-o shows the same than in the
> example. Even the fontification is wrong.
>
> If I remove the dot like this myNamespacemyClass the fontification and
> indentation is fixed immediately.
>
> I am using the master branch (emacs-version = 30.0.50) tomorrow I can
> try to reproduce the issue on emacs-29 branch, but I have to build it.
>
> Best,
> Ergus


Try this, Ergus and Jostein. What do you think?

diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el
index b6b842d7fd..293a910081 100644
--- a/lisp/progmodes/csharp-mode.el
+++ b/lisp/progmodes/csharp-mode.el
@@ -474,28 +474,37 @@ csharp-guess-basic-syntax
          (and (eq (char-before) ?\])
               (not (eq (char-after) ?\;))))))
     `((annotation-top-cont ,(c-point 'iopl))))
-
    ((and
      ;; Heuristics to find object initializers
      (save-excursion
        ;; Next non-whitespace character should be '{'
        (goto-char (c-point 'boi))
-       (eq (char-after) ?{))
-     (save-excursion
-       ;; 'new' should be part of the line
-       (goto-char (c-point 'iopl))
-       (looking-at ".*new.*"))
+       (unless (eq (char-after) ?{)
+         (backward-up-list 1 t t))
+       (save-excursion
+         ;; 'new' should be part of the line
+         (goto-char (c-point 'iopl))
+         (looking-at ".*new.*")))
      ;; Line should not already be terminated
      (save-excursion
        (goto-char (c-point 'eopl))
        (or (not (eq (char-before) ?\;))
            (not (eq (char-before) ?\{)))))
-    (if (save-excursion
-          ;; if we have a hanging brace on line before
-          (goto-char (c-point 'eopl))
-          (eq (char-before) ?\{))
-        `((brace-list-intro ,(c-point 'iopl)))
-      `((block-open) (statement ,(c-point 'iopl)))))
+    (cond
+     ((save-excursion
+        ;; if we have a hanging brace on line before
+        (goto-char (c-point 'eopl))
+        (eq (char-before) ?\{))
+      `((brace-list-intro ,(c-point 'iopl))))
+     ((save-excursion
+        ;; if we have a hanging brace on line before
+        (goto-char (c-point 'boi))
+        (and (eq (char-after) ?\})
+             `((brace-list-close ,(save-excursion
+                                    (backward-up-list 1 t t)
+                                    (point)))))))
+     (t
+      `((block-open) (statement ,(c-point 'iopl))))))
    (t
     (apply orig-fun args))))
 




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

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

From: Ergus <spacibba <at> aol.com>
To: Theodor Thornhill <theo <at> thornhill.no>
Cc: jostein <at> kjonigsen.net, 61541 <at> debbugs.gnu.org
Subject: Re: bug#61541: 30.0.50; Wrong indentarion in csharp-mode
Date: Sun, 19 Feb 2023 02:58:42 +0100
Hi Theo:

I think this works... I will try it a bit more tomorrow.

Thanks,
Ergus

On Sat, Feb 18, 2023 at 12:38:20AM +0100, Theodor Thornhill wrote:
>Ergus <spacibba <at> aol.com> writes:
>
>> On Fri, Feb 17, 2023 at 10:06:50PM +0100, Jostein Kj�nigsen wrote:
>>>2/17/23 20:28, Theodor Thornhill wrote:
>>>>Ergus <spacibba <at> aol.com> writes:
>>>>
>>>>>Hi:
>>>>>
>>>>>I just found that this indentations are wrong in csharp mode:
>>>>>
>>>>>// wrong
>>>>>new myNamespace.myClass
>>>>>{
>>>>>     Name1 = x.Value, // defun-block-intro
>>>>>	var2 = 2     // statement-cont
>>>>>	}            // statement-cont
>>>>>
>>>>>
>>>>>The problem seems to be related with the dot (.) in the new, because
>>>>>this variant indents correctly:
>>>>>
>>>>>// right
>>>>>new myClass
>>>>>{
>>>>>     Name1 = x.Value,   // brace-list-intro
>>>>>     var2 = 2           // brace-list-entry
>>>>>}                      // brace-list-close
>>>>>
>>>>>
>>>>>csharp-ts-mode is doing it right BTW.
>>>>>
>>>>Hi!
>>>>
>>>>Yeah, this is one of the harder issues iirc, and one of the ones that
>>>>made us move to tree-sitter in csharp-mode in the first place.
>>>>
>>>>What do you think Jostein?
>>>>
>>>>Patches welcome!
>>>>
>>>>Theo
>>>>
>>>First of all: Thanks for a detailed bug-report.
>>>
>>>Then for the bad news: I may be missing something here. I'm on the
>>>latest revision of the emacs-29 branch, and I really can't reproduce
>>>at all.
>>>
>>>I've tried typing out the concrete code-samples above, and I've tried
>>>copy-pasting them.
>>>
>>>No matter what I do, I cannot reproduce the behaviour outlined above.
>>>
>>>Ergus: Could you come up with a even more complete example?
>>>
>>>I mean... If I can't reproduce, I definitely won't be able to come up
>>>with a patch.
>>>
>>>--
>>>Jostein
>>>
>>
>> Hi Jostein:
>>
>> I just do:
>>
>> emacs -Q /tmp/main.cs
>>
>> Then pasted (or write) the code snippet shown in the example, and
>> re-indent the buffer:
>>
>> I get this:
>>
>> new myNamespace.myClass
>> {
>>      Name1 = 1,
>>          Name2 =2
>>          }
>>
>> Exactly like in the example C-c C-o shows the same than in the
>> example. Even the fontification is wrong.
>>
>> If I remove the dot like this myNamespacemyClass the fontification and
>> indentation is fixed immediately.
>>
>> I am using the master branch (emacs-version = 30.0.50) tomorrow I can
>> try to reproduce the issue on emacs-29 branch, but I have to build it.
>>
>> Best,
>> Ergus
>
>
>Try this, Ergus and Jostein. What do you think?
>
>diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el
>index b6b842d7fd..293a910081 100644
>--- a/lisp/progmodes/csharp-mode.el
>+++ b/lisp/progmodes/csharp-mode.el
>@@ -474,28 +474,37 @@ csharp-guess-basic-syntax
>          (and (eq (char-before) ?\])
>               (not (eq (char-after) ?\;))))))
>     `((annotation-top-cont ,(c-point 'iopl))))
>-
>    ((and
>      ;; Heuristics to find object initializers
>      (save-excursion
>        ;; Next non-whitespace character should be '{'
>        (goto-char (c-point 'boi))
>-       (eq (char-after) ?{))
>-     (save-excursion
>-       ;; 'new' should be part of the line
>-       (goto-char (c-point 'iopl))
>-       (looking-at ".*new.*"))
>+       (unless (eq (char-after) ?{)
>+         (backward-up-list 1 t t))
>+       (save-excursion
>+         ;; 'new' should be part of the line
>+         (goto-char (c-point 'iopl))
>+         (looking-at ".*new.*")))
>      ;; Line should not already be terminated
>      (save-excursion
>        (goto-char (c-point 'eopl))
>        (or (not (eq (char-before) ?\;))
>            (not (eq (char-before) ?\{)))))
>-    (if (save-excursion
>-          ;; if we have a hanging brace on line before
>-          (goto-char (c-point 'eopl))
>-          (eq (char-before) ?\{))
>-        `((brace-list-intro ,(c-point 'iopl)))
>-      `((block-open) (statement ,(c-point 'iopl)))))
>+    (cond
>+     ((save-excursion
>+        ;; if we have a hanging brace on line before
>+        (goto-char (c-point 'eopl))
>+        (eq (char-before) ?\{))
>+      `((brace-list-intro ,(c-point 'iopl))))
>+     ((save-excursion
>+        ;; if we have a hanging brace on line before
>+        (goto-char (c-point 'boi))
>+        (and (eq (char-after) ?\})
>+             `((brace-list-close ,(save-excursion
>+                                    (backward-up-list 1 t t)
>+                                    (point)))))))
>+     (t
>+      `((block-open) (statement ,(c-point 'iopl))))))
>    (t
>     (apply orig-fun args))))
>




Reply sent to stefankangas <at> gmail.com:
You have taken responsibility. (Mon, 04 Sep 2023 19:46:02 GMT) Full text and rfc822 format available.

Notification sent to Ergus <spacibba <at> aol.com>:
bug acknowledged by developer. (Mon, 04 Sep 2023 19:46:02 GMT) Full text and rfc822 format available.

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

From: stefankangas <at> gmail.com
To: Theodor Thornhill <theo <at> thornhill.no>
Cc: Ergus <spacibba <at> aol.com>, jostein <at> kjonigsen.net, 61541-done <at> debbugs.gnu.org
Subject: Re: bug#61541: 30.0.50; Wrong indentarion in csharp-mode
Date: Mon, 4 Sep 2023 12:45:15 -0700
Theodor Thornhill <theo <at> thornhill.no> writes:

> Try this, Ergus and Jostein. What do you think?

it seems like this patch was installed as commit dfc850ca0223, but the
bug was left open.

I'm therefore closing this bug report.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Tue, 03 Oct 2023 11:24:09 GMT) Full text and rfc822 format available.

This bug report was last modified 198 days ago.

Previous Next


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