From ade2298735a17f8d71ae97fc17fc9059b12b99a1 Mon Sep 17 00:00:00 2001 From: watiko Date: Mon, 15 Feb 2016 20:57:10 +0900 Subject: vim-patch:7.4.912 Problem: Wrong indenting for C++ constructor. Solution: Recognize ::. (Anhong) https://github.com/vim/vim/commit/e01f4f86cef7bed3cb99b26f9f57d86f6eb5fe1a --- src/nvim/indent_c.c | 24 +++++++++++++++++++----- src/nvim/version.c | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/nvim/indent_c.c b/src/nvim/indent_c.c index 3def0defe3..17fadc4bfd 100644 --- a/src/nvim/indent_c.c +++ b/src/nvim/indent_c.c @@ -857,13 +857,27 @@ static int cin_isfuncdecl(char_u **sp, linenr_T first_lnum, linenr_T min_lnum) return FALSE; while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"') { - if (cin_iscomment(s)) /* ignore comments */ + // ignore comments + if (cin_iscomment(s)) { s = cin_skipcomment(s); - else - ++s; + } else if (*s == ':') { + if (*(s + 1) == ':') { + s += 2; + } else { + // To avoid a mistake in the following situation: + // A::A(int a, int b) + // : a(0) // <--not a function decl + // , b(0) + // {... + return false; + } + } else { + s++; + } + } + if (*s != '(') { + return false; // ';', ' or " before any () or no '(' } - if (*s != '(') - return FALSE; /* ';', ' or " before any () or no '(' */ while (*s && *s != ';' && *s != '\'' && *s != '"') { if (*s == ')' && cin_nocode(s + 1)) { diff --git a/src/nvim/version.c b/src/nvim/version.c index 5a46049e27..c6bb094cf6 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -376,7 +376,7 @@ static int included_patches[] = { 915, // 914, // 913 NA - // 912, + 912, // 911 NA // 910 NA // 909, -- cgit