unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Alan Mackenzie <acm@muc.de>
To: Konstantin Kharlamov <hi-angel@yandex.ru>
Cc: 29959@debbugs.gnu.org
Subject: bug#29959: cc-mode: wrong indentation in absence of semicolon
Date: Sat, 13 Jan 2018 20:37:52 +0000	[thread overview]
Message-ID: <20180113203752.GA9688@ACM> (raw)
In-Reply-To: <8a042ba1-301c-8943-1381-537cba8a2334@yandex.ru>

Hello, Konstantin.

On Sat, Jan 13, 2018 at 14:11:31 +0300, Konstantin Kharlamov wrote:
> Just tested with current git, the problem is still present.

> I am almost sure this is a regression, I don't remember having that 
> problem before. The real-world consequences are just too annoying for it 
> to go unnoticed — basically, every time I'm typing variables indentation 
> just doesn't work. And I also seem to remember a few irrelevant 
> situations where I was typing conditions with the like results.

The problem originates in a new feature, C99 compound literals, which was
committed on 2017-11-10.  This detects brace blocks (meaning something
like the initialisation of a struct) in the middle of executable code,
but it is clear the test for such a brace block isn't rigorous enough,
since even function blocks are being mistaken for them.

> On 03.01.2018 09:02, Konstantin Kharlamov wrote:
> > # Steps to reproduce:
> > 1. Open emacs -Q test.c
> > 2. Write the following:

> > int main() {
> >      int a,
> > }

> > 3. put the caret after the comma symbol, and press enter, e.g. to
> > continue writing variables on the new line.

> > # Expected:
> > the new line alignment stands out with regard to the prev. line.

> > # Actual:
> > the new line aligned to the beginning of the prev. line.

> > # Workarounds:
> > Typing the following text:

> > int main() {
> >      int a,;
> > }

> > …then pressing enter right after the comma works as expected.

At the moment, the bug you're seeing is triggered by CC Mode checking for
commas and semicolons in blocks; if the last such delimiter is a comma,
the block is taken as a brace block.  So a workaround, for the moment, is
to ensure that you have a semicolon in each block as the last delimiter
there.

I will be working on fixing this bug.  Thanks for taking the trouble to
report it.

> > ------------

> > In GNU Emacs 27.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.26)
> >   of 2017-12-15 built on constantine-N61Ja
> > Repository revision: 6c301afa70f6eac32ad1ce92412ea3cf6fcdeeca
> > Windowing system distributor 'The X.Org Foundation', version 11.0.11906000
> > System Description: Arch Linux

[ .... ]

-- 
Alan Mackenzie (Nuremberg, Germany).





  reply	other threads:[~2018-01-13 20:37 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-03  6:02 bug#29959: cc-mode: wrong indentation in absence of semicolon Konstantin Kharlamov
2018-01-13 11:11 ` Konstantin Kharlamov
2018-01-13 20:37   ` Alan Mackenzie [this message]
2018-01-18 18:41     ` Alan Mackenzie
     [not found]     ` <20180118184137.GB21934@ACM>
2018-01-18 19:08       ` Konstantin Kharlamov
2018-01-18 19:19         ` Konstantin Kharlamov
2018-02-08  1:53       ` Noam Postavsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180113203752.GA9688@ACM \
    --to=acm@muc.de \
    --cc=29959@debbugs.gnu.org \
    --cc=hi-angel@yandex.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).