OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2011 The Native Client Authors. All rights reserved. | 2 # Copyright (c) 2012 The Native Client Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Simple Code Hygiene tool meant to be run as a presubmit test or standalone | 6 """Simple Code Hygiene tool meant to be run as a presubmit test or standalone |
7 | 7 |
8 Usage: | 8 Usage: |
9 ./code_hygiene.py <file1> <file2> ... | 9 ./code_hygiene.py <file1> <file2> ... |
10 | 10 |
11 For the styleguides see: | 11 For the styleguides see: |
12 http://code.google.com/p/soc/wiki/PythonStyleGuide | 12 http://code.google.com/p/soc/wiki/PythonStyleGuide |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 class UntrustedIfDefChecker(GenericRegexChecker): | 225 class UntrustedIfDefChecker(GenericRegexChecker): |
226 """No #ifdef in untrusted code (except stubs).""" | 226 """No #ifdef in untrusted code (except stubs).""" |
227 def __init__(self): | 227 def __init__(self): |
228 GenericRegexChecker.__init__(self, r'^#if') | 228 GenericRegexChecker.__init__(self, r'^#if') |
229 return | 229 return |
230 | 230 |
231 def FileFilter(self, props): | 231 def FileFilter(self, props): |
232 if 'is_untrusted' not in props: return False | 232 if 'is_untrusted' not in props: return False |
233 if 'is_untrusted_stubs' in props: return False | 233 if 'is_untrusted_stubs' in props: return False |
234 if 'is_untrusted_ehsupport' in props: return False | 234 if 'is_untrusted_ehsupport' in props: return False |
| 235 if 'is_untrusted_crash_dump' in props: return False |
235 return '.c' in props or '.cc' in props | 236 return '.c' in props or '.cc' in props |
236 | 237 |
237 | 238 |
238 class UntrustedAsmChecker(GenericRegexChecker): | 239 class UntrustedAsmChecker(GenericRegexChecker): |
239 """No inline assembler in untrusted code.""" | 240 """No inline assembler in untrusted code.""" |
240 def __init__(self): | 241 def __init__(self): |
241 # TODO(robertm): also cope with asm | 242 # TODO(robertm): also cope with asm |
242 GenericRegexChecker.__init__(self, r'__asm__') | 243 GenericRegexChecker.__init__(self, r'__asm__') |
243 return | 244 return |
244 | 245 |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
387 # the magic string '@PROPS[prop1,prop2,...]' anywhere in the first 2k of | 388 # the magic string '@PROPS[prop1,prop2,...]' anywhere in the first 2k of |
388 # data. | 389 # data. |
389 | 390 |
390 VALID_PROPS = { | 391 VALID_PROPS = { |
391 'name': True, # Filename, only prop with a value. | 392 'name': True, # Filename, only prop with a value. |
392 'is_makefile': True, | 393 'is_makefile': True, |
393 'is_trusted': True, # Is trusted code. | 394 'is_trusted': True, # Is trusted code. |
394 'is_untrusted': True, # Is untrusted code. | 395 'is_untrusted': True, # Is untrusted code. |
395 'is_untrusted_stubs': True, # Is untrusted/stubs code. | 396 'is_untrusted_stubs': True, # Is untrusted/stubs code. |
396 'is_untrusted_ehsupport': True, # Is untrusted/ehsupport code. | 397 'is_untrusted_ehsupport': True, # Is untrusted/ehsupport code. |
| 398 'is_untrusted_crash_dump': True, # Is untrusted/crash_dump code. |
| 399 # Untrusted crash dumps need to vary by |
| 400 # #ifdef __GLIBC__ because different |
| 401 # memory layout information is available. |
397 'is_shared': True, # Is shared code. | 402 'is_shared': True, # Is shared code. |
398 'is_scons': True, # Is scons file (not one generated by gyp). | 403 'is_scons': True, # Is scons file (not one generated by gyp). |
399 } | 404 } |
400 | 405 |
401 | 406 |
402 def IsValidProp(prop): | 407 def IsValidProp(prop): |
403 """Returns true if the property name is valid. | 408 """Returns true if the property name is valid. |
404 | 409 |
405 Valid property names start with '.' or are listed in VALID_PROPS. | 410 Valid property names start with '.' or are listed in VALID_PROPS. |
406 | 411 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 | 455 |
451 if 'akefile' in filename: | 456 if 'akefile' in filename: |
452 d['is_makefile'] = True | 457 d['is_makefile'] = True |
453 | 458 |
454 if 'src/trusted/' in filename: | 459 if 'src/trusted/' in filename: |
455 d['is_trusted'] = True | 460 d['is_trusted'] = True |
456 if 'src/untrusted/stubs/' in filename: | 461 if 'src/untrusted/stubs/' in filename: |
457 d['is_untrusted_stubs'] = True | 462 d['is_untrusted_stubs'] = True |
458 if 'src/untrusted/ehsupport/' in filename: | 463 if 'src/untrusted/ehsupport/' in filename: |
459 d['is_untrusted_ehsupport'] = True | 464 d['is_untrusted_ehsupport'] = True |
| 465 if 'src/untrusted/crash_dump/' in filename: |
| 466 d['is_untrusted_crash_dump'] = True |
460 if 'src/untrusted/' in filename: | 467 if 'src/untrusted/' in filename: |
461 d['is_untrusted'] = True | 468 d['is_untrusted'] = True |
462 if 'src/shared/' in filename: | 469 if 'src/shared/' in filename: |
463 d['is_shared'] = True | 470 d['is_shared'] = True |
464 | 471 |
465 if (filename.endswith('nacl.scons') or | 472 if (filename.endswith('nacl.scons') or |
466 filename.endswith('build.scons') or | 473 filename.endswith('build.scons') or |
467 filename.endswith('SConstruct')): | 474 filename.endswith('SConstruct')): |
468 d['is_scons'] = True | 475 d['is_scons'] = True |
469 | 476 |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 num_error += 1 | 589 num_error += 1 |
583 continue | 590 continue |
584 | 591 |
585 errors, warnings = CheckFile(filename, True) | 592 errors, warnings = CheckFile(filename, True) |
586 if errors: | 593 if errors: |
587 num_error += 1 | 594 num_error += 1 |
588 return num_error | 595 return num_error |
589 | 596 |
590 if __name__ == '__main__': | 597 if __name__ == '__main__': |
591 sys.exit(main(sys.argv[1:])) | 598 sys.exit(main(sys.argv[1:])) |
OLD | NEW |