GNU logs - #73340, boring messages


Message sent to bug-cc-mode@HIDDEN:


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




Message sent:


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



Last modified: Sun, 12 Jan 2025 05:45:02 UTC

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