ci(clint): fix all pyright warnings

This commit is contained in:
Dundar Goc 2022-05-12 10:39:29 +02:00
parent d547e21f9e
commit adf967331f

View File

@ -265,7 +265,7 @@ _valid_extensions = {'c', 'h'}
_RE_COMMENTLINE = re.compile(r'^\s*//') _RE_COMMENTLINE = re.compile(r'^\s*//')
def ParseNolintSuppressions(filename, raw_line, linenum, error): def ParseNolintSuppressions(raw_line, linenum):
"""Updates the global list of error-suppressions. """Updates the global list of error-suppressions.
Parses any NOLINT comments on the current line, updating the global Parses any NOLINT comments on the current line, updating the global
@ -273,10 +273,8 @@ def ParseNolintSuppressions(filename, raw_line, linenum, error):
was malformed. was malformed.
Args: Args:
filename: str, the name of the input file.
raw_line: str, the line of input text, with comments. raw_line: str, the line of input text, with comments.
linenum: int, the number of the current line. linenum: int, the number of the current line.
error: function, an error handler.
""" """
# FIXME(adonovan): "NOLINT(" is misparsed as NOLINT(*). # FIXME(adonovan): "NOLINT(" is misparsed as NOLINT(*).
matched = _RE_SUPPRESSION.search(raw_line) matched = _RE_SUPPRESSION.search(raw_line)
@ -463,6 +461,7 @@ class _CppLintState:
self.filters = _DEFAULT_FILTERS[:] self.filters = _DEFAULT_FILTERS[:]
self.counting = 'total' # In what way are we counting errors? self.counting = 'total' # In what way are we counting errors?
self.errors_by_category = {} # string to int dict storing error counts self.errors_by_category = {} # string to int dict storing error counts
self.stdin_filename = ''
# output format: # output format:
# "emacs" - format that emacs can parse (default) # "emacs" - format that emacs can parse (default)
@ -658,7 +657,8 @@ class FileInfo:
def FullName(self): def FullName(self):
"""Make Windows paths like Unix.""" """Make Windows paths like Unix."""
return os.path.abspath(self._filename).replace('\\', '/') abspath = str(os.path.abspath(self._filename))
return abspath.replace('\\', '/')
def RelativePath(self): def RelativePath(self):
"""FullName with <prefix>/src/nvim/ chopped off.""" """FullName with <prefix>/src/nvim/ chopped off."""
@ -1100,6 +1100,7 @@ def ReverseCloseExpression(clean_lines, linenum, pos):
""" """
line = clean_lines.elided[linenum] line = clean_lines.elided[linenum]
endchar = line[pos] endchar = line[pos]
startchar = None
if endchar not in ')}]>': if endchar not in ')}]>':
return (line, 0, -1) return (line, 0, -1)
if endchar == ')': if endchar == ')':
@ -1209,8 +1210,7 @@ def CheckForHeaderGuard(filename, lines, error):
if ifndef != cppvar + '_': if ifndef != cppvar + '_':
error_level = 5 error_level = 5
ParseNolintSuppressions(filename, lines[ifndef_linenum], ifndef_linenum, ParseNolintSuppressions(lines[ifndef_linenum], ifndef_linenum)
error)
error(filename, ifndef_linenum, 'build/header_guard', error_level, error(filename, ifndef_linenum, 'build/header_guard', error_level,
'#ifndef header guard has wrong style, please use: %s' % cppvar) '#ifndef header guard has wrong style, please use: %s' % cppvar)
@ -1225,8 +1225,7 @@ def CheckForHeaderGuard(filename, lines, error):
if endif != ('#endif // %s' % (cppvar + '_')): if endif != ('#endif // %s' % (cppvar + '_')):
error_level = 5 error_level = 5
ParseNolintSuppressions(filename, lines[endif_linenum], endif_linenum, ParseNolintSuppressions(lines[endif_linenum], endif_linenum)
error)
error(filename, endif_linenum, 'build/header_guard', error_level, error(filename, endif_linenum, 'build/header_guard', error_level,
'#endif line should be "#endif // %s"' % cppvar) '#endif line should be "#endif // %s"' % cppvar)
@ -1452,12 +1451,6 @@ def CheckOSFunctions(filename, clean_lines, linenum, error):
'...) instead of ' + function + '...).') '...) instead of ' + function + '...).')
# Matches invalid increment: *count++, which moves pointer instead of
# incrementing a value.
_RE_PATTERN_INVALID_INCREMENT = re.compile(
r'^\s*\*\w+(\+\+|--);')
class _BlockInfo: class _BlockInfo:
"""Stores information about a generic block of code.""" """Stores information about a generic block of code."""
@ -1564,14 +1557,12 @@ class _NestingState:
# TODO(unknown): unexpected #endif, issue warning? # TODO(unknown): unexpected #endif, issue warning?
pass pass
def Update(self, filename, clean_lines, linenum, error): def Update(self, clean_lines, linenum):
"""Update nesting state with current line. """Update nesting state with current line.
Args: Args:
filename: The name of the current file.
clean_lines: A CleansedLines instance containing the file. clean_lines: A CleansedLines instance containing the file.
linenum: The number of the line to check. linenum: The number of the line to check.
error: The function to call with any errors found.
""" """
line = clean_lines.elided[linenum] line = clean_lines.elided[linenum]
@ -1637,8 +1628,7 @@ class _NestingState:
line = matched.group(2) line = matched.group(2)
def CheckForNonStandardConstructs(filename, clean_lines, linenum, def CheckForNonStandardConstructs(filename, clean_lines, linenum, error):
nesting_state, error):
r"""Logs an error if we see certain non-ANSI constructs ignored by gcc-2. r"""Logs an error if we see certain non-ANSI constructs ignored by gcc-2.
Complain about several constructs which gcc-2 accepts, but which are Complain about several constructs which gcc-2 accepts, but which are
@ -1660,8 +1650,6 @@ def CheckForNonStandardConstructs(filename, clean_lines, linenum,
filename: The name of the current file. filename: The name of the current file.
clean_lines: A CleansedLines instance containing the file. clean_lines: A CleansedLines instance containing the file.
linenum: The number of the line to check. linenum: The number of the line to check.
nesting_state: A _NestingState instance which maintains information about
the current stack of nested blocks being parsed.
error: A callable to which errors are reported, which takes 4 arguments: error: A callable to which errors are reported, which takes 4 arguments:
filename, line number, error level, and message filename, line number, error level, and message
""" """
@ -2120,7 +2108,7 @@ def CheckExpressionAlignment(filename, clean_lines, linenum, error, startpos=0):
del level_starts[depth] del level_starts[depth]
def CheckSpacing(filename, clean_lines, linenum, nesting_state, error): def CheckSpacing(filename, clean_lines, linenum, error):
"""Checks for the correctness of various spacing issues in the code. """Checks for the correctness of various spacing issues in the code.
Things we check for: spaces around operators, spaces after Things we check for: spaces around operators, spaces after
@ -2134,8 +2122,6 @@ def CheckSpacing(filename, clean_lines, linenum, nesting_state, error):
filename: The name of the current file. filename: The name of the current file.
clean_lines: A CleansedLines instance containing the file. clean_lines: A CleansedLines instance containing the file.
linenum: The number of the line to check. linenum: The number of the line to check.
nesting_state: A _NestingState instance which maintains information about
the current stack of nested blocks being parsed.
error: The function to call with any errors found. error: The function to call with any errors found.
""" """
@ -2830,8 +2816,7 @@ def GetLineWidth(line):
return len(line) return len(line)
def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state, def CheckStyle(filename, clean_lines, linenum, file_extension, error):
error):
"""Checks rules from the 'C++ style rules' section of cppguide.html. """Checks rules from the 'C++ style rules' section of cppguide.html.
Most of these rules are hard to test (naming, comment style), but we Most of these rules are hard to test (naming, comment style), but we
@ -2843,8 +2828,6 @@ def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state,
clean_lines: A CleansedLines instance containing the file. clean_lines: A CleansedLines instance containing the file.
linenum: The number of the line to check. linenum: The number of the line to check.
file_extension: The extension (without the dot) of the filename. file_extension: The extension (without the dot) of the filename.
nesting_state: A _NestingState instance which maintains information about
the current stack of nested blocks being parsed.
error: The function to call with any errors found. error: The function to call with any errors found.
""" """
@ -2930,25 +2913,16 @@ def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state,
# Some more style checks # Some more style checks
CheckBraces(filename, clean_lines, linenum, error) CheckBraces(filename, clean_lines, linenum, error)
CheckEmptyBlockBody(filename, clean_lines, linenum, error) CheckEmptyBlockBody(filename, clean_lines, linenum, error)
CheckSpacing(filename, clean_lines, linenum, nesting_state, error) CheckSpacing(filename, clean_lines, linenum, error)
_RE_PATTERN_INCLUDE_NEW_STYLE = re.compile(r'#include +"[^/]+\.h"')
_RE_PATTERN_INCLUDE = re.compile(r'^\s*#\s*include\s*([<"])([^>"]*)[>"].*$') _RE_PATTERN_INCLUDE = re.compile(r'^\s*#\s*include\s*([<"])([^>"]*)[>"].*$')
# Matches the first component of a filename delimited by -s and _s. That is:
# _RE_FIRST_COMPONENT.match('foo').group(0) == 'foo'
# _RE_FIRST_COMPONENT.match('foo.cc').group(0) == 'foo'
# _RE_FIRST_COMPONENT.match('foo-bar_baz.cc').group(0) == 'foo'
# _RE_FIRST_COMPONENT.match('foo_bar-baz.cc').group(0) == 'foo'
_RE_FIRST_COMPONENT = re.compile(r'^[^-_.]+')
def _ClassifyInclude(fileinfo, include, is_system): def _ClassifyInclude(is_system):
"""Figures out what kind of header 'include' is. """Figures out what kind of header 'include' is.
Args: Args:
fileinfo: The current file cpplint is running over. A FileInfo instance.
include: The path to a #included file.
is_system: True if the #include used <> rather than "". is_system: True if the #include used <> rather than "".
Returns: Returns:
@ -2974,16 +2948,9 @@ def CheckIncludeLine(filename, clean_lines, linenum, include_state, error):
inserted. inserted.
error : The function to call with any errors found. error : The function to call with any errors found.
""" """
fileinfo = FileInfo(filename)
line = clean_lines.lines[linenum] line = clean_lines.lines[linenum]
# "include" should use the new style "foo/bar.h" instead of just "bar.h"
# XXX: neovim doesn't currently use this style
# if _RE_PATTERN_INCLUDE_NEW_STYLE.search(line):
# error(filename, linenum, 'build/include', 4,
# 'Include the directory when naming .h files')
# we shouldn't include a file more than once. actually, there are a # we shouldn't include a file more than once. actually, there are a
# handful of instances where doing so is okay, but in general it's # handful of instances where doing so is okay, but in general it's
# not. # not.
@ -3011,7 +2978,7 @@ def CheckIncludeLine(filename, clean_lines, linenum, include_state, error):
# track of the highest type seen, and complains if we see a # track of the highest type seen, and complains if we see a
# lower type after that. # lower type after that.
error_message = include_state.CheckNextIncludeOrder( error_message = include_state.CheckNextIncludeOrder(
_ClassifyInclude(fileinfo, include, is_system)) _ClassifyInclude(is_system))
if error_message: if error_message:
error(filename, linenum, 'build/include_order', 4, error(filename, linenum, 'build/include_order', 4,
'%s. Should be: c system, c++ system, other.' '%s. Should be: c system, c++ system, other.'
@ -3078,8 +3045,7 @@ def _GetTextInside(text, start_pattern):
return text[start_position:position - 1] return text[start_position:position - 1]
def CheckLanguage(filename, clean_lines, linenum, file_extension, def CheckLanguage(filename, clean_lines, linenum, include_state, error):
include_state, nesting_state, error):
"""Checks rules from the 'C++ language rules' section of cppguide.html. """Checks rules from the 'C++ language rules' section of cppguide.html.
Some of these rules are hard to test (function overloading, using Some of these rules are hard to test (function overloading, using
@ -3089,11 +3055,8 @@ def CheckLanguage(filename, clean_lines, linenum, file_extension,
filename : The name of the current file. filename : The name of the current file.
clean_lines : A CleansedLines instance containing the file. clean_lines : A CleansedLines instance containing the file.
linenum : The number of the line to check. linenum : The number of the line to check.
file_extension : The extension (without the dot) of the filename.
include_state : An _IncludeState instance in which the headers are include_state : An _IncludeState instance in which the headers are
inserted. inserted.
nesting_state : A _NestingState instance which maintains information
about the current stack of nested blocks being parsed.
error : The function to call with any errors found. error : The function to call with any errors found.
""" """
# If the line is empty or consists of entirely a comment, no need to # If the line is empty or consists of entirely a comment, no need to
@ -3173,8 +3136,9 @@ def CheckLanguage(filename, clean_lines, linenum, file_extension,
if printf_args: if printf_args:
match = Match(r'([\w.\->()]+)$', printf_args) match = Match(r'([\w.\->()]+)$', printf_args)
if match and match.group(1) != '__VA_ARGS__': if match and match.group(1) != '__VA_ARGS__':
function_name = re.search(r'\b((?:string)?printf)\s*\(', function_name_groups = re.search(r'\b((?:string)?printf)\s*\(', line, re.I)
line, re.I).group(1) assert function_name_groups
function_name = function_name_groups.group(1)
error(filename, linenum, 'runtime/printf', 4, error(filename, linenum, 'runtime/printf', 4,
'Potential format string bug. Do %s("%%s", %s) instead.' 'Potential format string bug. Do %s("%%s", %s) instead.'
% (function_name, match.group(1))) % (function_name, match.group(1)))
@ -3294,19 +3258,16 @@ def ProcessLine(filename, file_extension, clean_lines, line,
""" """
raw_lines = clean_lines.raw_lines raw_lines = clean_lines.raw_lines
init_lines = clean_lines.init_lines init_lines = clean_lines.init_lines
ParseNolintSuppressions(filename, raw_lines[line], line, error) ParseNolintSuppressions(raw_lines[line], line)
nesting_state.Update(filename, clean_lines, line, error) nesting_state.Update(clean_lines, line)
if nesting_state.stack and nesting_state.stack[-1].inline_asm != _NO_ASM: if nesting_state.stack and nesting_state.stack[-1].inline_asm != _NO_ASM:
return return
CheckForFunctionLengths(filename, clean_lines, line, function_state, error) CheckForFunctionLengths(filename, clean_lines, line, function_state, error)
CheckForMultilineCommentsAndStrings(filename, clean_lines, line, error) CheckForMultilineCommentsAndStrings(filename, clean_lines, line, error)
CheckForOldStyleComments(filename, init_lines[line], line, error) CheckForOldStyleComments(filename, init_lines[line], line, error)
CheckStyle( CheckStyle(filename, clean_lines, line, file_extension, error)
filename, clean_lines, line, file_extension, nesting_state, error) CheckLanguage(filename, clean_lines, line, include_state, error)
CheckLanguage(filename, clean_lines, line, file_extension, include_state, CheckForNonStandardConstructs(filename, clean_lines, line, error)
nesting_state, error)
CheckForNonStandardConstructs(filename, clean_lines, line,
nesting_state, error)
CheckPosixThreading(filename, clean_lines, line, error) CheckPosixThreading(filename, clean_lines, line, error)
CheckMemoryFunctions(filename, clean_lines, line, error) CheckMemoryFunctions(filename, clean_lines, line, error)
CheckOSFunctions(filename, clean_lines, line, error) CheckOSFunctions(filename, clean_lines, line, error)
@ -3349,6 +3310,7 @@ def ProcessFileData(filename, file_extension, lines, error,
if not IsErrorSuppressedByNolint(category, linenum): if not IsErrorSuppressedByNolint(category, linenum):
key = init_lines[linenum - 1 if linenum else 0:linenum + 2] key = init_lines[linenum - 1 if linenum else 0:linenum + 2]
err = [filename, key, category] err = [filename, key, category]
assert _cpplint_state.record_errors_file
json.dump(err, _cpplint_state.record_errors_file) json.dump(err, _cpplint_state.record_errors_file)
_cpplint_state.record_errors_file.write('\n') _cpplint_state.record_errors_file.write('\n')
Error(filename, linenum, category, confidence, message) Error(filename, linenum, category, confidence, message)
@ -3401,8 +3363,6 @@ def ProcessFile(filename, vlevel, extra_check_functions=[]):
if filename == '-': if filename == '-':
stdin = sys.stdin.read() stdin = sys.stdin.read()
if sys.version_info < (3, 0):
stdin = stdin.decode('utf8')
lines = stdin.split('\n') lines = stdin.split('\n')
if _cpplint_state.stdin_filename is not None: if _cpplint_state.stdin_filename is not None:
filename = _cpplint_state.stdin_filename filename = _cpplint_state.stdin_filename
@ -3498,7 +3458,7 @@ def ParseArguments(args):
counting_style = '' counting_style = ''
record_errors_file = None record_errors_file = None
suppress_errors_file = None suppress_errors_file = None
stdin_filename = None stdin_filename = ''
for (opt, val) in opts: for (opt, val) in opts:
if opt == '--help': if opt == '--help':