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

Side by Side Diff: cpplint.py

Issue 7834045: Add lint check against "Foo *bar" and "Foo &bar" declarations. (Closed) Base URL: http://src.chromium.org/svn/trunk/tools/depot_tools/
Patch Set: '' Created 9 years, 3 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 | « no previous file | cpplint_chromium.py » ('j') | cpplint_chromium.py » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python2.4 1 #!/usr/bin/python2.4
2 # 2 #
3 # Copyright (c) 2009 Google Inc. All rights reserved. 3 # Copyright (c) 2009 Google Inc. All rights reserved.
4 # 4 #
5 # Redistribution and use in source and binary forms, with or without 5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are 6 # modification, are permitted provided that the following conditions are
7 # met: 7 # met:
8 # 8 #
9 # * Redistributions of source code must retain the above copyright 9 # * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer. 10 # notice, this list of conditions and the following disclaimer.
(...skipping 2880 matching lines...) Expand 10 before | Expand all | Expand 10 after
2891 if [True for header in headers if header in include_state]: 2891 if [True for header in headers if header in include_state]:
2892 continue 2892 continue
2893 if required_header_unstripped.strip('<>"') not in include_state: 2893 if required_header_unstripped.strip('<>"') not in include_state:
2894 error(filename, required[required_header_unstripped][0], 2894 error(filename, required[required_header_unstripped][0],
2895 'build/include_what_you_use', 4, 2895 'build/include_what_you_use', 4,
2896 'Add #include ' + required_header_unstripped + ' for ' + template) 2896 'Add #include ' + required_header_unstripped + ' for ' + template)
2897 2897
2898 2898
2899 def ProcessLine(filename, file_extension, 2899 def ProcessLine(filename, file_extension,
2900 clean_lines, line, include_state, function_state, 2900 clean_lines, line, include_state, function_state,
2901 class_state, error): 2901 class_state, error, extra_check_functions=[]):
2902 """Processes a single line in the file. 2902 """Processes a single line in the file.
2903 2903
2904 Args: 2904 Args:
2905 filename: Filename of the file that is being processed. 2905 filename: Filename of the file that is being processed.
2906 file_extension: The extension (dot not included) of the file. 2906 file_extension: The extension (dot not included) of the file.
2907 clean_lines: An array of strings, each representing a line of the file, 2907 clean_lines: An array of strings, each representing a line of the file,
2908 with comments stripped. 2908 with comments stripped.
2909 line: Number of line being processed. 2909 line: Number of line being processed.
2910 include_state: An _IncludeState instance in which the headers are inserted. 2910 include_state: An _IncludeState instance in which the headers are inserted.
2911 function_state: A _FunctionState instance which counts function lines, etc. 2911 function_state: A _FunctionState instance which counts function lines, etc.
2912 class_state: A _ClassState instance which maintains information about 2912 class_state: A _ClassState instance which maintains information about
2913 the current stack of nested class declarations being parsed. 2913 the current stack of nested class declarations being parsed.
2914 error: A callable to which errors are reported, which takes 4 arguments: 2914 error: A callable to which errors are reported, which takes 4 arguments:
2915 filename, line number, error level, and message 2915 filename, line number, error level, and message
2916 2916
2917 """ 2917 """
2918 raw_lines = clean_lines.raw_lines 2918 raw_lines = clean_lines.raw_lines
2919 ParseNolintSuppressions(filename, raw_lines[line], line, error) 2919 ParseNolintSuppressions(filename, raw_lines[line], line, error)
2920 CheckForFunctionLengths(filename, clean_lines, line, function_state, error) 2920 CheckForFunctionLengths(filename, clean_lines, line, function_state, error)
2921 CheckForMultilineCommentsAndStrings(filename, clean_lines, line, error) 2921 CheckForMultilineCommentsAndStrings(filename, clean_lines, line, error)
2922 CheckStyle(filename, clean_lines, line, file_extension, error) 2922 CheckStyle(filename, clean_lines, line, file_extension, error)
2923 CheckLanguage(filename, clean_lines, line, file_extension, include_state, 2923 CheckLanguage(filename, clean_lines, line, file_extension, include_state,
2924 error) 2924 error)
2925 CheckForNonStandardConstructs(filename, clean_lines, line, 2925 CheckForNonStandardConstructs(filename, clean_lines, line,
2926 class_state, error) 2926 class_state, error)
2927 CheckPosixThreading(filename, clean_lines, line, error) 2927 CheckPosixThreading(filename, clean_lines, line, error)
2928 CheckInvalidIncrement(filename, clean_lines, line, error) 2928 CheckInvalidIncrement(filename, clean_lines, line, error)
2929 for check_fn in extra_check_functions:
2930 check_fn(filename, clean_lines, line, error)
2929 2931
2930 2932 def ProcessFileData(filename, file_extension, lines, error,
2931 def ProcessFileData(filename, file_extension, lines, error): 2933 extra_check_functions=[]):
2932 """Performs lint checks and reports any errors to the given error function. 2934 """Performs lint checks and reports any errors to the given error function.
2933 2935
2934 Args: 2936 Args:
2935 filename: Filename of the file that is being processed. 2937 filename: Filename of the file that is being processed.
2936 file_extension: The extension (dot not included) of the file. 2938 file_extension: The extension (dot not included) of the file.
2937 lines: An array of strings, each representing a line of the file, with the 2939 lines: An array of strings, each representing a line of the file, with the
2938 last element being empty if the file is termined with a newline. 2940 last element being empty if the file is termined with a newline.
2939 error: A callable to which errors are reported, which takes 4 arguments: 2941 error: A callable to which errors are reported, which takes 4 arguments:
2940 """ 2942 """
2941 lines = (['// marker so line numbers and indices both start at 1'] + lines + 2943 lines = (['// marker so line numbers and indices both start at 1'] + lines +
2942 ['// marker so line numbers end in a known way']) 2944 ['// marker so line numbers end in a known way'])
2943 2945
2944 include_state = _IncludeState() 2946 include_state = _IncludeState()
2945 function_state = _FunctionState() 2947 function_state = _FunctionState()
2946 class_state = _ClassState() 2948 class_state = _ClassState()
2947 2949
2948 ResetNolintSuppressions() 2950 ResetNolintSuppressions()
2949 2951
2950 CheckForCopyright(filename, lines, error) 2952 CheckForCopyright(filename, lines, error)
2951 2953
2952 if file_extension == 'h': 2954 if file_extension == 'h':
2953 CheckForHeaderGuard(filename, lines, error) 2955 CheckForHeaderGuard(filename, lines, error)
2954 2956
2955 RemoveMultiLineComments(filename, lines, error) 2957 RemoveMultiLineComments(filename, lines, error)
2956 clean_lines = CleansedLines(lines) 2958 clean_lines = CleansedLines(lines)
2957 for line in xrange(clean_lines.NumLines()): 2959 for line in xrange(clean_lines.NumLines()):
2958 ProcessLine(filename, file_extension, clean_lines, line, 2960 ProcessLine(filename, file_extension, clean_lines, line,
2959 include_state, function_state, class_state, error) 2961 include_state, function_state, class_state, error,
2962 extra_check_functions)
2960 class_state.CheckFinished(filename, error) 2963 class_state.CheckFinished(filename, error)
2961 2964
2962 CheckForIncludeWhatYouUse(filename, clean_lines, include_state, error) 2965 CheckForIncludeWhatYouUse(filename, clean_lines, include_state, error)
2963 2966
2964 # We check here rather than inside ProcessLine so that we see raw 2967 # We check here rather than inside ProcessLine so that we see raw
2965 # lines rather than "cleaned" lines. 2968 # lines rather than "cleaned" lines.
2966 CheckForUnicodeReplacementCharacters(filename, lines, error) 2969 CheckForUnicodeReplacementCharacters(filename, lines, error)
2967 2970
2968 CheckForNewlineAtEOF(filename, lines, error) 2971 CheckForNewlineAtEOF(filename, lines, error)
2969 2972
2970 def ProcessFile(filename, vlevel): 2973 def ProcessFile(filename, vlevel, extra_check_functions=[]):
2971 """Does google-lint on a single file. 2974 """Does google-lint on a single file.
2972 2975
2973 Args: 2976 Args:
2974 filename: The name of the file to parse. 2977 filename: The name of the file to parse.
2975 2978
2976 vlevel: The level of errors to report. Every error of confidence 2979 vlevel: The level of errors to report. Every error of confidence
2977 >= verbose_level will be reported. 0 is a good default. 2980 >= verbose_level will be reported. 0 is a good default.
2978 """ 2981 """
2979 2982
2980 _SetVerboseLevel(vlevel) 2983 _SetVerboseLevel(vlevel)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
3012 3015
3013 # Note, if no dot is found, this will give the entire filename as the ext. 3016 # Note, if no dot is found, this will give the entire filename as the ext.
3014 file_extension = filename[filename.rfind('.') + 1:] 3017 file_extension = filename[filename.rfind('.') + 1:]
3015 3018
3016 # When reading from stdin, the extension is unknown, so no cpplint tests 3019 # When reading from stdin, the extension is unknown, so no cpplint tests
3017 # should rely on the extension. 3020 # should rely on the extension.
3018 if (filename != '-' and file_extension != 'cc' and file_extension != 'h' 3021 if (filename != '-' and file_extension != 'cc' and file_extension != 'h'
3019 and file_extension != 'cpp'): 3022 and file_extension != 'cpp'):
3020 sys.stderr.write('Ignoring %s; not a .cc or .h file\n' % filename) 3023 sys.stderr.write('Ignoring %s; not a .cc or .h file\n' % filename)
3021 else: 3024 else:
3022 ProcessFileData(filename, file_extension, lines, Error) 3025 ProcessFileData(filename, file_extension, lines, Error,
3026 extra_check_functions)
3023 if carriage_return_found and os.linesep != '\r\n': 3027 if carriage_return_found and os.linesep != '\r\n':
3024 # Use 0 for linenum since outputing only one error for potentially 3028 # Use 0 for linenum since outputing only one error for potentially
3025 # several lines. 3029 # several lines.
3026 Error(filename, 0, 'whitespace/newline', 1, 3030 Error(filename, 0, 'whitespace/newline', 1,
3027 'One or more unexpected \\r (^M) found;' 3031 'One or more unexpected \\r (^M) found;'
3028 'better to use only a \\n') 3032 'better to use only a \\n')
3029 3033
3030 sys.stderr.write('Done processing %s\n' % filename) 3034 sys.stderr.write('Done processing %s\n' % filename)
3031 3035
3032 3036
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
3117 _cpplint_state.ResetErrorCounts() 3121 _cpplint_state.ResetErrorCounts()
3118 for filename in filenames: 3122 for filename in filenames:
3119 ProcessFile(filename, _cpplint_state.verbose_level) 3123 ProcessFile(filename, _cpplint_state.verbose_level)
3120 _cpplint_state.PrintErrorCounts() 3124 _cpplint_state.PrintErrorCounts()
3121 3125
3122 sys.exit(_cpplint_state.error_count > 0) 3126 sys.exit(_cpplint_state.error_count > 0)
3123 3127
3124 3128
3125 if __name__ == '__main__': 3129 if __name__ == '__main__':
3126 main() 3130 main()
OLDNEW
« no previous file with comments | « no previous file | cpplint_chromium.py » ('j') | cpplint_chromium.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698