Allow anonymous namespaces

Only give warnings for namespaces with actual names, in accordance with
ad41375353.
This enables the use of anonymous namespaces without warnings.

Fixes: #932
This commit is contained in:
Pascal Kesseli 2017-06-18 21:11:19 +01:00
parent 32b68ced26
commit 427194c626
3 changed files with 61 additions and 3 deletions

View File

@ -0,0 +1,34 @@
// Author: Pascal Kesseli, pascal.kesseli@diffblue.com
namespace asdf {}
namespace
asdf
{}
namespace
asdf
{}
namespace
asdf
{}
namespace xyz = my::nested::namespaces;
namespace {}
namespace
{ }
namespace
{
}
namespace
{
}

View File

@ -0,0 +1,11 @@
CORE
main.cpp
main\.cpp:3: Do not use namespaces \[readability/namespace\] \[4\]
main\.cpp:5: Do not use namespaces \[readability/namespace\] \[4\]
main\.cpp:9: Do not use namespaces \[readability/namespace\] \[4\]
main\.cpp:13: Do not use namespaces \[readability/namespace\] \[4\]
main\.cpp:19: Do not use namespaces \[readability/namespace\] \[4\]
^EXIT=1$
^SIGNAL=0$
--

19
scripts/cpplint.py vendored
View File

@ -6216,9 +6216,22 @@ def CheckItemIndentationInNamespace(filename, raw_lines_no_comments, linenum,
def CheckNamespaceOrUsing(filename, clean_lines, linenum, error):
line = clean_lines.elided[linenum]
if Match(r'^namespace(\s|$)', line):
error(filename, linenum, 'readability/namespace', 4,
'Do not use namespaces')
if Match(r'^\s*namespace(\s+.*)?$', line):
num_lines=len(clean_lines.elided)
current_linenum=linenum
while current_linenum<num_lines:
current_line=clean_lines.elided[current_linenum]
if current_linenum==linenum:
is_named=Match(r'^\s*namespace\s+[^\s{]+.*$', current_line)
else:
is_named=Match(r'^\s*[^\s{]+.*$', current_line)
if is_named:
error(filename, linenum, 'readability/namespace', 4,
'Do not use namespaces')
break
if '{' in current_line:
break
current_linenum+=1
if Match(r'^using\s', line):
error(filename, linenum, 'readability/namespace', 4,
'Do not use using')