mirror of https://github.com/nodejs/node.git
tools: bump cpplint to 1.5.0
https://github.com/cpplint/cpplint/releases/tag/1.5.0 PR-URL: https://github.com/nodejs/node/pull/35719 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Richard Lau <rlau@redhat.com>
This commit is contained in:
parent
4fb780334d
commit
d9ed73cf02
|
@ -59,7 +59,7 @@ import xml.etree.ElementTree
|
|||
# if empty, use defaults
|
||||
_valid_extensions = set([])
|
||||
|
||||
__VERSION__ = '1.4.6'
|
||||
__VERSION__ = '1.5.0'
|
||||
|
||||
try:
|
||||
xrange # Python 2
|
||||
|
@ -280,7 +280,6 @@ _ERROR_CATEGORIES = [
|
|||
'build/include',
|
||||
'build/include_subdir',
|
||||
'build/include_alpha',
|
||||
'build/include_inline',
|
||||
'build/include_order',
|
||||
'build/include_what_you_use',
|
||||
'build/namespaces_literals',
|
||||
|
@ -295,13 +294,11 @@ _ERROR_CATEGORIES = [
|
|||
'readability/constructors',
|
||||
'readability/fn_size',
|
||||
'readability/inheritance',
|
||||
'readability/pointer_notation',
|
||||
'readability/multiline_comment',
|
||||
'readability/multiline_string',
|
||||
'readability/namespace',
|
||||
'readability/nolint',
|
||||
'readability/nul',
|
||||
'readability/null_usage',
|
||||
'readability/strings',
|
||||
'readability/todo',
|
||||
'readability/utf8',
|
||||
|
@ -321,7 +318,6 @@ _ERROR_CATEGORIES = [
|
|||
'runtime/string',
|
||||
'runtime/threadsafe_fn',
|
||||
'runtime/vlog',
|
||||
'runtime/v8_persistent',
|
||||
'whitespace/blank_line',
|
||||
'whitespace/braces',
|
||||
'whitespace/comma',
|
||||
|
@ -518,6 +514,120 @@ _CPP_HEADERS = frozenset([
|
|||
'cwctype',
|
||||
])
|
||||
|
||||
# C headers
|
||||
_C_HEADERS = frozenset([
|
||||
# System C headers
|
||||
'assert.h',
|
||||
'complex.h',
|
||||
'ctype.h',
|
||||
'errno.h',
|
||||
'fenv.h',
|
||||
'float.h',
|
||||
'inttypes.h',
|
||||
'iso646.h',
|
||||
'limits.h',
|
||||
'locale.h',
|
||||
'math.h',
|
||||
'setjmp.h',
|
||||
'signal.h',
|
||||
'stdalign.h',
|
||||
'stdarg.h',
|
||||
'stdatomic.h',
|
||||
'stdbool.h',
|
||||
'stddef.h',
|
||||
'stdint.h',
|
||||
'stdio.h',
|
||||
'stdlib.h',
|
||||
'stdnoreturn.h',
|
||||
'string.h',
|
||||
'tgmath.h',
|
||||
'threads.h',
|
||||
'time.h',
|
||||
'uchar.h',
|
||||
'wchar.h',
|
||||
'wctype.h',
|
||||
# POSIX C headers
|
||||
'aio.h',
|
||||
'arpa/inet.h',
|
||||
'cpio.h',
|
||||
'dirent.h',
|
||||
'dlfcn.h',
|
||||
'fcntl.h',
|
||||
'fmtmsg.h',
|
||||
'fnmatch.h',
|
||||
'ftw.h',
|
||||
'glob.h',
|
||||
'grp.h',
|
||||
'iconv.h',
|
||||
'langinfo.h',
|
||||
'libgen.h',
|
||||
'monetary.h',
|
||||
'mqueue.h',
|
||||
'ndbm.h',
|
||||
'net/if.h',
|
||||
'netdb.h',
|
||||
'netinet/in.h',
|
||||
'netinet/tcp.h',
|
||||
'nl_types.h',
|
||||
'poll.h',
|
||||
'pthread.h',
|
||||
'pwd.h',
|
||||
'regex.h',
|
||||
'sched.h',
|
||||
'search.h',
|
||||
'semaphore.h',
|
||||
'setjmp.h',
|
||||
'signal.h',
|
||||
'spawn.h',
|
||||
'strings.h',
|
||||
'stropts.h',
|
||||
'syslog.h',
|
||||
'tar.h',
|
||||
'termios.h',
|
||||
'trace.h',
|
||||
'ulimit.h',
|
||||
'unistd.h',
|
||||
'utime.h',
|
||||
'utmpx.h',
|
||||
'wordexp.h',
|
||||
# GNUlib headers
|
||||
'a.out.h',
|
||||
'aliases.h',
|
||||
'alloca.h',
|
||||
'ar.h',
|
||||
'argp.h',
|
||||
'argz.h',
|
||||
'byteswap.h',
|
||||
'crypt.h',
|
||||
'endian.h',
|
||||
'envz.h',
|
||||
'err.h',
|
||||
'error.h',
|
||||
'execinfo.h',
|
||||
'fpu_control.h',
|
||||
'fstab.h',
|
||||
'fts.h',
|
||||
'getopt.h',
|
||||
'gshadow.h',
|
||||
'ieee754.h',
|
||||
'ifaddrs.h',
|
||||
'libintl.h',
|
||||
'mcheck.h',
|
||||
'mntent.h',
|
||||
'obstack.h',
|
||||
'paths.h',
|
||||
'printf.h',
|
||||
'pty.h',
|
||||
'resolv.h',
|
||||
'shadow.h',
|
||||
'sysexits.h',
|
||||
'ttyent.h',
|
||||
# Hardware specific headers
|
||||
'arm_neon.h',
|
||||
'emmintrin.h',
|
||||
'xmmintin.h',
|
||||
])
|
||||
|
||||
# Type names
|
||||
_TYPES = re.compile(
|
||||
r'^(?:'
|
||||
|
@ -604,9 +714,10 @@ _ALT_TOKEN_REPLACEMENT_PATTERN = re.compile(
|
|||
# _IncludeState.CheckNextIncludeOrder().
|
||||
_C_SYS_HEADER = 1
|
||||
_CPP_SYS_HEADER = 2
|
||||
_LIKELY_MY_HEADER = 3
|
||||
_POSSIBLE_MY_HEADER = 4
|
||||
_OTHER_HEADER = 5
|
||||
_OTHER_SYS_HEADER = 3
|
||||
_LIKELY_MY_HEADER = 4
|
||||
_POSSIBLE_MY_HEADER = 5
|
||||
_OTHER_HEADER = 6
|
||||
|
||||
# These constants define the current inline assembly state
|
||||
_NO_ASM = 0 # Outside of inline assembly block
|
||||
|
@ -626,14 +737,6 @@ _SEARCH_C_FILE = re.compile(r'\b(?:LINT_C_FILE|'
|
|||
# Match string that indicates we're working on a Linux Kernel file.
|
||||
_SEARCH_KERNEL_FILE = re.compile(r'\b(?:LINT_KERNEL_FILE)')
|
||||
|
||||
_NULL_TOKEN_PATTERN = re.compile(r'\bNULL\b')
|
||||
|
||||
_V8_PERSISTENT_PATTERN = re.compile(r'\bv8::Persistent\b')
|
||||
|
||||
_RIGHT_LEANING_POINTER_PATTERN = re.compile(r'[^=|(,\s><);&?:}]'
|
||||
r'(?<!(sizeof|return))'
|
||||
r'\s\*[a-zA-Z_][0-9a-zA-Z_]*')
|
||||
|
||||
_regexp_compile_cache = {}
|
||||
|
||||
# {str, set(int)}: a map from error categories to sets of linenumbers
|
||||
|
@ -653,7 +756,7 @@ _repository = None
|
|||
# Files to exclude from linting. This is set by the --exclude flag.
|
||||
_excludes = None
|
||||
|
||||
# Whether to suppress PrintInfo messages
|
||||
# Whether to supress PrintInfo messages
|
||||
_quiet = False
|
||||
|
||||
# The allowed line length of files.
|
||||
|
@ -862,13 +965,15 @@ class _IncludeState(object):
|
|||
# needs to move backwards, CheckNextIncludeOrder will raise an error.
|
||||
_INITIAL_SECTION = 0
|
||||
_MY_H_SECTION = 1
|
||||
_OTHER_H_SECTION = 2
|
||||
_C_SECTION = 3
|
||||
_CPP_SECTION = 4
|
||||
_C_SECTION = 2
|
||||
_CPP_SECTION = 3
|
||||
_OTHER_SYS_SECTION = 4
|
||||
_OTHER_H_SECTION = 5
|
||||
|
||||
_TYPE_NAMES = {
|
||||
_C_SYS_HEADER: 'C system header',
|
||||
_CPP_SYS_HEADER: 'C++ system header',
|
||||
_OTHER_SYS_HEADER: 'other system header',
|
||||
_LIKELY_MY_HEADER: 'header this file implements',
|
||||
_POSSIBLE_MY_HEADER: 'header this file may implement',
|
||||
_OTHER_HEADER: 'other header',
|
||||
|
@ -876,9 +981,10 @@ class _IncludeState(object):
|
|||
_SECTION_NAMES = {
|
||||
_INITIAL_SECTION: "... nothing. (This can't be an error.)",
|
||||
_MY_H_SECTION: 'a header this file implements',
|
||||
_OTHER_H_SECTION: 'other header',
|
||||
_C_SECTION: 'C system header',
|
||||
_CPP_SECTION: 'C++ system header',
|
||||
_OTHER_SYS_SECTION: 'other system header',
|
||||
_OTHER_H_SECTION: 'other header',
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
|
@ -991,6 +1097,12 @@ class _IncludeState(object):
|
|||
else:
|
||||
self._last_header = ''
|
||||
return error_message
|
||||
elif header_type == _OTHER_SYS_HEADER:
|
||||
if self._section <= self._OTHER_SYS_SECTION:
|
||||
self._section = self._OTHER_SYS_SECTION
|
||||
else:
|
||||
self._last_header = ''
|
||||
return error_message
|
||||
elif header_type == _LIKELY_MY_HEADER:
|
||||
if self._section <= self._MY_H_SECTION:
|
||||
self._section = self._MY_H_SECTION
|
||||
|
@ -2274,21 +2386,6 @@ def CheckForBadCharacters(filename, lines, error):
|
|||
error(filename, linenum, 'readability/nul', 5, 'Line contains NUL byte.')
|
||||
|
||||
|
||||
def CheckInlineHeader(filename, include_state, error):
|
||||
"""Logs an error if both a header and its inline variant are included."""
|
||||
|
||||
all_headers = dict(item for sublist in include_state.include_list
|
||||
for item in sublist)
|
||||
bad_headers = set('%s.h' % name[:-6] for name in all_headers.keys()
|
||||
if name.endswith('-inl.h'))
|
||||
bad_headers &= set(all_headers.keys())
|
||||
|
||||
for name in bad_headers:
|
||||
err = '%s includes both %s and %s-inl.h' % (filename, name, name)
|
||||
linenum = all_headers[name]
|
||||
error(filename, linenum, 'build/include_inline', 5, err)
|
||||
|
||||
|
||||
def CheckForNewlineAtEOF(filename, lines, error):
|
||||
"""Logs an error if there is no newline char at the end of the file.
|
||||
|
||||
|
@ -3312,7 +3409,7 @@ def CheckForFunctionLengths(filename, clean_lines, linenum,
|
|||
"""Reports for long function bodies.
|
||||
|
||||
For an overview why this is done, see:
|
||||
https://google.github.io/styleguide/cppguide.html#Write_Short_Functions
|
||||
https://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Write_Short_Functions
|
||||
|
||||
Uses a simplistic algorithm assuming other style guidelines
|
||||
(especially spacing) are followed.
|
||||
|
@ -4538,71 +4635,6 @@ def CheckAltTokens(filename, clean_lines, linenum, error):
|
|||
'Use operator %s instead of %s' % (
|
||||
_ALT_TOKEN_REPLACEMENT[match.group(1)], match.group(1)))
|
||||
|
||||
def CheckNullTokens(filename, clean_lines, linenum, error):
|
||||
"""Check NULL usage.
|
||||
|
||||
Args:
|
||||
filename: The name of the current file.
|
||||
clean_lines: A CleansedLines instance containing the file.
|
||||
linenum: The number of the line to check.
|
||||
error: The function to call with any errors found.
|
||||
"""
|
||||
line = clean_lines.elided[linenum]
|
||||
|
||||
# Avoid preprocessor lines
|
||||
if Match(r'^\s*#', line):
|
||||
return
|
||||
|
||||
if line.find('/*') >= 0 or line.find('*/') >= 0:
|
||||
return
|
||||
|
||||
for match in _NULL_TOKEN_PATTERN.finditer(line):
|
||||
error(filename, linenum, 'readability/null_usage', 2,
|
||||
'Use nullptr instead of NULL')
|
||||
|
||||
def CheckV8PersistentTokens(filename, clean_lines, linenum, error):
|
||||
"""Check v8::Persistent usage.
|
||||
|
||||
Args:
|
||||
filename: The name of the current file.
|
||||
clean_lines: A CleansedLines instance containing the file.
|
||||
linenum: The number of the line to check.
|
||||
error: The function to call with any errors found.
|
||||
"""
|
||||
line = clean_lines.elided[linenum]
|
||||
|
||||
# Avoid preprocessor lines
|
||||
if Match(r'^\s*#', line):
|
||||
return
|
||||
|
||||
if line.find('/*') >= 0 or line.find('*/') >= 0:
|
||||
return
|
||||
|
||||
for match in _V8_PERSISTENT_PATTERN.finditer(line):
|
||||
error(filename, linenum, 'runtime/v8_persistent', 2,
|
||||
'Use v8::Global instead of v8::Persistent')
|
||||
|
||||
def CheckLeftLeaningPointer(filename, clean_lines, linenum, error):
|
||||
"""Check for left-leaning pointer placement.
|
||||
|
||||
Args:
|
||||
filename: The name of the current file.
|
||||
clean_lines: A CleansedLines instance containing the file.
|
||||
linenum: The number of the line to check.
|
||||
error: The function to call with any errors found.
|
||||
"""
|
||||
line = clean_lines.elided[linenum]
|
||||
|
||||
# Avoid preprocessor lines
|
||||
if Match(r'^\s*#', line):
|
||||
return
|
||||
|
||||
if '/*' in line or '*/' in line:
|
||||
return
|
||||
|
||||
for match in _RIGHT_LEANING_POINTER_PATTERN.finditer(line):
|
||||
error(filename, linenum, 'readability/pointer_notation', 2,
|
||||
'Use left leaning pointer instead of right leaning')
|
||||
|
||||
def GetLineWidth(line):
|
||||
"""Determines the width of the line in column positions.
|
||||
|
@ -4757,9 +4789,6 @@ def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state,
|
|||
CheckSpacingForFunctionCall(filename, clean_lines, linenum, error)
|
||||
CheckCheck(filename, clean_lines, linenum, error)
|
||||
CheckAltTokens(filename, clean_lines, linenum, error)
|
||||
CheckNullTokens(filename, clean_lines, linenum, error)
|
||||
CheckV8PersistentTokens(filename, clean_lines, linenum, error)
|
||||
CheckLeftLeaningPointer(filename, clean_lines, linenum, error)
|
||||
classinfo = nesting_state.InnermostClass()
|
||||
if classinfo:
|
||||
CheckSectionSpacing(filename, clean_lines, classinfo, linenum, error)
|
||||
|
@ -4820,6 +4849,8 @@ def _ClassifyInclude(fileinfo, include, is_system):
|
|||
_C_SYS_HEADER
|
||||
>>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'string', True)
|
||||
_CPP_SYS_HEADER
|
||||
>>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'foo/foo.h', True)
|
||||
_OTHER_SYS_HEADER
|
||||
>>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'foo/foo.h', False)
|
||||
_LIKELY_MY_HEADER
|
||||
>>> _ClassifyInclude(FileInfo('foo/foo_unknown_extension.cc'),
|
||||
|
@ -4832,6 +4863,9 @@ def _ClassifyInclude(fileinfo, include, is_system):
|
|||
# those already checked for above.
|
||||
is_cpp_h = include in _CPP_HEADERS
|
||||
|
||||
# Mark include as C header if in list or of type 'sys/*.h'.
|
||||
is_c_h = include in _C_HEADERS or Search(r'sys\/.*\.h', include)
|
||||
|
||||
# Headers with C++ extensions shouldn't be considered C system headers
|
||||
if is_system and os.path.splitext(include)[1] in ['.hpp', '.hxx', '.h++']:
|
||||
is_system = False
|
||||
|
@ -4839,8 +4873,10 @@ def _ClassifyInclude(fileinfo, include, is_system):
|
|||
if is_system:
|
||||
if is_cpp_h:
|
||||
return _CPP_SYS_HEADER
|
||||
else:
|
||||
if is_c_h:
|
||||
return _C_SYS_HEADER
|
||||
else:
|
||||
return _OTHER_SYS_HEADER
|
||||
|
||||
# If the target file and the include we're checking share a
|
||||
# basename when we drop common extensions, and the include
|
||||
|
@ -4936,10 +4972,11 @@ def CheckIncludeLine(filename, clean_lines, linenum, include_state, error):
|
|||
include_state.include_list[-1].append((include, linenum))
|
||||
|
||||
# We want to ensure that headers appear in the right order:
|
||||
# 1) for foo.cc, foo.h
|
||||
# 2) other project headers
|
||||
# 3) c system files
|
||||
# 4) cpp system files
|
||||
# 1) for foo.cc, foo.h (preferred location)
|
||||
# 2) c system files
|
||||
# 3) cpp system files
|
||||
# 4) for foo.cc, foo.h (deprecated location)
|
||||
# 5) other google headers
|
||||
#
|
||||
# We classify each include statement as one of those 5 types
|
||||
# using a number of techniques. The include_state object keeps
|
||||
|
@ -5202,7 +5239,7 @@ def CheckLanguage(filename, clean_lines, linenum, file_extension,
|
|||
and line[-1] != '\\'):
|
||||
error(filename, linenum, 'build/namespaces', 4,
|
||||
'Do not use unnamed namespaces in header files. See '
|
||||
'https://google.github.io/styleguide/cppguide.html#Namespaces'
|
||||
'https://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces'
|
||||
' for more information.')
|
||||
|
||||
|
||||
|
@ -6324,8 +6361,6 @@ def ProcessFileData(filename, file_extension, lines, error,
|
|||
|
||||
CheckForNewlineAtEOF(filename, lines, error)
|
||||
|
||||
CheckInlineHeader(filename, include_state, error)
|
||||
|
||||
def ProcessConfigOverrides(filename):
|
||||
""" Loads the configuration files and processes the config overrides.
|
||||
|
||||
|
@ -6344,7 +6379,7 @@ def ProcessConfigOverrides(filename):
|
|||
if not base_name:
|
||||
break # Reached the root directory.
|
||||
|
||||
cfg_file = os.path.join(abs_path, ".cpplint")
|
||||
cfg_file = os.path.join(abs_path, "CPPLINT.cfg")
|
||||
abs_filename = abs_path
|
||||
if not os.path.isfile(cfg_file):
|
||||
continue
|
||||
|
|
Loading…
Reference in New Issue