diff options
| author | Alan Mackenzie | 2017-02-01 20:20:09 +0000 |
|---|---|---|
| committer | Alan Mackenzie | 2017-02-01 20:20:09 +0000 |
| commit | 94ad13b93c6fc099a353c8eb27c00a68ee79a952 (patch) | |
| tree | 4e68066d5b6431089ab1c44092c46995d26c42ba /doc/misc | |
| parent | 5d61ef0de9a3f5b1be9e93465cb88aae995975ba (diff) | |
| download | emacs-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/misc')
| -rw-r--r-- | doc/misc/cc-mode.texi | 31 |
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 |
| 4142 | Close brace of an enum or static array list. @ref{Brace List Symbols}. | 4142 | Close brace of an enum or static array list. @ref{Brace List Symbols}. |
| 4143 | @item brace-list-intro | 4143 | @item brace-list-intro |
| 4144 | First line in an enum or static array list. @ref{Brace List Symbols}. | 4144 | First line after the opening @samp{@{} in an enum or static array |
| 4145 | list. @ref{Brace List Symbols}. | ||
| 4145 | @item brace-list-entry | 4146 | @item brace-list-entry |
| 4146 | Subsequent lines in an enum or static array list. @ref{Brace List | 4147 | Subsequent lines in an enum or static array list. @ref{Brace List |
| 4147 | Symbols}. | 4148 | Symbols}. |
| @@ -4635,11 +4636,18 @@ example: | |||
| 4635 | 4636 | ||
| 4636 | Here, you've already seen the analysis of lines 1, 2, 3, and 11. On | 4637 | Here, you've already seen the analysis of lines 1, 2, 3, and 11. On |
| 4637 | line 4, things get interesting; this line is assigned | 4638 | line 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 |
| 4639 | line that starts with an open brace. Lines 5 and 6 (and line 9) are | 4640 | entry line that starts with an open brace. Lines 5 and 6 are pretty |
| 4640 | pretty standard, and line 7 is a @code{brace-list-close} as you'd | 4641 | standard, and line 7 is a @code{brace-list-close} as you'd expect. |
| 4641 | expect. Once again, line 8 is assigned as @code{brace-entry-open} as is | 4642 | Once again, line 8 is assigned as @code{brace-entry-open} as is line |
| 4642 | line 10. | 4643 | 10. Line 9 is assigned two syntactic elements, @code{brace-list-intro} |
| 4644 | with anchor point at the @samp{@{} of line 8@footnote{This extra | ||
| 4645 | syntactic element was introduced in @ccmode{} 5.33.1 to allow extra | ||
| 4646 | flexibility in indenting the second line of such a construct. You can | ||
| 4647 | preserve the behaviour resulting from the former syntactic analysis by | ||
| 4648 | giving @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 | |||
| 6301 | Line up a line directly underneath its anchor point. This is like | ||
| 6302 | @samp{0}, except any previously calculated offset contributions are | ||
| 6303 | disregarded. | ||
| 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-) |
| 6293 | Line up macro continuation lines according to the indentation of the | 6312 | Line up macro continuation lines according to the indentation of the |