diff options
author | Alan Mackenzie <acm@muc.de> | 2017-05-12 21:11:49 +0000 |
---|---|---|
committer | Alan Mackenzie <acm@muc.de> | 2017-05-12 21:11:49 +0000 |
commit | 0e09d00f29e370ecfe2f2b22acff7b98c448bc30 (patch) | |
tree | 4891922642a9348d6921ed3d75af37c3faee857e /lisp/progmodes/cc-engine.el | |
parent | afd8c762b7bb534f5686a0273f42cb7cd08e0d6f (diff) | |
download | emacs-0e09d00f29e370ecfe2f2b22acff7b98c448bc30.tar.gz |
Fontify C++ for loop variable as variable, even when followed by parentheses
In the following: "for (auto *Friend : Class->friends()) {", "Friend" was
getting fontified as a function, due to insufficient checking of the tokens
between it and "()".
* lisp/progmodes/cc-langs.el (c-:-op-cont-tokens, c-:-op-cont-regexp): New
lang-consts/vars.
* lisp/progmodes/cc-engine.el (c-forward-declarator): After finding a putative
declarator's identifier, check for a ":" token inside a for's parentheses, and
abort the search for "(" if this is found.
Diffstat (limited to 'lisp/progmodes/cc-engine.el')
-rw-r--r-- | lisp/progmodes/cc-engine.el | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 6d7bab7a65c..9773b1ca85b 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -8092,8 +8092,29 @@ comment at the start of cc-engine.el for more info." ;; initializing brace lists. (let (found) (while - (and (setq found (c-syntactic-re-search-forward - "[;,]\\|\\s)\\|\\'\\|\\(=\\|\\s(\\)" limit t t)) + (and (progn + ;; In the next loop, we keep searching forward whilst + ;; we find ":"s which aren't single colons inside C++ + ;; "for" statements. + (while + (and + (setq found + (c-syntactic-re-search-forward + "[;:,]\\|\\s)\\|\\'\\|\\(=\\|\\s(\\)" + limit t t)) + (eq (char-before) ?:) + (if (looking-at c-:-op-cont-regexp) + (progn (goto-char (match-end 0)) t) + (not + (and (c-major-mode-is 'c++-mode) + (save-excursion + (and + (c-go-up-list-backward) + (eq (char-after) ?\() + (progn (c-backward-syntactic-ws) + (c-simple-skip-symbol-backward)) + (looking-at c-paren-stmt-key)))))))) + found) (eq (char-before) ?\[) (c-go-up-list-forward)) (setq brackets-after-id t)) |