From: Bram Moolenaar Date: Thu, 17 Nov 2016 20:30:27 +0000 (+0100) Subject: patch 8.0.0092 X-Git-Tag: v8.0.0092 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ca8b8d6956dd881de6446fc32c38e817a364a6cc;p=vim patch 8.0.0092 Problem: C indenting does not support nested namespaces that C++ 17 has. Solution: Add check that passes double colon inside a name. (Pauli, closes #1214) --- diff --git a/src/misc1.c b/src/misc1.c index 6bf7d7577..3630d7b3b 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -5762,6 +5762,7 @@ cin_is_cpp_namespace(char_u *s) { char_u *p; int has_name = FALSE; + int has_name_start = FALSE; s = cin_skipcomment(s); if (STRNCMP(s, "namespace", 9) == 0 && (s[9] == NUL || !vim_iswordc(s[9]))) @@ -5780,10 +5781,18 @@ cin_is_cpp_namespace(char_u *s) } else if (vim_iswordc(*p)) { + has_name_start = TRUE; if (has_name) return FALSE; /* word character after skipping past name */ ++p; } + else if (p[0] == ':' && p[1] == ':' && vim_iswordc(p[2])) + { + if (!has_name_start || has_name) + return FALSE; + /* C++ 17 nested namespace */ + p += 3; + } else { return FALSE; diff --git a/src/testdir/test3.in b/src/testdir/test3.in index c0a68d094..096f15219 100644 --- a/src/testdir/test3.in +++ b/src/testdir/test3.in @@ -1932,6 +1932,26 @@ namespace test { 111111111111111111; } +namespace test::cpp17 +{ + 111111111111111111; +} +namespace ::incorrectcpp17 +{ + 111111111111111111; +} +namespace test::incorrectcpp17:: +{ + 111111111111111111; +} +namespace test:incorrectcpp17 +{ + 111111111111111111; +} +namespace test:::incorrectcpp17 +{ + 111111111111111111; +} namespace{ 111111111111111111; } diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok index c4c01a3d4..2f9572cc1 100644 --- a/src/testdir/test3.ok +++ b/src/testdir/test3.ok @@ -1730,6 +1730,26 @@ namespace test { 111111111111111111; } +namespace test::cpp17 +{ +111111111111111111; +} +namespace ::incorrectcpp17 +{ + 111111111111111111; +} +namespace test::incorrectcpp17:: +{ + 111111111111111111; +} +namespace test:incorrectcpp17 +{ + 111111111111111111; +} +namespace test:::incorrectcpp17 +{ + 111111111111111111; +} namespace{ 111111111111111111; } diff --git a/src/version.c b/src/version.c index f07437de9..5db35abc2 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 92, /**/ 91, /**/