aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorAlan Mackenzie2017-02-01 20:20:09 +0000
committerAlan Mackenzie2017-02-01 20:20:09 +0000
commit94ad13b93c6fc099a353c8eb27c00a68ee79a952 (patch)
tree4e68066d5b6431089ab1c44092c46995d26c42ba /doc
parent5d61ef0de9a3f5b1be9e93465cb88aae995975ba (diff)
downloademacs-94ad13b93c6fc099a353c8eb27c00a68ee79a952.tar.gz
emacs-94ad13b93c6fc099a353c8eb27c00a68ee79a952.zip
Allow C++ nested brace-list-entries to be better indented.
This fixes bug #24431. The key change of this bug fix is correctly analyzing nested brace lists when the opening element stands on the same line as both its introductory brace and an enclosing parameter list parenthesis. * list/progmodes/cc-align.el (c-lineup-under-anchor): New line-up function. * list/progmodes/cc-engine.el (c-looking-at-or-maybe-in-bracelist): Accept the presence of exactly an identifier between an open parenthesis and an open brace as evidence of the brace starting a brace list. (c-looking-at-statement-block): New function, extracted from c-looking-at-inexpr-block. Enhance it to analyze inner blocks recursively when needed. (c-looking-at-inexpr-block): Extract new function (see above) and call it. (c-add-stmt-syntax): Enhance, with new &optional parameter, to supply the prime syntactic symbol with a fixed anchor point. When this is used, restrict all added syntactic symbols to those having an anchor point on the same line. Add, in addition to the current additional symbols, c-brace-list-entry when needed; use c-looking-at-statement-block to determine the latter. (c-guess-basic-syntax, CASE 9D): Use c-add-stmt-syntax rather than just c-add-syntax, to assemble the syntactic context of a 'brace-list-entry, thus getting, possibly, several accompanying syntactic entries. * lisp/progmodes/cc-styles.el (c-style-alist, "gnu" style): New entry for 'brace-list-intro, namely c-lineup-arglist-intro-after-paren. * lisp/progmodes/cc-vars.el (c-offsets-alist): Change the factory default offset for 'brace-list-entry from 0 to c-lineup-under-anchor. * doc/misc/cc-mode.texi (Syntactic Symbols): Amend the definition of brace-list-intro. (Brace List Symbols): Amend the example to show the new analysis of brace lists when the first element comes on the same line as the opening brace. (Misc Line-Up): Document the new line-up function c-lineup-under-anchor.
Diffstat (limited to 'doc')
-rw-r--r--doc/misc/cc-mode.texi31
1 files changed, 25 insertions, 6 deletions
diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi
index 68a16c0ed74..14981c9c58b 100644
--- a/doc/misc/cc-mode.texi
+++ b/doc/misc/cc-mode.texi
@@ -4141,7 +4141,8 @@ Open brace of an enum or static array list. @ref{Brace List Symbols}.
4141@item brace-list-close 4141@item brace-list-close
4142Close brace of an enum or static array list. @ref{Brace List Symbols}. 4142Close brace of an enum or static array list. @ref{Brace List Symbols}.
4143@item brace-list-intro 4143@item brace-list-intro
4144First line in an enum or static array list. @ref{Brace List Symbols}. 4144First line after the opening @samp{@{} in an enum or static array
4145list. @ref{Brace List Symbols}.
4145@item brace-list-entry 4146@item brace-list-entry
4146Subsequent lines in an enum or static array list. @ref{Brace List 4147Subsequent lines in an enum or static array list. @ref{Brace List
4147Symbols}. 4148Symbols}.
@@ -4635,11 +4636,18 @@ example:
4635 4636
4636Here, you've already seen the analysis of lines 1, 2, 3, and 11. On 4637Here, you've already seen the analysis of lines 1, 2, 3, and 11. On
4637line 4, things get interesting; this line is assigned 4638line 4, things get interesting; this line is assigned
4638@code{brace-entry-open} syntactic symbol because it's a bracelist entry 4639@code{brace-entry-open} syntactic symbol because it's a bracelist
4639line that starts with an open brace. Lines 5 and 6 (and line 9) are 4640entry line that starts with an open brace. Lines 5 and 6 are pretty
4640pretty standard, and line 7 is a @code{brace-list-close} as you'd 4641standard, and line 7 is a @code{brace-list-close} as you'd expect.
4641expect. Once again, line 8 is assigned as @code{brace-entry-open} as is 4642Once again, line 8 is assigned as @code{brace-entry-open} as is line
4642line 10. 464310. Line 9 is assigned two syntactic elements, @code{brace-list-intro}
4644with anchor point at the @samp{@{} of line 8@footnote{This extra
4645syntactic element was introduced in @ccmode{} 5.33.1 to allow extra
4646flexibility in indenting the second line of such a construct. You can
4647preserve the behaviour resulting from the former syntactic analysis by
4648giving @code{brace-list-entry} an offset of
4649@code{c-lineup-under-anchor} (@pxref{Misc Line-Up}).}, and
4650@code{brace-list-entry} anchored on the @samp{1} of line 8.
4643 4651
4644@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 4652@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4645@node External Scope Symbols, Paren List Symbols, Brace List Symbols, Syntactic Symbols 4653@node External Scope Symbols, Paren List Symbols, Brace List Symbols, Syntactic Symbols
@@ -6288,6 +6296,17 @@ already has; think of it as an identity function for lineups.
6288 6296
6289@comment ------------------------------------------------------------ 6297@comment ------------------------------------------------------------
6290 6298
6299@defun c-lineup-under-anchor
6300
6301Line up a line directly underneath its anchor point. This is like
6302@samp{0}, except any previously calculated offset contributions are
6303disregarded.
6304
6305@workswith Any syntactic symbol which has an anchor point.
6306@end defun
6307
6308@comment ------------------------------------------------------------
6309
6291@defun c-lineup-cpp-define 6310@defun c-lineup-cpp-define
6292@findex lineup-cpp-define (c-) 6311@findex lineup-cpp-define (c-)
6293Line up macro continuation lines according to the indentation of the 6312Line up macro continuation lines according to the indentation of the