Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Side by Side Diff: tools/presubmit.py

Issue 18509003: Keep two empty lines between declarations for cpp files (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/oom_dump/oom_dump.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright 2012 the V8 project authors. All rights reserved. 3 # Copyright 2012 the V8 project authors. All rights reserved.
4 # Redistribution and use in source and binary forms, with or without 4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are 5 # modification, are permitted provided that the following conditions are
6 # met: 6 # met:
7 # 7 #
8 # * Redistributions of source code must retain the above copyright 8 # * Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer. 9 # notice, this list of conditions and the following disclaimer.
10 # * Redistributions in binary form must reproduce the above 10 # * Redistributions in binary form must reproduce the above
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 'earley-boyer.js', 324 'earley-boyer.js',
325 'raytrace.js', 325 'raytrace.js',
326 'crypto.js', 326 'crypto.js',
327 'libraries.cc', 327 'libraries.cc',
328 'libraries-empty.cc', 328 'libraries-empty.cc',
329 'jsmin.py', 329 'jsmin.py',
330 'regexp-pcre.js', 330 'regexp-pcre.js',
331 'gnuplot-4.6.3-emscripten.js'] 331 'gnuplot-4.6.3-emscripten.js']
332 IGNORE_TABS = IGNORE_COPYRIGHTS + ['unicode-test.js', 'html-comments.js'] 332 IGNORE_TABS = IGNORE_COPYRIGHTS + ['unicode-test.js', 'html-comments.js']
333 333
334 def EndOfDeclaration(self, line):
335 return line == "}" or line == "};"
336
337 def StartOfDeclaration(self, line):
338 return line.find("//") == 0 or \
339 line.find("/*") == 0 or \
340 line.find(") {") != -1
341
334 def ProcessContents(self, name, contents): 342 def ProcessContents(self, name, contents):
335 result = True 343 result = True
336 base = basename(name) 344 base = basename(name)
337 if not base in SourceProcessor.IGNORE_TABS: 345 if not base in SourceProcessor.IGNORE_TABS:
338 if '\t' in contents: 346 if '\t' in contents:
339 print "%s contains tabs" % name 347 print "%s contains tabs" % name
340 result = False 348 result = False
341 if not base in SourceProcessor.IGNORE_COPYRIGHTS: 349 if not base in SourceProcessor.IGNORE_COPYRIGHTS:
342 if not COPYRIGHT_HEADER_PATTERN.search(contents): 350 if not COPYRIGHT_HEADER_PATTERN.search(contents):
343 print "%s is missing a correct copyright header." % name 351 print "%s is missing a correct copyright header." % name
344 result = False 352 result = False
345 ext = base.split('.').pop()
346 if ' \n' in contents or contents.endswith(' '): 353 if ' \n' in contents or contents.endswith(' '):
347 line = 0 354 line = 0
348 lines = [] 355 lines = []
349 parts = contents.split(' \n') 356 parts = contents.split(' \n')
350 if not contents.endswith(' '): 357 if not contents.endswith(' '):
351 parts.pop() 358 parts.pop()
352 for part in parts: 359 for part in parts:
353 line += part.count('\n') + 1 360 line += part.count('\n') + 1
354 lines.append(str(line)) 361 lines.append(str(line))
355 linenumbers = ', '.join(lines) 362 linenumbers = ', '.join(lines)
356 if len(lines) > 1: 363 if len(lines) > 1:
357 print "%s has trailing whitespaces in lines %s." % (name, linenumbers) 364 print "%s has trailing whitespaces in lines %s." % (name, linenumbers)
358 else: 365 else:
359 print "%s has trailing whitespaces in line %s." % (name, linenumbers) 366 print "%s has trailing whitespaces in line %s." % (name, linenumbers)
360 result = False 367 result = False
368 # Check two empty lines between declarations.
369 if name.endswith(".cc"):
370 line = 0
371 lines = []
372 parts = contents.split('\n')
373 while line < len(parts) - 2:
374 if self.EndOfDeclaration(parts[line]):
375 if self.StartOfDeclaration(parts[line + 1]):
376 lines.append(str(line + 1))
377 line += 1
378 elif parts[line + 1] == "" and \
379 self.StartOfDeclaration(parts[line + 2]):
380 lines.append(str(line + 1))
381 line += 2
382 line += 1
383 if len(lines) >= 1:
384 linenumbers = ', '.join(lines)
385 if len(lines) > 1:
386 print "%s does not have two empty lines between declarations " \
387 "in lines %s." % (name, linenumbers)
388 else:
389 print "%s does not have two empty lines between declarations " \
390 "in line %s." % (name, linenumbers)
391 result = False
361 return result 392 return result
362 393
363 def ProcessFiles(self, files, path): 394 def ProcessFiles(self, files, path):
364 success = True 395 success = True
365 violations = 0 396 violations = 0
366 for file in files: 397 for file in files:
367 try: 398 try:
368 handle = open(file) 399 handle = open(file)
369 contents = handle.read() 400 contents = handle.read()
370 if not self.ProcessContents(file, contents): 401 if not self.ProcessContents(file, contents):
(...skipping 13 matching lines...) Expand all
384 415
385 416
386 def Main(): 417 def Main():
387 workspace = abspath(join(dirname(sys.argv[0]), '..')) 418 workspace = abspath(join(dirname(sys.argv[0]), '..'))
388 parser = GetOptions() 419 parser = GetOptions()
389 (options, args) = parser.parse_args() 420 (options, args) = parser.parse_args()
390 success = True 421 success = True
391 print "Running C++ lint check..." 422 print "Running C++ lint check..."
392 if not options.no_lint: 423 if not options.no_lint:
393 success = CppLintProcessor().Run(workspace) and success 424 success = CppLintProcessor().Run(workspace) and success
394 print "Running copyright header and trailing whitespaces check..." 425 print "Running copyright header, trailing whitespaces and " \
426 "two empty lines between declarations check..."
395 success = SourceProcessor().Run(workspace) and success 427 success = SourceProcessor().Run(workspace) and success
396 if success: 428 if success:
397 return 0 429 return 0
398 else: 430 else:
399 return 1 431 return 1
400 432
401 433
402 if __name__ == '__main__': 434 if __name__ == '__main__':
403 sys.exit(Main()) 435 sys.exit(Main())
OLDNEW
« no previous file with comments | « tools/oom_dump/oom_dump.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698