| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -64,9 +64,10 @@ | |||
| 64 | 64 | # if empty, use defaults | |
| 65 | 65 | _valid_extensions = set([]) | |
| 66 | 66 | ||
| 67 | - __VERSION__ = '1.6.0' | ||
| 67 | + __VERSION__ = '1.6.1' | ||
| 68 | 68 | ||
| 69 | 69 | try: | |
| 70 | + # -- pylint: disable=used-before-assignment | ||
| 70 | 71 | xrange # Python 2 | |
| 71 | 72 | except NameError: | |
| 72 | 73 | # -- pylint: disable=redefined-builtin | |
@@ -97,9 +98,10 @@ | |||
| 97 | 98 | certain of the problem, and 1 meaning it could be a legitimate construct. | |
| 98 | 99 | This will miss some errors, and is not a substitute for a code review. | |
| 99 | 100 | ||
| 100 | - To suppress false-positive errors of a certain category, add a | ||
| 101 | - 'NOLINT(category)' comment to the line. NOLINT or NOLINT(*) | ||
| 102 | - suppresses errors of all categories on that line. | ||
| 101 | + To suppress false-positive errors of certain categories, add a | ||
| 102 | + 'NOLINT(category[, category...])' comment to the line. NOLINT or NOLINT(*) | ||
| 103 | + suppresses errors of all categories on that line. To suppress categories | ||
| 104 | + on the next line use NOLINTNEXTLINE instead of NOLINT. | ||
| 103 | 105 | ||
| 104 | 106 | The files passed in will be linted; at least one file must be provided. | |
| 105 | 107 | Default linted extensions are %s. | |
@@ -300,7 +302,6 @@ | |||
| 300 | 302 | 'build/include', | |
| 301 | 303 | 'build/include_subdir', | |
| 302 | 304 | 'build/include_alpha', | |
| 303 | - 'build/include_inline', | ||
| 304 | 305 | 'build/include_order', | |
| 305 | 306 | 'build/include_what_you_use', | |
| 306 | 307 | 'build/namespaces_headers', | |
@@ -316,13 +317,11 @@ | |||
| 316 | 317 | 'readability/constructors', | |
| 317 | 318 | 'readability/fn_size', | |
| 318 | 319 | 'readability/inheritance', | |
| 319 | - 'readability/pointer_notation', | ||
| 320 | 320 | 'readability/multiline_comment', | |
| 321 | 321 | 'readability/multiline_string', | |
| 322 | 322 | 'readability/namespace', | |
| 323 | 323 | 'readability/nolint', | |
| 324 | 324 | 'readability/nul', | |
| 325 | - 'readability/null_usage', | ||
| 326 | 325 | 'readability/strings', | |
| 327 | 326 | 'readability/todo', | |
| 328 | 327 | 'readability/utf8', | |
@@ -342,7 +341,6 @@ | |||
| 342 | 341 | 'runtime/string', | |
| 343 | 342 | 'runtime/threadsafe_fn', | |
| 344 | 343 | 'runtime/vlog', | |
| 345 | - 'runtime/v8_persistent', | ||
| 346 | 344 | 'whitespace/blank_line', | |
| 347 | 345 | 'whitespace/braces', | |
| 348 | 346 | 'whitespace/comma', | |
@@ -377,6 +375,12 @@ | |||
| 377 | 375 | 'readability/function', | |
| 378 | 376 | ] | |
| 379 | 377 | ||
| 378 | + # These prefixes for categories should be ignored since they relate to other | ||
| 379 | + # tools which also use the NOLINT syntax, e.g. clang-tidy. | ||
| 380 | + _OTHER_NOLINT_CATEGORY_PREFIXES = [ | ||
| 381 | + 'clang-analyzer', | ||
| 382 | + ] | ||
| 383 | + | ||
| 380 | 384 | # The default state of the category filter. This is overridden by the --filter= | |
| 381 | 385 | # flag. By default all errors are on, so only add here categories that should be | |
| 382 | 386 | # off by default (i.e., categories that must be enabled by the --filter= flags). | |
@@ -405,7 +409,7 @@ | |||
| 405 | 409 | 'alloc.h', | |
| 406 | 410 | 'builtinbuf.h', | |
| 407 | 411 | 'bvector.h', | |
| 408 | - 'complex.h', | ||
| 412 | + # 'complex.h', collides with System C header "complex.h" | ||
| 409 | 413 | 'defalloc.h', | |
| 410 | 414 | 'deque.h', | |
| 411 | 415 | 'editbuf.h', | |
@@ -517,6 +521,22 @@ | |||
| 517 | 521 | 'optional', | |
| 518 | 522 | 'string_view', | |
| 519 | 523 | 'variant', | |
| 524 | + # 17.6.1.2 C++20 headers | ||
| 525 | + 'barrier', | ||
| 526 | + 'bit', | ||
| 527 | + 'compare', | ||
| 528 | + 'concepts', | ||
| 529 | + 'coroutine', | ||
| 530 | + 'format', | ||
| 531 | + 'latch' | ||
| 532 | + 'numbers', | ||
| 533 | + 'ranges', | ||
| 534 | + 'semaphore', | ||
| 535 | + 'source_location', | ||
| 536 | + 'span', | ||
| 537 | + 'stop_token', | ||
| 538 | + 'syncstream', | ||
| 539 | + 'version', | ||
| 520 | 540 | # 17.6.1.2 C++ headers for C library facilities | |
| 521 | 541 | 'cassert', | |
| 522 | 542 | 'ccomplex', | |
@@ -851,14 +871,6 @@ | |||
| 851 | 871 | 'Missing space after ,': r's/,\([^ ]\)/, \1/g', | |
| 852 | 872 | } | |
| 853 | 873 | ||
| 854 | - _NULL_TOKEN_PATTERN = re.compile(r'\bNULL\b') | ||
| 855 | - | ||
| 856 | - _V8_PERSISTENT_PATTERN = re.compile(r'\bv8::Persistent\b') | ||
| 857 | - | ||
| 858 | - _RIGHT_LEANING_POINTER_PATTERN = re.compile(r'[^=|(,\s><);&?:}]' | ||
| 859 | - r'(?<!(sizeof|return))' | ||
| 860 | - r'\s\*[a-zA-Z_][0-9a-zA-Z_]*') | ||
| 861 | - | ||
| 862 | 874 | _regexp_compile_cache = {} | |
| 863 | 875 | ||
| 864 | 876 | # {str, set(int)}: a map from error categories to sets of linenumbers | |
@@ -889,12 +901,14 @@ | |||
| 889 | 901 | _include_order = "default" | |
| 890 | 902 | ||
| 891 | 903 | try: | |
| 904 | + # -- pylint: disable=used-before-assignment | ||
| 892 | 905 | unicode | |
| 893 | 906 | except NameError: | |
| 894 | 907 | # -- pylint: disable=redefined-builtin | |
| 895 | 908 | basestring = unicode = str | |
| 896 | 909 | ||
| 897 | 910 | try: | |
| 911 | + # -- pylint: disable=used-before-assignment | ||
| 898 | 912 | long | |
| 899 | 913 | except NameError: | |
| 900 | 914 | # -- pylint: disable=redefined-builtin | |
@@ -988,14 +1002,16 @@ def ParseNolintSuppressions(filename, raw_line, linenum, error): | |||
| 988 | 1002 | suppressed_line = linenum + 1 | |
| 989 | 1003 | else: | |
| 990 | 1004 | suppressed_line = linenum | |
| 991 | - category = matched.group(2) | ||
| 992 | - if category in (None, '(*)'): # => "suppress all" | ||
| 1005 | + categories = matched.group(2) | ||
| 1006 | + if categories in (None, '(*)'): # => "suppress all" | ||
| 993 | 1007 | _error_suppressions.setdefault(None, set()).add(suppressed_line) | |
| 994 | - else: | ||
| 995 | - if category.startswith('(') and category.endswith(')'): | ||
| 996 | - category = category[1:-1] | ||
| 1008 | + elif categories.startswith('(') and categories.endswith(')'): | ||
| 1009 | + for category in set(map(lambda c: c.strip(), categories[1:-1].split(','))): | ||
| 997 | 1010 | if category in _ERROR_CATEGORIES: | |
| 998 | 1011 | _error_suppressions.setdefault(category, set()).add(suppressed_line) | |
| 1012 | + elif any(c for c in _OTHER_NOLINT_CATEGORY_PREFIXES if category.startswith(c)): | ||
| 1013 | + # Ignore any categories from other tools. | ||
| 1014 | + pass | ||
| 999 | 1015 | elif category not in _LEGACY_ERROR_CATEGORIES: | |
| 1000 | 1016 | error(filename, linenum, 'readability/nolint', 5, | |
| 1001 | 1017 | 'Unknown NOLINT error category: %s' % category) | |
@@ -1099,11 +1115,10 @@ class _IncludeState(object): | |||
| 1099 | 1115 | # needs to move backwards, CheckNextIncludeOrder will raise an error. | |
| 1100 | 1116 | _INITIAL_SECTION = 0 | |
| 1101 | 1117 | _MY_H_SECTION = 1 | |
| 1102 | - _OTHER_H_SECTION = 2 | ||
| 1103 | - _OTHER_SYS_SECTION = 3 | ||
| 1104 | - _C_SECTION = 4 | ||
| 1105 | - _CPP_SECTION = 5 | ||
| 1106 | - | ||
| 1118 | + _C_SECTION = 2 | ||
| 1119 | + _CPP_SECTION = 3 | ||
| 1120 | + _OTHER_SYS_SECTION = 4 | ||
| 1121 | + _OTHER_H_SECTION = 5 | ||
| 1107 | 1122 | ||
| 1108 | 1123 | _TYPE_NAMES = { | |
| 1109 | 1124 | _C_SYS_HEADER: 'C system header', | |
@@ -2540,21 +2555,6 @@ def CheckForBadCharacters(filename, lines, error): | |||
| 2540 | 2555 | error(filename, linenum, 'readability/nul', 5, 'Line contains NUL byte.') | |
| 2541 | 2556 | ||
| 2542 | 2557 | ||
| 2543 | - def CheckInlineHeader(filename, include_state, error): | ||
| 2544 | - """Logs an error if both a header and its inline variant are included.""" | ||
| 2545 | - | ||
| 2546 | - all_headers = dict(item for sublist in include_state.include_list | ||
| 2547 | - for item in sublist) | ||
| 2548 | - bad_headers = set('%s.h' % name[:-6] for name in all_headers.keys() | ||
| 2549 | - if name.endswith('-inl.h')) | ||
| 2550 | - bad_headers &= set(all_headers.keys()) | ||
| 2551 | - | ||
| 2552 | - for name in bad_headers: | ||
| 2553 | - err = '%s includes both %s and %s-inl.h' % (filename, name, name) | ||
| 2554 | - linenum = all_headers[name] | ||
| 2555 | - error(filename, linenum, 'build/include_inline', 5, err) | ||
| 2556 | - | ||
| 2557 | - | ||
| 2558 | 2558 | def CheckForNewlineAtEOF(filename, lines, error): | |
| 2559 | 2559 | """Logs an error if there is no newline char at the end of the file. | |
| 2560 | 2560 | ||
@@ -3578,7 +3578,7 @@ def CheckForFunctionLengths(filename, clean_lines, linenum, | |||
| 3578 | 3578 | """Reports for long function bodies. | |
| 3579 | 3579 | ||
| 3580 | 3580 | For an overview why this is done, see: | |
| 3581 | - https://google.github.io/styleguide/cppguide.html#Write_Short_Functions | ||
| 3581 | + https://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Write_Short_Functions | ||
| 3582 | 3582 | ||
| 3583 | 3583 | Uses a simplistic algorithm assuming other style guidelines | |
| 3584 | 3584 | (especially spacing) are followed. | |
@@ -4805,71 +4805,6 @@ def CheckAltTokens(filename, clean_lines, linenum, error): | |||
| 4805 | 4805 | 'Use operator %s instead of %s' % ( | |
| 4806 | 4806 | _ALT_TOKEN_REPLACEMENT[match.group(1)], match.group(1))) | |
| 4807 | 4807 | ||
| 4808 | - def CheckNullTokens(filename, clean_lines, linenum, error): | ||
| 4809 | - """Check NULL usage. | ||
| 4810 | - | ||
| 4811 | - Args: | ||
| 4812 | - filename: The name of the current file. | ||
| 4813 | - clean_lines: A CleansedLines instance containing the file. | ||
| 4814 | - linenum: The number of the line to check. | ||
| 4815 | - error: The function to call with any errors found. | ||
| 4816 | - """ | ||
| 4817 | - line = clean_lines.elided[linenum] | ||
| 4818 | - | ||
| 4819 | - # Avoid preprocessor lines | ||
| 4820 | - if Match(r'^\s*#', line): | ||
| 4821 | - return | ||
| 4822 | - | ||
| 4823 | - if line.find('/*') >= 0 or line.find('*/') >= 0: | ||
| 4824 | - return | ||
| 4825 | - | ||
| 4826 | - for match in _NULL_TOKEN_PATTERN.finditer(line): | ||
| 4827 | - error(filename, linenum, 'readability/null_usage', 2, | ||
| 4828 | - 'Use nullptr instead of NULL') | ||
| 4829 | - | ||
| 4830 | - def CheckV8PersistentTokens(filename, clean_lines, linenum, error): | ||
| 4831 | - """Check v8::Persistent usage. | ||
| 4832 | - | ||
| 4833 | - Args: | ||
| 4834 | - filename: The name of the current file. | ||
| 4835 | - clean_lines: A CleansedLines instance containing the file. | ||
| 4836 | - linenum: The number of the line to check. | ||
| 4837 | - error: The function to call with any errors found. | ||
| 4838 | - """ | ||
| 4839 | - line = clean_lines.elided[linenum] | ||
| 4840 | - | ||
| 4841 | - # Avoid preprocessor lines | ||
| 4842 | - if Match(r'^\s*#', line): | ||
| 4843 | - return | ||
| 4844 | - | ||
| 4845 | - if line.find('/*') >= 0 or line.find('*/') >= 0: | ||
| 4846 | - return | ||
| 4847 | - | ||
| 4848 | - for match in _V8_PERSISTENT_PATTERN.finditer(line): | ||
| 4849 | - error(filename, linenum, 'runtime/v8_persistent', 2, | ||
| 4850 | - 'Use v8::Global instead of v8::Persistent') | ||
| 4851 | - | ||
| 4852 | - def CheckLeftLeaningPointer(filename, clean_lines, linenum, error): | ||
| 4853 | - """Check for left-leaning pointer placement. | ||
| 4854 | - | ||
| 4855 | - Args: | ||
| 4856 | - filename: The name of the current file. | ||
| 4857 | - clean_lines: A CleansedLines instance containing the file. | ||
| 4858 | - linenum: The number of the line to check. | ||
| 4859 | - error: The function to call with any errors found. | ||
| 4860 | - """ | ||
| 4861 | - line = clean_lines.elided[linenum] | ||
| 4862 | - | ||
| 4863 | - # Avoid preprocessor lines | ||
| 4864 | - if Match(r'^\s*#', line): | ||
| 4865 | - return | ||
| 4866 | - | ||
| 4867 | - if '/*' in line or '*/' in line: | ||
| 4868 | - return | ||
| 4869 | - | ||
| 4870 | - for match in _RIGHT_LEANING_POINTER_PATTERN.finditer(line): | ||
| 4871 | - error(filename, linenum, 'readability/pointer_notation', 2, | ||
| 4872 | - 'Use left leaning pointer instead of right leaning') | ||
| 4873 | 4808 | ||
| 4874 | 4809 | def GetLineWidth(line): | |
| 4875 | 4810 | """Determines the width of the line in column positions. | |
@@ -5024,9 +4959,6 @@ def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state, | |||
| 5024 | 4959 | CheckSpacingForFunctionCall(filename, clean_lines, linenum, error) | |
| 5025 | 4960 | CheckCheck(filename, clean_lines, linenum, error) | |
| 5026 | 4961 | CheckAltTokens(filename, clean_lines, linenum, error) | |
| 5027 | - CheckNullTokens(filename, clean_lines, linenum, error) | ||
| 5028 | - CheckV8PersistentTokens(filename, clean_lines, linenum, error) | ||
| 5029 | - CheckLeftLeaningPointer(filename, clean_lines, linenum, error) | ||
| 5030 | 4962 | classinfo = nesting_state.InnermostClass() | |
| 5031 | 4963 | if classinfo: | |
| 5032 | 4964 | CheckSectionSpacing(filename, clean_lines, classinfo, linenum, error) | |
@@ -5108,7 +5040,8 @@ def _ClassifyInclude(fileinfo, include, used_angle_brackets, include_order="defa | |||
| 5108 | 5040 | or Search(r'(?:%s)\/.*\.h' % "|".join(C_STANDARD_HEADER_FOLDERS), include)) | |
| 5109 | 5041 | ||
| 5110 | 5042 | # Headers with C++ extensions shouldn't be considered C system headers | |
| 5111 | - is_system = used_angle_brackets and not os.path.splitext(include)[1] in ['.hpp', '.hxx', '.h++'] | ||
| 5043 | + include_ext = os.path.splitext(include)[1] | ||
| 5044 | + is_system = used_angle_brackets and not include_ext in ['.hh', '.hpp', '.hxx', '.h++'] | ||
| 5112 | 5045 | ||
| 5113 | 5046 | if is_system: | |
| 5114 | 5047 | if is_cpp_header: | |
@@ -5183,7 +5116,7 @@ def CheckIncludeLine(filename, clean_lines, linenum, include_state, error): | |||
| 5183 | 5116 | match = _RE_PATTERN_INCLUDE.search(line) | |
| 5184 | 5117 | if match: | |
| 5185 | 5118 | include = match.group(2) | |
| 5186 | - used_angle_brackets = (match.group(1) == '<') | ||
| 5119 | + used_angle_brackets = match.group(1) == '<' | ||
| 5187 | 5120 | duplicate_line = include_state.FindHeader(include) | |
| 5188 | 5121 | if duplicate_line >= 0: | |
| 5189 | 5122 | error(filename, linenum, 'build/include', 4, | |
@@ -5214,10 +5147,11 @@ def CheckIncludeLine(filename, clean_lines, linenum, include_state, error): | |||
| 5214 | 5147 | include_state.include_list[-1].append((include, linenum)) | |
| 5215 | 5148 | ||
| 5216 | 5149 | # We want to ensure that headers appear in the right order: | |
| 5217 | - # 1) for foo.cc, foo.h | ||
| 5218 | - # 2) other project headers | ||
| 5219 | - # 3) c system files | ||
| 5220 | - # 4) cpp system files | ||
| 5150 | + # 1) for foo.cc, foo.h (preferred location) | ||
| 5151 | + # 2) c system files | ||
| 5152 | + # 3) cpp system files | ||
| 5153 | + # 4) for foo.cc, foo.h (deprecated location) | ||
| 5154 | + # 5) other google headers | ||
| 5221 | 5155 | # | |
| 5222 | 5156 | # We classify each include statement as one of those 5 types | |
| 5223 | 5157 | # using a number of techniques. The include_state object keeps | |
@@ -5480,7 +5414,7 @@ def CheckLanguage(filename, clean_lines, linenum, file_extension, | |||
| 5480 | 5414 | and line[-1] != '\\'): | |
| 5481 | 5415 | error(filename, linenum, 'build/namespaces_headers', 4, | |
| 5482 | 5416 | 'Do not use unnamed namespaces in header files. See ' | |
| 5483 | - 'https://google.github.io/styleguide/cppguide.html#Namespaces' | ||
| 5417 | + 'https://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces' | ||
| 5484 | 5418 | ' for more information.') | |
| 5485 | 5419 | ||
| 5486 | 5420 | ||
@@ -5947,7 +5881,8 @@ def CheckCStyleCast(filename, clean_lines, linenum, cast_type, pattern, error): | |||
| 5947 | 5881 | return False | |
| 5948 | 5882 | ||
| 5949 | 5883 | # operator++(int) and operator--(int) | |
| 5950 | - if context.endswith(' operator++') or context.endswith(' operator--'): | ||
| 5884 | + if (context.endswith(' operator++') or context.endswith(' operator--') or | ||
| 5885 | + context.endswith('::operator++') or context.endswith('::operator--')): | ||
| 5951 | 5886 | return False | |
| 5952 | 5887 | ||
| 5953 | 5888 | # A single unnamed argument for a function tends to look like old style cast. | |
@@ -6602,8 +6537,6 @@ def ProcessFileData(filename, file_extension, lines, error, | |||
| 6602 | 6537 | ||
| 6603 | 6538 | CheckForNewlineAtEOF(filename, lines, error) | |
| 6604 | 6539 | ||
| 6605 | - CheckInlineHeader(filename, include_state, error) | ||
| 6606 | - | ||
| 6607 | 6540 | def ProcessConfigOverrides(filename): | |
| 6608 | 6541 | """ Loads the configuration files and processes the config overrides. | |
| 6609 | 6542 | ||
@@ -6622,13 +6555,13 @@ def ProcessConfigOverrides(filename): | |||
| 6622 | 6555 | if not base_name: | |
| 6623 | 6556 | break # Reached the root directory. | |
| 6624 | 6557 | ||
| 6625 | - cfg_file = os.path.join(abs_path, ".cpplint") | ||
| 6558 | + cfg_file = os.path.join(abs_path, "CPPLINT.cfg") | ||
| 6626 | 6559 | abs_filename = abs_path | |
| 6627 | 6560 | if not os.path.isfile(cfg_file): | |
| 6628 | 6561 | continue | |
| 6629 | 6562 | ||
| 6630 | 6563 | try: | |
| 6631 | - with open(cfg_file, encoding='utf-8') as file_handle: | ||
| 6564 | + with codecs.open(cfg_file, 'r', 'utf8', 'replace') as file_handle: | ||
| 6632 | 6565 | for line in file_handle: | |
| 6633 | 6566 | line, _, _ = line.partition('#') # Remove comments. | |
| 6634 | 6567 | if not line.strip(): | |
| Back | FazBrowse Home | New Git URL |
0 commit comments