diff --git a/cpplint/cpplint.py b/cpplint/cpplint.py index 796a4a443..2b6c5c8e7 100755 --- a/cpplint/cpplint.py +++ b/cpplint/cpplint.py @@ -2683,6 +2683,11 @@ def CheckForNonStandardConstructs(filename, clean_lines, linenum, filename, line number, error level, and message """ + line = clean_lines.lines_without_raw_strings[linenum] + if Match(r'\s*#\s*endif\s*([^/\s]|/[^/]|$)', line): + error(filename, linenum, 'build/endif_comment', 5, + 'Uncommented text after #endif is non-standard. Use a comment.') + # Remove comments from the line, but leave in strings for now. line = clean_lines.lines[linenum] @@ -2713,10 +2718,6 @@ def CheckForNonStandardConstructs(filename, clean_lines, linenum, 'Storage-class specifier (static, extern, typedef, etc) should be ' 'at the beginning of the declaration.') - if Match(r'\s*#\s*endif\s*[^/\s]+', line): - error(filename, linenum, 'build/endif_comment', 5, - 'Uncommented text after #endif is non-standard. Use a comment.') - if Match(r'\s*class\s+(\w+\s*::\s*)+\w+\s*;', line): error(filename, linenum, 'build/forward_decl', 5, 'Inner-style forward declarations are invalid. Remove this line.') diff --git a/cpplint/cpplint_unittest.py b/cpplint/cpplint_unittest.py index 0ae62f4fb..d738d99d5 100755 --- a/cpplint/cpplint_unittest.py +++ b/cpplint/cpplint_unittest.py @@ -3754,7 +3754,7 @@ def testConditionals(self): #else baz; qux; - #endif""", + #endif // foo""", '') self.TestMultiLineLint( """void F() { @@ -3910,7 +3910,7 @@ def testDuplicateHeader(self): '#include "path/unique.h"', '#else', '#include "path/unique.h"', - '#endif', + '#endif // MACRO', ''], error_collector) self.assertEquals( @@ -3959,7 +3959,7 @@ def testBuildClass(self): struct Foo : public Goo { #else struct Foo : public Hoo { - #endif + #endif // DERIVE_FROM_GOO };""", '') self.TestMultiLineLint( @@ -3969,7 +3969,7 @@ class Foo : public Goo { #else : public Hoo { - #endif + #endif // DERIVE_FROM_GOO };""", '') # Test incomplete class @@ -3987,6 +3987,27 @@ def testBuildEndComment(self): 'Uncommented text after #endif is non-standard. Use a comment.' ' [build/endif_comment] [5]') + correct_lines = [ + '#endif // text', + '#endif //' + ] + + for line in correct_lines: + self.TestLint(line, '') + + incorrect_lines = [ + '#endif', + '#endif Not a comment', + '#endif / One `/` is not enough to start a comment' + ] + + for line in incorrect_lines: + self.TestLint( + line, + 'Uncommented text after #endif is non-standard. Use a comment.' + ' [build/endif_comment] [5]') + + def testBuildForwardDecl(self): # The crosstool compiler we currently use will fail to compile the # code in this test, so we might consider removing the lint check.