CC Mode 5.30 news.

This commit is contained in:
Martin Stjernholm 2003-07-03 12:49:26 +00:00
parent d9e94c2273
commit b5a670812e

271
etc/NEWS
View file

@ -936,6 +936,277 @@ will read from standard input and mark the produced tags as belonging to
the file FILE.
+++
** CC Mode changes.
*** Font lock support.
CC Mode now provides font lock support for all its languages. This
supersedes the font lock patterns that have been in the core font lock
package for C, C++, Java and Objective-C. Like indentation, font
locking is done in a uniform way across all languages (except the new
AWK mode - see below). That means that the new font locking will be
different from the old patterns in various details for most languages.
The main goal of the font locking in CC Mode is accuracy, to provide a
dependable aid in recognizing the various constructs. Some, like
strings and comments, are easy to recognize while others like
declarations and types can be very tricky. CC Mode can go to great
lengths to recognize declarations and casts correctly, especially when
the types aren't recognized by standard patterns. This is a fairly
demanding analysis which can be slow on older hardware, and it can
therefore be disabled by choosing a lower decoration level with the
variable font-lock-maximum-decoration.
Note that the most demanding font lock level has been tuned with lazy
fontification in mind, i.e. there should be a support mode that waits
with the fontification until the text is actually shown
(e.g. Just-in-time Lock mode, which is the default, or Lazy Lock
mode). Fontifying a file with several thousand lines in one go can
take the better part of a minute.
**** The (c|c++|objc|java|idl|pike)-font-lock-extra-types variables
are now used by CC Mode to recognize identifiers that are certain to
be types. (They are also used in cases that aren't related to font
locking.) At the maximum decoration level, types are often recognized
properly anyway, so these variables should be fairly restrictive and
not contain patterns for uncertain types.
**** Support for documentation comments.
There is a "plugin" system to fontify documentation comments like
Javadoc and the markup within them. It's independent of the host
language, so it's possible to e.g. turn on Javadoc font locking in C
buffers. See the variable c-doc-comment-style for details.
Currently two kinds of doc comment styles are recognized: Suns Javadoc
and Autodoc which is used in Pike. This is by no means a complete
list of the most common tools; if your doc comment extractor of choice
is missing then please drop a note to bug-cc-mode@gnu.org.
**** Better handling of C++ templates.
As a side effect of the more accurate font locking, C++ templates are
now handled much better. The angle brackets that delimit them are
given parenthesis syntax so that they can be navigated like other
parens.
This also improves indentation of templates, although there still is
work to be done in that area. E.g. it's required that multiline
template clauses are written in full and then refontified to be
recognized, and the indentation of nested templates is a bit odd and
not as configurable as it ought to be.
**** Improved handling of Objective-C and CORBA IDL.
Especially the support for Objective-C and IDL has gotten an overhaul.
The special "@" declarations in Objective-C are handled correctly.
All the keywords used in CORBA IDL, PSDL, and CIDL are recognized and
handled correctly, also wrt indentation.
*** Support for the AWK language.
Support for the AWK language has been introduced. The implementation is
based around GNU AWK version 3.1, but it should work pretty well with
any AWK. As yet, not all features of CC Mode have been adapted for AWK.
Here is a summary:
**** Indentation Engine
The CC Mode indentation engine fully supports AWK mode.
AWK mode handles code formatted in the conventional AWK fashion: `{'s
which start actions, user-defined functions, or compound statements are
placed on the same line as the associated construct; the matching `}'s
are normally placed under the start of the respective pattern, function
definition, or structured statement.
The predefined indentation functions haven't yet been adapted for AWK
mode, though some of them may work serendipitously. There shouldn't be
any problems writing custom indentation functions for AWK mode.
The command C-c C-q (c-indent-defun) hasn't yet been adapted for AWK,
though in practice it works properly nearly all the time. Should it
fail, explicitly set the region around the function (using C-u C-SPC:
C-M-h probably won't work either) then do C-M-\ (indent-region).
**** Font Locking
There is a single level of font locking in AWK mode, rather than the
three distinct levels the other modes have. There are several
idiosyncrasies in AWK mode's font-locking due to the peculiarities of
the AWK language itself.
**** Comment Commands
M-; (indent-for-comment) works fine. None of the other CC Mode
comment formatting commands have yet been adapted for AWK mode.
**** Movement Commands
Most of the movement commands work in AWK mode. The most important
exceptions are M-a (c-beginning-of-statement) and M-e
(c-end-of-statement) which haven't yet been adapted.
The notion of "defun" has been augmented to include AWK pattern-action
pairs. C-M-a (c-awk-beginning-of-defun) and C-M-e (c-awk-end-of-defun)
recognise these pattern-action pairs, as well as user defined
functions.
**** Auto-newline Insertion and Clean-ups
Auto-newline insertion hasn't yet been adapted for AWK. Some of
the clean-ups can actually convert good AWK code into syntactically
invalid code. These features are best disabled in AWK buffers.
*** New syntactic symbols in IDL mode.
The top level constructs "module" and "composition" (from CIDL) are
now handled like "namespace" in C++: They are given syntactic symbols
module-open, module-close, inmodule, composition-open,
composition-close, and incomposition.
*** New functions to do hungry delete without enabling hungry delete mode.
The functions c-hungry-backspace and c-hungry-delete-forward can be
bound to keys to get this feature without toggling a mode.
Contributed by Kevin Ryde.
*** Better control over require-final-newline.
The variable that controls how to handle a final newline when the
buffer is saved, require-final-newline, is now customizable on a
per-mode basis through c-require-final-newline. The default is to set
it to t only in languages that mandate a final newline in source files
(C, C++ and Objective-C).
*** Slight API change for the syntactic context used by lineup functions.
The syntactic context stored in c-syntactic-context has been changed
to allow more information. This might affect custom lineup functions,
but only if they use that variable directly. See its docstring for
more details.
*** API changes for derived modes.
There have been extensive changes "under the hood" which can affect
derived mode writers. Some of these changes are likely to cause
incompatibilities with existing derived modes, but on the other hand
care has now been taken to make it possible to extend and modify CC
Mode with less risk of such problems in the future.
**** New language variable system.
See the comment blurb near the top of cc-langs.el.
**** New initialization functions.
The initialization procedure has been split up into more functions to
give better control: c-basic-common-init, c-font-lock-init, and
c-init-language-vars.
*** Changes in analysis of nested syntactic constructs.
The syntactic analysis engine has better handling of cases where
several syntactic constructs appear nested on the same line. They are
now handled as if each construct started on a line of its own.
This means that CC Mode now indents some cases differently, and
although it's more consistent there might be cases where the old way
gave results that's more to one's liking. So if you find a situation
where you think that the indentation has become worse, please report
it to bug-cc-mode@gnu.org.
**** New syntactic symbol substatement-label.
This symbol is used when a label is inserted between a statement and
its substatement. E.g:
if (x)
x_is_true:
do_stuff();
*** Better handling of multiline macros.
**** Syntactic indentation inside macros.
The contents of multiline #define's are now analyzed and indented
syntactically just like other code. This can be disabled by the new
variable c-syntactic-indentation-in-macros. A new syntactic symbol
cpp-define-intro has been added to control the initial indentation
inside #define's.
**** New lineup function c-lineup-cpp-define.
Now used by default to line up macro continuation lines. The behavior
of this function closely mimics the indentation one gets if the macro
is indented while the line continuation backslashes are temporarily
removed. If syntactic indentation in macros is turned off, it works
much line c-lineup-dont-change, which was used earlier, but handles
empty lines within the macro better.
**** Automatically inserted newlines continues the macro if used within one.
This applies to the newlines inserted by the auto-newline mode, and to
c-context-line-break and c-context-open-line.
**** Better alignment of line continuation backslashes.
c-backslash-region tries to adapt to surrounding backslashes. New
variable c-backslash-max-column which put a limit on how far out
backslashes can be moved.
**** Automatic alignment of line continuation backslashes.
This is controlled by the new variable c-auto-align-backslashes. It
affects c-context-line-break, c-context-open-line and newlines
inserted in auto-newline mode.
**** Line indentation works better inside macros.
Regardless whether syntactic indentation and syntactic indentation
inside macros are enabled or not, line indentation now ignores the
line continuation backslashes. This is most noticeable when syntactic
indentation is turned off and there are empty lines (save for the
backslash) in the macro.
*** indent-for-comment is more customizable.
The behavior of M-; (indent-for-comment) is now configurable through
the variable c-indent-comment-alist. The indentation behavior based
on the preceding code on the line, e.g. to get two spaces after #else
and #endif but indentation to comment-column in most other cases
(something which was hardcoded earlier).
*** New function c-context-open-line.
It's the open-line equivalent of c-context-line-break.
*** New lineup functions
**** c-lineup-string-cont
This lineup function lines up a continued string under the one it
continues. E.g:
result = prefix + "A message "
"string."; <- c-lineup-string-cont
**** c-lineup-cascaded-calls
Lines up series of calls separated by "->" or ".".
**** c-lineup-knr-region-comment
Gives (what most people think is) better indentation of comments in
the "K&R region" between the function header and its body.
**** c-lineup-gcc-asm-reg
Provides better indentation inside asm blocks. Contributed by Kevin
Ryde.
**** c-lineup-argcont
Lines up continued function arguments after the preceding comma.
Contributed by Kevin Ryde.
*** Better caching of the syntactic context.
CC Mode caches the positions of the opening parentheses (of any kind)
of the lists surrounding the point. Those positions are used in many
places as anchor points for various searches. The cache is now
improved so that it can be reused to a large extent when the point is
moved. The less it moves, the less needs to be recalculated.
The effect is that CC Mode should be fast most of the time even when
opening parens are hung (i.e. aren't in column zero). It's typically
only the first time after the point is moved far down in a complex
file that it'll take noticeable time to find out the syntactic
context.
*** Statements are recognized in a more robust way.
Statements are recognized most of the time even when they occur in an
"invalid" context, e.g. in a function argument. In practice that can
happen when macros are involved.
*** Improved the way c-indent-exp chooses the block to indent.
It now indents the block for the closest sexp following the point
whose closing paren ends on a different line. This means that the
point doesn't have to be immediately before the block to indent.
Also, only the block and the closing line is indented; the current
line is left untouched.
*** Added toggle for syntactic indentation.
The function c-toggle-syntactic-indentation can be used to toggle
syntactic indentation.
** The command line option --no-windows has been changed to
--no-window-system. The old one still works, but is deprecated.