Upstream useful lint check from WebKit's fork of cpplint.py.

Checks against "Foo *bar" and "Foo &bar" declarations.

WebKit patch was: http://trac.webkit.org/changeset/46856

Credit Torch Mobile, Inc. who have contributed the WebKit patch in question.

Patch committed for asvitkine@chromium.org.
This commit is contained in:
erg@google.com
2011-09-06 20:19:05 +00:00
parent 0249a38579
commit 5210aec6df
2 changed files with 41 additions and 3 deletions
+25 -1
View File
@@ -1,6 +1,7 @@
#!/usr/bin/python2.4
#
# Copyright (c) 2009 Google Inc. All rights reserved.
# Copyright (c) 2011 Google Inc. All rights reserved.
# Copyright (c) 2009 Torch Mobile Inc.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -193,6 +194,7 @@ _ERROR_CATEGORIES = [
'whitespace/braces',
'whitespace/comma',
'whitespace/comments',
'whitespace/declaration',
'whitespace/end_of_line',
'whitespace/ending_newline',
'whitespace/indent',
@@ -1245,6 +1247,27 @@ def CheckInvalidIncrement(filename, clean_lines, linenum, error):
'Changing pointer instead of value (or unused value of operator*).')
# Matches Foo *foo declarations.
_RE_PATTERN_POINTER_DECLARATION_WHITESPACE = re.compile(
r'\s*\w+(?<!\breturn|\bdelete)\s+(?P<pointer_operator>\*|\&)\w+')
def CheckPointerDeclarationWhitespace(filename, clean_lines, linenum, error):
"""Checks for Foo *foo declarations.
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]
matched = _RE_PATTERN_POINTER_DECLARATION_WHITESPACE.match(line)
if matched:
error(filename, linenum, 'whitespace/declaration', 3,
'Declaration has space between type name and %s in %s' %
(matched.group('pointer_operator'), matched.group(0).strip()))
class _ClassInfo(object):
"""Stores information about a class."""
@@ -2926,6 +2949,7 @@ def ProcessLine(filename, file_extension,
class_state, error)
CheckPosixThreading(filename, clean_lines, line, error)
CheckInvalidIncrement(filename, clean_lines, line, error)
CheckPointerDeclarationWhitespace(filename, clean_lines, line, error)
def ProcessFileData(filename, file_extension, lines, error):