From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 21 16:47:07 2022 Received: (at submit) by debbugs.gnu.org; 21 Jun 2022 20:47:07 +0000 Received: from localhost ([127.0.0.1]:33445 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o3kmA-0004pi-M2 for submit@debbugs.gnu.org; Tue, 21 Jun 2022 16:47:07 -0400 Received: from lists.gnu.org ([209.51.188.17]:54752) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o3km6-0004pS-2o for submit@debbugs.gnu.org; Tue, 21 Jun 2022 16:47:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54172) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o3km3-0006dl-Sh for bug-gnu-emacs@gnu.org; Tue, 21 Jun 2022 16:47:01 -0400 Received: from md5i.com ([75.151.244.229]:46118) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o3km2-00017N-2u for bug-gnu-emacs@gnu.org; Tue, 21 Jun 2022 16:46:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=md5i.com; s=dkim; h=Content-Type:MIME-Version:Message-ID:Date:Subject:To:From:Sender: Reply-To:Cc:Content-Transfer-Encoding:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=TcAcvqh6WPqpX90BOPHGZ5QEkwEkiVdAPL7sOldL2ow=; b=qCSCZD9Y0opA7RB7mV2vU5FHSL k7PZbfby1Zm0kp+goBtdgmvTeJzECNiuP3VSejooFWEh6TucvL8OEIB0zWmK/v164vmoaiOwbKl93 dvuxNDKbmaluu+6KDW61phbRL; Received: from abode ([192.168.177.1] helo=miko) by md5i.com with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1o3klz-00GA47-Vs for bug-gnu-emacs@gnu.org; Tue, 21 Jun 2022 16:46:55 -0400 From: Michael Welsh Duggan To: bug-gnu-emacs@gnu.org Subject: CC Mode 5.35.1 (C++//l); Indentation using braced initializer lists X-Debbugs-Package: cc-mode Date: Tue, 21 Jun 2022 16:46:55 -0400 Message-ID: <874k0dvj5s.fsf@md5i.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: pass client-ip=75.151.244.229; envelope-from=mwd@md5i.com; helo=md5i.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.4 (-) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.4 (--) --=-=-= Content-Type: text/plain Package: cc-mode This could possibly be considered a feature request. It is relevant since C++ 11. Consider the following code: --=-=-= Content-Type: text/x-c\+\+ Content-Disposition: inline #include template struct Foo { Foo() : a(1, 2) // This indents well {} std::pair a; Foo(int) : a{2, 3} // This indents poorly {} }; --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Braced initializer lists don't line up well, as opposed to parenthesis. Emacs : GNU Emacs 29.0.50 (build 2, x86_64-pc-linux-gnu, X toolkit, cairo = version 1.16.0) of 2022-06-08 Package: CC Mode 5.35.1 (C++//l) Buffer Style: Pharos c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-st= ring-delim gen-comment-delim syntax-properties 1-bit) current state: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D (setq c-basic-offset 2 c-comment-only-line-offset 0 c-indent-comment-alist '((anchored-comment column . 0) (end-block space . = 1) (cpp-end-block space . 2)) c-indent-comments-syntactically-p nil c-block-comment-prefix "" c-comment-prefix-regexp '((pike-mode . "//+!?\\|\\**") (awk-mode . "#+") (other . "//+\\|\\**")) c-doc-comment-style 'doxygen c-cleanup-list '(scope-operator) c-hanging-braces-alist '((brace-list-open) (brace-entry-open) (statement-cont) (substatement-open after) (block-close . c-snug-do-while) (extern-lang-open after) (namespace-open after) (module-open after) (composition-open after) (inexpr-class-open after) (inexpr-class-close before) (arglist-cont-nonempt= y)) c-hanging-colons-alist nil c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist) c-backslash-column 48 c-backslash-max-column 72 c-special-indent-hook nil c-label-minimum-indentation 1 c-offsets-alist '((inexpr-class . +) (inexpr-statement . +) (lambda-intro-cont . +) (inlambda . 0) (template-args-cont c-lineup-template-args +) (incomposition . +) (inmodule . +) (innamespace . 0) (inextern-lang . 0) (composition-close . 0) (module-close . 0) (namespace-close . 0) (extern-lang-close . 0) (composition-open . 0) (module-open . 0) (namespace-open . 0) (extern-lang-open . 0) (objc-method-call-cont c-lineup-ObjC-method-call-colons c-lineup-ObjC-method-call + ) (objc-method-args-cont . c-lineup-ObjC-method-args) (objc-method-intro . [0]) (friend . 0) (cpp-define-intro c-lineup-cpp-define +) (cpp-macro-cont . +) (cpp-macro . [0]) (inclass . +) (stream-op . c-lineup-streamop) (arglist-cont-nonempty c-lineup-gcc-asm-reg c-lineup-arglist ) (arglist-cont c-lineup-gcc-asm-reg 0) (comment-intro c-lineup-knr-region-comment c-lineup-comment ) (catch-clause . 0) (else-clause . 0) (do-while-closure . 0) (access-label . /) (case-label . *) (substatement . +) (statement-case-intro . *) (statement . 0) (brace-entry-open . 0) (brace-list-entry . 0) (brace-list-close . 0) (block-close . 0) (block-open . 0) (inher-cont . c-lineup-multi-inher) (inher-intro . +) (member-init-cont . c-lineup-multi-inher) (member-init-intro . +) (annotation-var-cont . +) (annotation-top-cont . 0) (topmost-intro . 0) (knr-argdecl . 0) (func-decl-cont . +) (inline-close . 0) (class-close . 0) (class-open . 0) (defun-block-intro . +) (defun-close . 0) (defun-open . 0) (c . c-lineup-C-comments) (string . c-lineup-dont-change) (topmost-intro-cont . c-lineup-topmost-intro-cont) (brace-list-intro . +) (brace-list-open . 0) (inline-open . 0) (arglist-close . +) (arglist-intro . +) (statement-cont . c-lineup-math) (statement-case-open . *) (label . *) (substatement-label . 2) (substatement-open . 0) (knr-argdecl-intro . +) (statement-block-intro . +) ) c-buffer-is-cc-mode 'c++-mode c-tab-always-indent t c-syntactic-indentation t c-syntactic-indentation-in-macros t c-ignore-auto-fill '(string cpp code) c-auto-align-backslashes t c-backspace-function 'backward-delete-char-untabify c-delete-function 'delete-char c-electric-pound-behavior nil c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu")) c-enable-xemacs-performance-kludge-p nil c-old-style-variable-behavior nil defun-prompt-regexp nil tab-width 8 comment-column 32 parse-sexp-ignore-comments t parse-sexp-lookup-properties t auto-fill-function nil comment-multi-line t comment-start-skip "\\(?://+\\|/\\*+\\)\\s *" fill-prefix nil fill-column 95 paragraph-start "[ ]*\\(//+\\|\\**\\)[ ]*$\\|^\f" adaptive-fill-mode t adaptive-fill-regexp "[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*\\([-=E2=80=93!|#%= ;>*=C2=B7=E2=80=A2=E2=80=A3=E2=81=83=E2=97=A6]+[ ]*\\)*\\)" ) --=20 Michael Welsh Duggan (md5i@md5i.com) --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Fri Jun 24 06:52:41 2022 Received: (at 56130) by debbugs.gnu.org; 24 Jun 2022 10:52:41 +0000 Received: from localhost ([127.0.0.1]:41108 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o4gvY-0003DT-TP for submit@debbugs.gnu.org; Fri, 24 Jun 2022 06:52:41 -0400 Received: from colin.muc.de ([193.149.48.1]:13525 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1o4gvW-0003DF-T1 for 56130@debbugs.gnu.org; Fri, 24 Jun 2022 06:52:39 -0400 Received: (qmail 44856 invoked by uid 3782); 24 Jun 2022 10:52:32 -0000 Received: from acm.muc.de (p4fe1599c.dip0.t-ipconnect.de [79.225.89.156]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Fri, 24 Jun 2022 12:52:31 +0200 Received: (qmail 5707 invoked by uid 1000); 24 Jun 2022 10:52:31 -0000 Date: Fri, 24 Jun 2022 10:52:31 +0000 To: Michael Welsh Duggan Subject: Re: bug#56130: CC Mode 5.35.1 (C++//l); Indentation using braced initializer lists Message-ID: References: <874k0dvj5s.fsf@md5i.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <874k0dvj5s.fsf@md5i.com> X-Submission-Agent: TMDA/1.3.x (Ph3nix) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 56130 Cc: 56130@debbugs.gnu.org, bug-cc-mode@gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Michael. On Tue, Jun 21, 2022 at 16:46:55 -0400, Michael Welsh Duggan wrote: > Package: cc-mode > This could possibly be considered a feature request. It is relevant > since C++ 11. Consider the following code: > #include > > template > struct Foo { > Foo() > : a(1, > 2) // This indents well > {} > > std::pair a; > Foo(int) > : a{2, > 3} // This indents poorly > {} > }; > Braced initializer lists don't line up well, as opposed to parenthesis. You can configure brace-list-intro in c-offsets-alist for this. At the moment, you've got (brace-list-intro . +) , which is indenting the 3} one level in from Foo. The entry (brace-list-intro . (first c-lineup-2nd-brace-entry-in-arglist c-lineup-class-decl-init-+ +)) has been the default in gnu style (and several others) for some while, now. The pertinent part of this is the function c-lineup-class-decl-init-+, which would indent the 3} one level in from the "a" in the line above. Alternatively, you could use c-lineup-class-decl-after-brace, which would line up the 3} under the 2 in the line above. This give a neater alignment when it is known there aren't too many long field names in the initialisation list following the colon. Both of these are described in the CC Mode manual page "List Line-Up". I think one of them will give you what you need. Would you please try amending your style configuration, and confirm it fixes the problem, or tell me how it falls short. Thanks! > Emacs : GNU Emacs 29.0.50 (build 2, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0) > of 2022-06-08 > Package: CC Mode 5.35.1 (C++//l) > Buffer Style: Pharos > c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties 1-bit) > current state: > ============== > (setq > c-basic-offset 2 > c-comment-only-line-offset 0 > c-indent-comment-alist '((anchored-comment column . 0) (end-block space . 1) > (cpp-end-block space . 2)) > c-indent-comments-syntactically-p nil > c-block-comment-prefix "" > c-comment-prefix-regexp '((pike-mode . "//+!?\\|\\**") (awk-mode . "#+") > (other . "//+\\|\\**")) > c-doc-comment-style 'doxygen > c-cleanup-list '(scope-operator) > c-hanging-braces-alist '((brace-list-open) (brace-entry-open) > (statement-cont) (substatement-open after) > (block-close . c-snug-do-while) > (extern-lang-open after) (namespace-open after) > (module-open after) (composition-open after) > (inexpr-class-open after) > (inexpr-class-close before) (arglist-cont-nonempty)) > c-hanging-colons-alist nil > c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist) > c-backslash-column 48 > c-backslash-max-column 72 > c-special-indent-hook nil > c-label-minimum-indentation 1 > c-offsets-alist '((inexpr-class . +) > (inexpr-statement . +) > (lambda-intro-cont . +) > (inlambda . 0) > (template-args-cont c-lineup-template-args +) > (incomposition . +) > (inmodule . +) > (innamespace . 0) > (inextern-lang . 0) > (composition-close . 0) > (module-close . 0) > (namespace-close . 0) > (extern-lang-close . 0) > (composition-open . 0) > (module-open . 0) > (namespace-open . 0) > (extern-lang-open . 0) > (objc-method-call-cont > c-lineup-ObjC-method-call-colons > c-lineup-ObjC-method-call > + > ) > (objc-method-args-cont . c-lineup-ObjC-method-args) > (objc-method-intro . [0]) > (friend . 0) > (cpp-define-intro c-lineup-cpp-define +) > (cpp-macro-cont . +) > (cpp-macro . [0]) > (inclass . +) > (stream-op . c-lineup-streamop) > (arglist-cont-nonempty > c-lineup-gcc-asm-reg > c-lineup-arglist > ) > (arglist-cont c-lineup-gcc-asm-reg 0) > (comment-intro > c-lineup-knr-region-comment > c-lineup-comment > ) > (catch-clause . 0) > (else-clause . 0) > (do-while-closure . 0) > (access-label . /) > (case-label . *) > (substatement . +) > (statement-case-intro . *) > (statement . 0) > (brace-entry-open . 0) > (brace-list-entry . 0) > (brace-list-close . 0) > (block-close . 0) > (block-open . 0) > (inher-cont . c-lineup-multi-inher) > (inher-intro . +) > (member-init-cont . c-lineup-multi-inher) > (member-init-intro . +) > (annotation-var-cont . +) > (annotation-top-cont . 0) > (topmost-intro . 0) > (knr-argdecl . 0) > (func-decl-cont . +) > (inline-close . 0) > (class-close . 0) > (class-open . 0) > (defun-block-intro . +) > (defun-close . 0) > (defun-open . 0) > (c . c-lineup-C-comments) > (string . c-lineup-dont-change) > (topmost-intro-cont . c-lineup-topmost-intro-cont) > (brace-list-intro . +) <========================= > (brace-list-open . 0) > (inline-open . 0) > (arglist-close . +) > (arglist-intro . +) > (statement-cont . c-lineup-math) > (statement-case-open . *) > (label . *) > (substatement-label . 2) > (substatement-open . 0) > (knr-argdecl-intro . +) > (statement-block-intro . +) > ) > c-buffer-is-cc-mode 'c++-mode > c-tab-always-indent t > c-syntactic-indentation t > c-syntactic-indentation-in-macros t > c-ignore-auto-fill '(string cpp code) > c-auto-align-backslashes t > c-backspace-function 'backward-delete-char-untabify > c-delete-function 'delete-char > c-electric-pound-behavior nil > c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu")) > c-enable-xemacs-performance-kludge-p nil > c-old-style-variable-behavior nil > defun-prompt-regexp nil > tab-width 8 > comment-column 32 > parse-sexp-ignore-comments t > parse-sexp-lookup-properties t > auto-fill-function nil > comment-multi-line t > comment-start-skip "\\(?://+\\|/\\*+\\)\\s *" > fill-prefix nil > fill-column 95 > paragraph-start "[ ]*\\(//+\\|\\**\\)[ ]*$\\|^\f" > adaptive-fill-mode t > adaptive-fill-regexp "[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*\\([-–!|#%;>*·•‣⁃◦]+[ ]*\\)*\\)" > ) > -- > Michael Welsh Duggan > (md5i@md5i.com) -- Alan Mackenzie (Nuremberg, Germany).