unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#48992: cc-mode initialize list indentation bug
@ 2021-06-12 23:29 王斌波
  2021-08-21 17:57 ` Alan Mackenzie
  0 siblings, 1 reply; 4+ messages in thread
From: 王斌波 @ 2021-06-12 23:29 UTC (permalink / raw)
  To: 48992

[-- Attachment #1: Type: text/plain, Size: 3360 bytes --]

class A {
public:
  static std::set<int> setA;
};


std::set<int> A::setA {
  1,
    2,
    3
}


The indentation in setA initialize list is not correct. I want it like the following.
class A {
public:
  static std::set<int> setA;
};


std::set<int> A::setA {
  1,
  2,
  3
}




In GNU Emacs 27.1 (build 1, x86_64-w64-mingw32)
 of 2020-08-22 built on CIRROCUMULUS
Repository revision: 86d8d76aa36037184db0b2897c434cdaab1a9ae8
Repository branch: HEAD
Windowing system distributor 'Microsoft Corp.', version 10.0.19042
System Description: Microsoft Windows 10 Pro (v10.0.2009.19042.1052)


Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
Quit
Mark set [3 times]
(New file)
next-line: End of buffer
Saving file d:/test-indent.cpp...
Wrote d:/test-indent.cpp
Making completion list...


Configured using:
 'configure --without-dbus --host=x86_64-w64-mingw32
 --without-compress-install 'CFLAGS=-O2 -static''


Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND NOTIFY W32NOTIFY ACL GNUTLS LIBXML2
HARFBUZZ ZLIB TOOLKIT_SCROLL_BARS MODULES THREADS JSON PDUMPER LCMS2 GMP


Important settings:
  value of $LANG: CHS
  locale-coding-system: cp936


Major mode: C++//l


Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t
  abbrev-mode: t


Load-path shadows:
None found.


Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
format-spec rfc822 mml mml-sec password-cache epa derived epg epg-config
gnus-util rmail rmail-loaddefs text-property-search time-date subr-x seq
byte-opt gv bytecomp byte-compile cconv mm-decode mm-bodies mm-encode
mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils cc-mode cc-fonts
easymenu cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars
cc-defs cl-loaddefs cl-lib china-util tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel dos-w32 ls-lisp disp-table
term/w32-win w32-win w32-vars term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
timer select scroll-bar mouse jit-lock font-lock syntax facemenu
font-core term/tty-colors frame minibuffer cl-generic 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 charscript charprop
case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote threads w32notify w32
lcms2 multi-tty make-network-process emacs)


Memory information:
((conses 16 70013 6507)
 (symbols 48 8690 1)
 (strings 32 23033 1767)
 (string-bytes 1 829378)
 (vectors 16 12421)
 (vector-slots 8 210397 12036)
 (floats 8 24 228)
 (intervals 56 453 4)
 (buffers 1000 13))




[-- Attachment #2: Type: text/html, Size: 5536 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#48992: cc-mode initialize list indentation bug
  2021-06-12 23:29 bug#48992: cc-mode initialize list indentation bug 王斌波
@ 2021-08-21 17:57 ` Alan Mackenzie
  2021-08-28  1:40   ` 王斌波
  0 siblings, 1 reply; 4+ messages in thread
From: Alan Mackenzie @ 2021-08-21 17:57 UTC (permalink / raw)
  To: 王斌波; +Cc: acm, 48992

[-- Attachment #1: Type: text/plain, Size: 1248 bytes --]

Hello, Binbowang.

On Sun, Jun 13, 2021 at 07:29:55 +0800, 王斌波 wrote:
> class A {
> public:
>   static std::set<int> setA;
> };


> std::set<int> A::setA {
>   1,
>     2,
>     3
> }


> The indentation in setA initialize list is not correct. I want it like the following.
> class A {
> public:
>   static std::set<int> setA;
> };


> std::set<int> A::setA {
>   1,
>   2,
>   3
> }

The indentation was indeed incorrect.  CC Mode was mis-analysing the
brace list as a function.  I think the patch attached should fix this.

Would you please apply the patch to your CC Mode (in directory
..../emacs/lisp/progmodes), byte compile that file, load it into your
Emacs and try it out on your real C++ source code.  Then please let me
know if the bug is indeed fixed.  (If you would like any help with the
patching or byte compilation, feel free to send me private email.)


> In GNU Emacs 27.1 (build 1, x86_64-w64-mingw32)
>  of 2020-08-22 built on CIRROCUMULUS
> Repository revision: 86d8d76aa36037184db0b2897c434cdaab1a9ae8
> Repository branch: HEAD
> Windowing system distributor 'Microsoft Corp.', version 10.0.19042
> System Description: Microsoft Windows 10 Pro (v10.0.2009.19042.1052)

[ .... ]

-- 
Alan Mackenzie (Nuremberg, Germany).


[-- Attachment #2: diff.20210821.diff --]
[-- Type: text/plain, Size: 1052 bytes --]

diff -r 92a4592886a1 cc-engine.el
--- a/cc-engine.el	Sun Apr 25 17:26:38 2021 +0000
+++ b/cc-engine.el	Sat Aug 21 17:38:30 2021 +0000
@@ -11882,12 +11882,15 @@
 	  pos2 in-paren parens-before-brace
 	  paren-state paren-pos)
 
-      (setq res (c-backward-token-2 1 t lim))
+      (setq res
+	    (or (progn (c-backward-syntactic-ws)
+		       (c-back-over-compound-identifier))
+		(c-backward-token-2 1 t lim)))
       ;; Checks to do only on the first sexp before the brace.
       ;; Have we a C++ initialization, without an "="?
       (if (and (c-major-mode-is 'c++-mode)
 	       (cond
-		((and (or (not (eq res 0))
+		((and (or (not (memq res '(t 0)))
 			  (eq (char-after) ?,))
 		      (setq paren-state (c-parse-state))
 		      (setq paren-pos (c-pull-open-brace paren-state))
@@ -11911,7 +11914,7 @@
 		(t nil))
 	       (save-excursion
 		 (cond
-		  ((or (not (eq res 0))
+		  ((or (not (memq res '(t 0)))
 		       (eq (char-after) ?,))
 		   (and (setq paren-state (c-parse-state))
 			(setq paren-pos (c-pull-open-brace paren-state))

^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#48992: cc-mode initialize list indentation bug
  2021-08-21 17:57 ` Alan Mackenzie
@ 2021-08-28  1:40   ` 王斌波
  2021-08-29 14:56     ` Alan Mackenzie
  0 siblings, 1 reply; 4+ messages in thread
From: 王斌波 @ 2021-08-28  1:40 UTC (permalink / raw)
  To: acm@muc.de; +Cc: acm@muc.de, 48992@debbugs.gnu.org

[-- Attachment #1: Type: text/plain, Size: 1508 bytes --]

Hello, Alan.
  Thank you for your great work. I applyed the path, and the problem fixed. What i did is like this:
  1. apply the patch
  2. recompile the cc-engine.el
  3. restart emacs, edit a real cpp file. The indentation was correct now.


Binbo Wang (ChongQing, China).
On 8/22/2021 01:57,Alan Mackenzie<acm@muc.de> wrote:
Hello, Binbowang.

On Sun, Jun 13, 2021 at 07:29:55 +0800, 王斌波 wrote:
class A {
public:
static std::set<int> setA;
};


std::set<int> A::setA {
1,
2,
3
}


The indentation in setA initialize list is not correct. I want it like the following.
class A {
public:
static std::set<int> setA;
};


std::set<int> A::setA {
1,
2,
3
}

The indentation was indeed incorrect.  CC Mode was mis-analysing the
brace list as a function.  I think the patch attached should fix this.

Would you please apply the patch to your CC Mode (in directory
..../emacs/lisp/progmodes), byte compile that file, load it into your
Emacs and try it out on your real C++ source code.  Then please let me
know if the bug is indeed fixed.  (If you would like any help with the
patching or byte compilation, feel free to send me private email.)


In GNU Emacs 27.1 (build 1, x86_64-w64-mingw32)
of 2020-08-22 built on CIRROCUMULUS
Repository revision: 86d8d76aa36037184db0b2897c434cdaab1a9ae8
Repository branch: HEAD
Windowing system distributor 'Microsoft Corp.', version 10.0.19042
System Description: Microsoft Windows 10 Pro (v10.0.2009.19042.1052)

[ .... ]

--
Alan Mackenzie (Nuremberg, Germany).


[-- Attachment #2: Type: text/html, Size: 3592 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#48992: cc-mode initialize list indentation bug
  2021-08-28  1:40   ` 王斌波
@ 2021-08-29 14:56     ` Alan Mackenzie
  0 siblings, 0 replies; 4+ messages in thread
From: Alan Mackenzie @ 2021-08-29 14:56 UTC (permalink / raw)
  To: 王斌波; +Cc: 48992-done@debbugs.gnu.org

Hello, Binbo.

On Sat, Aug 28, 2021 at 09:40:20 +0800, 王斌波 wrote:
> Hello, Alan.
>   Thank you for your great work. I applyed the path, and the problem fixed. What i did is like this:
>   1. apply the patch
>   2. recompile the cc-engine.el
>   3. restart emacs, edit a real cpp file. The indentation was correct now.

Thank you indeed for carrying out these tests.  I have merged the patch
into the Emacs master branch, and I am thus closing the bug with this
post.

> Binbo Wang (ChongQing, China).
> On 8/22/2021 01:57,Alan Mackenzie<acm@muc.de> wrote:
> Hello, Binbowang.

-- 
Alan Mackenzie (Nuremberg, Germany).





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-08-29 14:56 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-06-12 23:29 bug#48992: cc-mode initialize list indentation bug 王斌波
2021-08-21 17:57 ` Alan Mackenzie
2021-08-28  1:40   ` 王斌波
2021-08-29 14:56     ` Alan Mackenzie

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).