GNU bug report logs -
#50538
[PATCH] 28.0.50; electric-pair-mode fails to pair double quotes in some cases in CC mode
Previous Next
Reported by: Jim Porter <jporterbugs <at> gmail.com>
Date: Sun, 12 Sep 2021 03:59:02 UTC
Severity: normal
Tags: patch
Fixed in version 29.1
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
On 9/16/2021 10:04 AM, João Távora wrote:
>
> I couldn't understand the initial issue fully, but I can only confirm
> that the relationship between cc-mode and electric-pair-mode has been
> rocky. I think the situation is similar with electric-layout-mode and
> with electric-indent-mode, to a certain degree (though I am not sure for
> this last one).
Hopefully the following summary will help. My patch is essentially an
enhancement of the patch from bug#36474. In that bug, Alan Mackenzie
describes the problem:
> Diagnosis: electric-pair--unbalanced-strings-p works after the (single)
> newly typed " has been stripped from the buffer. It attempts to
> determine whether there are any open strings after the point of
> insertion. It does this by using parse-partial-sexp, and checks (nth 3
> <result>) as evidence of an open string.
>
> This does not work in CC Mode, since although there is an open string
> marker (with a string fence syntax-table property on it) this is
> "closed" (from parse-partial-sexp's point of view) by the string fence
> property on the newline at the end of the line.
> electric-pair--unbalanced-strings-p thus returns the wrong result.
The fix in that bug was to check if the just-inserted double-quote "is
marked with a string fence syntax-table text property". That fixes the
issue described in bug#36474, but it's not quite the right logic. CC
Mode gives the *last* double-quote on a line the string fence property
if a line has unbalanced quotes. Thus, the patch changes the behavior to
check the last double-quote on the line, rather than the just-inserted
double-quote.
The patch makes one other improvement as well: it doesn't check for the
string fence property on a double-quote inside a comment. CC Mode
doesn't apply string fence properties there, since it's not necessary.
Therefore, inside a comment, `c-electric-pair-inhibit-predicate' just
defers to the default value of `electric-pair-inhibit-predicate'.
As I mentioned earlier in the thread, this isn't quite perfect behavior,
but it significantly improves the common case (`electric-pair-mode' with
default or "default-like" settings). CC Mode's practice of closing
strings at the end of a line - even without a closing quote - just
doesn't play nicely with `electric-pair-mode', so barring some major
changes to either CC Mode or `electric-pair-mode', I can't think of a
way to improve this patch beyond where it's at now.
This bug report was last modified 3 years and 248 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.