Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 87b36b3

Browse filesBrowse files
anonrigMoLow
authored andcommitted
tools: update cpplint to 1.6.1
PR-URL: #48098 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Darshan Sen <raisinten@gmail.com>
1 parent b18a78c commit 87b36b3
Copy full SHA for 87b36b3

File tree

Expand file treeCollapse file tree

1 file changed

+56
-123
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+56
-123
lines changed
Open diff view settings
Collapse file

‎tools/cpplint.py‎

Copy file name to clipboardExpand all lines: tools/cpplint.py
+56-123Lines changed: 56 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,10 @@
6464
# if empty, use defaults
6565
_valid_extensions = set([])
6666

67-
__VERSION__ = '1.6.0'
67+
__VERSION__ = '1.6.1'
6868

6969
try:
70+
# -- pylint: disable=used-before-assignment
7071
xrange # Python 2
7172
except NameError:
7273
# -- pylint: disable=redefined-builtin
@@ -97,9 +98,10 @@
9798
certain of the problem, and 1 meaning it could be a legitimate construct.
9899
This will miss some errors, and is not a substitute for a code review.
99100
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.
103105
104106
The files passed in will be linted; at least one file must be provided.
105107
Default linted extensions are %s.
@@ -300,7 +302,6 @@
300302
'build/include',
301303
'build/include_subdir',
302304
'build/include_alpha',
303-
'build/include_inline',
304305
'build/include_order',
305306
'build/include_what_you_use',
306307
'build/namespaces_headers',
@@ -316,13 +317,11 @@
316317
'readability/constructors',
317318
'readability/fn_size',
318319
'readability/inheritance',
319-
'readability/pointer_notation',
320320
'readability/multiline_comment',
321321
'readability/multiline_string',
322322
'readability/namespace',
323323
'readability/nolint',
324324
'readability/nul',
325-
'readability/null_usage',
326325
'readability/strings',
327326
'readability/todo',
328327
'readability/utf8',
@@ -342,7 +341,6 @@
342341
'runtime/string',
343342
'runtime/threadsafe_fn',
344343
'runtime/vlog',
345-
'runtime/v8_persistent',
346344
'whitespace/blank_line',
347345
'whitespace/braces',
348346
'whitespace/comma',
@@ -377,6 +375,12 @@
377375
'readability/function',
378376
]
379377

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+
380384
# The default state of the category filter. This is overridden by the --filter=
381385
# flag. By default all errors are on, so only add here categories that should be
382386
# off by default (i.e., categories that must be enabled by the --filter= flags).
@@ -405,7 +409,7 @@
405409
'alloc.h',
406410
'builtinbuf.h',
407411
'bvector.h',
408-
'complex.h',
412+
# 'complex.h', collides with System C header "complex.h"
409413
'defalloc.h',
410414
'deque.h',
411415
'editbuf.h',
@@ -517,6 +521,22 @@
517521
'optional',
518522
'string_view',
519523
'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',
520540
# 17.6.1.2 C++ headers for C library facilities
521541
'cassert',
522542
'ccomplex',
@@ -851,14 +871,6 @@
851871
'Missing space after ,': r's/,\([^ ]\)/, \1/g',
852872
}
853873

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-
862874
_regexp_compile_cache = {}
863875

864876
# {str, set(int)}: a map from error categories to sets of linenumbers
@@ -889,12 +901,14 @@
889901
_include_order = "default"
890902

891903
try:
904+
# -- pylint: disable=used-before-assignment
892905
unicode
893906
except NameError:
894907
# -- pylint: disable=redefined-builtin
895908
basestring = unicode = str
896909

897910
try:
911+
# -- pylint: disable=used-before-assignment
898912
long
899913
except NameError:
900914
# -- pylint: disable=redefined-builtin
@@ -988,14 +1002,16 @@ def ParseNolintSuppressions(filename, raw_line, linenum, error):
9881002
suppressed_line = linenum + 1
9891003
else:
9901004
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"
9931007
_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(','))):
9971010
if category in _ERROR_CATEGORIES:
9981011
_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
9991015
elif category not in _LEGACY_ERROR_CATEGORIES:
10001016
error(filename, linenum, 'readability/nolint', 5,
10011017
'Unknown NOLINT error category: %s' % category)
@@ -1099,11 +1115,10 @@ class _IncludeState(object):
10991115
# needs to move backwards, CheckNextIncludeOrder will raise an error.
11001116
_INITIAL_SECTION = 0
11011117
_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
11071122

11081123
_TYPE_NAMES = {
11091124
_C_SYS_HEADER: 'C system header',
@@ -2540,21 +2555,6 @@ def CheckForBadCharacters(filename, lines, error):
25402555
error(filename, linenum, 'readability/nul', 5, 'Line contains NUL byte.')
25412556

25422557

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-
25582558
def CheckForNewlineAtEOF(filename, lines, error):
25592559
"""Logs an error if there is no newline char at the end of the file.
25602560
@@ -3578,7 +3578,7 @@ def CheckForFunctionLengths(filename, clean_lines, linenum,
35783578
"""Reports for long function bodies.
35793579
35803580
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
35823582
35833583
Uses a simplistic algorithm assuming other style guidelines
35843584
(especially spacing) are followed.
@@ -4805,71 +4805,6 @@ def CheckAltTokens(filename, clean_lines, linenum, error):
48054805
'Use operator %s instead of %s' % (
48064806
_ALT_TOKEN_REPLACEMENT[match.group(1)], match.group(1)))
48074807

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')
48734808

48744809
def GetLineWidth(line):
48754810
"""Determines the width of the line in column positions.
@@ -5024,9 +4959,6 @@ def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state,
50244959
CheckSpacingForFunctionCall(filename, clean_lines, linenum, error)
50254960
CheckCheck(filename, clean_lines, linenum, error)
50264961
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)
50304962
classinfo = nesting_state.InnermostClass()
50314963
if classinfo:
50324964
CheckSectionSpacing(filename, clean_lines, classinfo, linenum, error)
@@ -5108,7 +5040,8 @@ def _ClassifyInclude(fileinfo, include, used_angle_brackets, include_order="defa
51085040
or Search(r'(?:%s)\/.*\.h' % "|".join(C_STANDARD_HEADER_FOLDERS), include))
51095041

51105042
# 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++']
51125045

51135046
if is_system:
51145047
if is_cpp_header:
@@ -5183,7 +5116,7 @@ def CheckIncludeLine(filename, clean_lines, linenum, include_state, error):
51835116
match = _RE_PATTERN_INCLUDE.search(line)
51845117
if match:
51855118
include = match.group(2)
5186-
used_angle_brackets = (match.group(1) == '<')
5119+
used_angle_brackets = match.group(1) == '<'
51875120
duplicate_line = include_state.FindHeader(include)
51885121
if duplicate_line >= 0:
51895122
error(filename, linenum, 'build/include', 4,
@@ -5214,10 +5147,11 @@ def CheckIncludeLine(filename, clean_lines, linenum, include_state, error):
52145147
include_state.include_list[-1].append((include, linenum))
52155148

52165149
# 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
52215155
#
52225156
# We classify each include statement as one of those 5 types
52235157
# using a number of techniques. The include_state object keeps
@@ -5480,7 +5414,7 @@ def CheckLanguage(filename, clean_lines, linenum, file_extension,
54805414
and line[-1] != '\\'):
54815415
error(filename, linenum, 'build/namespaces_headers', 4,
54825416
'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'
54845418
' for more information.')
54855419

54865420

@@ -5947,7 +5881,8 @@ def CheckCStyleCast(filename, clean_lines, linenum, cast_type, pattern, error):
59475881
return False
59485882

59495883
# 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--')):
59515886
return False
59525887

59535888
# 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,
66026537

66036538
CheckForNewlineAtEOF(filename, lines, error)
66046539

6605-
CheckInlineHeader(filename, include_state, error)
6606-
66076540
def ProcessConfigOverrides(filename):
66086541
""" Loads the configuration files and processes the config overrides.
66096542
@@ -6622,13 +6555,13 @@ def ProcessConfigOverrides(filename):
66226555
if not base_name:
66236556
break # Reached the root directory.
66246557

6625-
cfg_file = os.path.join(abs_path, ".cpplint")
6558+
cfg_file = os.path.join(abs_path, "CPPLINT.cfg")
66266559
abs_filename = abs_path
66276560
if not os.path.isfile(cfg_file):
66286561
continue
66296562

66306563
try:
6631-
with open(cfg_file, encoding='utf-8') as file_handle:
6564+
with codecs.open(cfg_file, 'r', 'utf8', 'replace') as file_handle:
66326565
for line in file_handle:
66336566
line, _, _ = line.partition('#') # Remove comments.
66346567
if not line.strip():

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.