X-Loop: help-debbugs@HIDDEN Subject: bug#73340: CC Mode 5.35.2 (C++//l); inline-open lacks associated position, making it hard to express the libstdc++ indent style Resent-From: Arsen =?UTF-8?Q?Arsenovi=C4=87?= <arsen@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-cc-mode@HIDDEN Resent-Date: Wed, 18 Sep 2024 23:49:01 +0000 Resent-Message-ID: <handler.73340.B.172670331917626 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: report 73340 X-GNU-PR-Package: cc-mode X-GNU-PR-Keywords: To: 73340 <at> debbugs.gnu.org X-Debbugs-Original-To: bug-gnu-emacs@HIDDEN Received: via spool by submit <at> debbugs.gnu.org id=B.172670331917626 (code B ref -1); Wed, 18 Sep 2024 23:49:01 +0000 Received: (at submit) by debbugs.gnu.org; 18 Sep 2024 23:48:39 +0000 Received: from localhost ([127.0.0.1]:59383 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1sr4PW-0004aE-Bd for submit <at> debbugs.gnu.org; Wed, 18 Sep 2024 19:48:38 -0400 Received: from lists.gnu.org ([209.51.188.17]:58832) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <arsen@HIDDEN>) id 1sr4PU-0004a6-DB for submit <at> debbugs.gnu.org; Wed, 18 Sep 2024 19:48:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <arsen@HIDDEN>) id 1sr4PC-0006bs-AZ for bug-gnu-emacs@HIDDEN; Wed, 18 Sep 2024 19:48:18 -0400 Received: from mout-p-102.mailbox.org ([2001:67c:2050:0:465::102]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_CHACHA20_POLY1305:256) (Exim 4.90_1) (envelope-from <arsen@HIDDEN>) id 1sr4P7-0001J6-7a for bug-gnu-emacs@HIDDEN; Wed, 18 Sep 2024 19:48:16 -0400 Received: from smtp102.mailbox.org (smtp102.mailbox.org [10.196.197.102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-102.mailbox.org (Postfix) with ESMTPS id 4X8FhP0zfPz9tqG for <bug-gnu-emacs@HIDDEN>; Thu, 19 Sep 2024 01:48:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aarsen.me; s=MBO0001; t=1726703285; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=1eN4LTss5w/ltc6syRODSvsIEdAV4U+r2D2Zb4dK/XU=; b=r9X6QCbsyFNcS6V9qZR9bc+jFCScyeti7CT+p1n8qfq1poiQEofPzaJO8H4p90Nf7Bkp2n MqtY6WG1+2xK/xVO3MIBnhC2Lhx/zadVZ8KDfvMfBPlcL4cZlxpfWp4vJok6HywoLobu3U Mw34Da1vV36oqpBvPikExIcjlwiKpM8zIt8yVrqfQLRtnT3N7qUCCg5IySSPuXt9i3WBbk LtviFmh5SQheq0zaRtksioI4J4LE/JRst7/XRtpPVKR3zg1YfBgQrpS3Uu20wCoVQVB/Mz FmAclrHy5468D+h+KPnoxSw0wKhOO9QfUgCdGW9/sOTf7lUDF7Nwjh2cbatiow== From: Arsen =?UTF-8?Q?Arsenovi=C4=87?= <arsen@HIDDEN> Date: Thu, 19 Sep 2024 01:48:01 +0200 Message-ID: <86ttecikwe.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2001:67c:2050:0:465::102; envelope-from=arsen@HIDDEN; helo=mout-p-102.mailbox.org X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.7 (-) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -2.7 (--) Package: cc-mode Hi! In the following snippet, which is intentionally misindented on the template line: struct s { template<typename> void f() {} }; CC-mode seems to not be able to deduce that {} should line up with f(). This is troublesome in a real mode example of libstdc++, whose code style mandates that templates receive an extra level of indentation: template<> void f() { // this is OK } =20=20 struct s { template<> void f() { // this is not OK } }; Now, this style required some special handling so far, of course: --8<---------------cut here---------------start------------->8--- (defun glibcxx/lineup-template-cont (sym-form) "Indents sym-forms with a single level if they are a continuation of a template. Implements rules 4 and 5 (Template class indentation, Template function indentation)." (save-excursion (goto-char (c-langelem-pos sym-form)) (if (looking-at-p "\\<template\\>") '+ nil))) (defun glibcxx/2nd-col () "Returns the second positions column from the current `c-langelem-sym'." (save-excursion (let ((pos (c-langelem-2nd-pos c-syntactic-element))) (if (not pos) nil (goto-char pos) (current-column))))) (defun glibcxx/lineup-class-open-close (sym-form) "Indents class-open/class-close lines with their corresponding class/stru= ct lines." (if (not (seq-contains-p '(class-open class-close) (c-langelem-sym sym-form))) nil (let ((col (glibcxx/2nd-col))) (if col (vector col) nil)))) (defconst glibcxx/cc-style '("gnu" (c-offsets-alist . ((topmost-intro-cont . (first glibcxx/lineup-template-cont c-lineup-topmost-intro-cont c-lineup-gnu-DEFUN-intro-cont)) (defun-open . glibcxx/lineup-template-cont) (class-open . glibcxx/lineup-class-open-close) (class-close . glibcxx/lineup-class-open-close) ;; 07. Member initialization lists (member-init-intro . 0)))) "Code style used by the GNU C++ Standard Library") --8<---------------cut here---------------end--------------->8--- ... but the trouble arose when I went to add the same styling to inline functions, since inline-open does not have a position relative to the template; for s::f above, syntactic analysis gives us: ((inclass 61) (inline-open)). As a result, the definition must be relative to the class definition itself, but it is not in the case of member templates. The full libstdc++ code style is presented here: https://gcc.gnu.org/onlinedocs/libstdc++/manual/source_code_style.html I'd also like to ask if you'd like to have it in-tree (I'd be happy to work on it). Really, the code style is a bit strange IMO, but it is what it is. Thank you in advance, and sorry to bother you again so soon :-/ Have a lovely day. Emacs : GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24= .42, cairo version 1.18.0) of 2024-08-31 Package: CC Mode 5.35.2 (C++//l) Buffer Style: glibcxx c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-st= ring-delim gen-comment-delim syntax-properties category-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 . 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 '((java-mode . javadoc) (pike-mode . autodoc) (c-mode = . gtkdoc) (c++-mode . gtkdoc)) c-cleanup-list '(scope-operator) c-hanging-braces-alist '((substatement-open before after) (arglist-cont-no= nempty)) 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 '(t c-gnu-impose-minimum) c-label-minimum-indentation 1 c-offsets-alist '((inexpr-class . +) (inexpr-statement . +) (lambda-intro-cont . +) (inlambda . 0) (template-args-cont c-lineup-template-args c-lineup-template-args-indented-from-margin) (incomposition . +) (inmodule . +) (innamespace . +) (inextern-lang . +) (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 . 0) (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 . 0) (annotation-var-cont . +) (annotation-top-cont . 0) (constraint-cont . +) (topmost-intro . 0) (knr-argdecl . 0) (func-decl-cont . +) (inline-close . 0) (class-close . glibcxx/lineup-class-open-close) (class-open . glibcxx/lineup-class-open-close) (defun-block-intro . +) (defun-close . 0) (defun-open . glibcxx/lineup-template-cont) (c . c-lineup-C-comments) (string . c-lineup-dont-change) (topmost-intro-cont first glibcxx/lineup-template-cont c-lineup-topmost-intro-cont c-lineup-gnu-DEFUN-intro-cont) (brace-list-intro first c-lineup-2nd-brace-entry-in-arglist c-lineup-class-decl-init-+ +) (brace-list-open . +) (inline-open . 0) (arglist-close . c-lineup-arglist) (arglist-intro . c-lineup-arglist-intro-after-paren) (statement-cont . +) (statement-case-open . +) (label . 0) (substatement-label . 0) (substatement-open . +) (knr-argdecl-intro . 5) (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 'c-do-auto-fill comment-multi-line t comment-start-skip "\\(?://+\\|/\\*+\\)\\s *" fill-prefix nil fill-column 79 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 Arsen Arsenovi=C4=87
Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) Content-Type: text/plain; charset=utf-8 X-Loop: help-debbugs@HIDDEN From: help-debbugs@HIDDEN (GNU bug Tracking System) To: Arsen =?UTF-8?Q?Arsenovi=C4=87?= <arsen@HIDDEN> Subject: bug#73340: Acknowledgement (CC Mode 5.35.2 (C++//l); inline-open lacks associated position, making it hard to express the libstdc++ indent style) Message-ID: <handler.73340.B.172670331917626.ack <at> debbugs.gnu.org> References: <86ttecikwe.fsf@HIDDEN> X-Gnu-PR-Message: ack 73340 X-Gnu-PR-Package: cc-mode Reply-To: 73340 <at> debbugs.gnu.org Date: Wed, 18 Sep 2024 23:49:01 +0000 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-cc-mode@HIDDEN If you wish to submit further information on this problem, please send it to 73340 <at> debbugs.gnu.org. Please do not send mail to help-debbugs@HIDDEN unless you wish to report a problem with the Bug-tracking system. --=20 73340: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D73340 GNU Bug Tracking System Contact help-debbugs@HIDDEN with problems
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.