summaryrefslogtreecommitdiff
path: root/lisp/progmodes/cc-engine.el
diff options
context:
space:
mode:
authorAlan Mackenzie <acm@muc.de>2017-05-12 21:11:49 +0000
committerAlan Mackenzie <acm@muc.de>2017-05-12 21:11:49 +0000
commit0e09d00f29e370ecfe2f2b22acff7b98c448bc30 (patch)
tree4891922642a9348d6921ed3d75af37c3faee857e /lisp/progmodes/cc-engine.el
parentafd8c762b7bb534f5686a0273f42cb7cd08e0d6f (diff)
downloademacs-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.el25
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))