1 new commit in cc-mode:
https://bitbucket.org/xemacs/cc-mode/commits/51013c73b8b6/
Changeset: 51013c73b8b6
User: acm
Date: 2017-05-12 19:39:12+00:00
Summary: 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 "()".
* cc-langs.el (c-:-op-cont-tokens, c-:-op-cont-regexp): New lang-consts/vars.
* 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.
Affected #: 2 files
diff -r 598139a604f056a434e8953313b25270717d013d -r
51013c73b8b609aaf152a3462bd8630e84543a3d cc-engine.el
--- a/cc-engine.el
+++ b/cc-engine.el
@@ -8099,8 +8099,28 @@
;; 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
+ (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))
diff -r 598139a604f056a434e8953313b25270717d013d -r
51013c73b8b609aaf152a3462bd8630e84543a3d cc-langs.el
--- a/cc-langs.el
+++ b/cc-langs.el
@@ -1316,6 +1316,21 @@
(c-lang-defvar c-multichar->-op-not->>-regexp
(c-lang-const c-multichar->-op-not->>-regexp))
+(c-lang-defconst c-:-op-cont-tokens
+ ;; A list of second and subsequent characters of all multicharacter tokens
+ ;; that begin with ":".
+ t (c-filter-ops (c-lang-const c-all-op-syntax-tokens)
+ t
+ "\\`:."
+ (lambda (op) (substring op 1))))
+
+(c-lang-defconst c-:-op-cont-regexp
+ ;; Regexp matching the second and subsequent characters of all
+ ;; multicharacter tokens that begin with ":".
+ t (c-make-keywords-re nil (c-lang-const c-:-op-cont-tokens)))
+(c-lang-defvar c-:-op-cont-regexp
+ (c-lang-const c-:-op-cont-regexp))
+
(c-lang-defconst c-stmt-delim-chars
;; The characters that should be considered to bound statements. To
;; optimize `c-crosses-statement-barrier-p' somewhat, it's assumed to
Repository URL:
https://bitbucket.org/xemacs/cc-mode/
--
This is a commit notification from
bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.