mirror of
https://github.com/google/styleguide.git
synced 2024-03-22 13:11:43 +08:00
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:
parent
0249a38579
commit
5210aec6df
26
cpplint/cpplint.py
vendored
26
cpplint/cpplint.py
vendored
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/python2.4
|
#!/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
|
# Redistribution and use in source and binary forms, with or without
|
||||||
# modification, are permitted provided that the following conditions are
|
# modification, are permitted provided that the following conditions are
|
||||||
|
@ -193,6 +194,7 @@ _ERROR_CATEGORIES = [
|
||||||
'whitespace/braces',
|
'whitespace/braces',
|
||||||
'whitespace/comma',
|
'whitespace/comma',
|
||||||
'whitespace/comments',
|
'whitespace/comments',
|
||||||
|
'whitespace/declaration',
|
||||||
'whitespace/end_of_line',
|
'whitespace/end_of_line',
|
||||||
'whitespace/ending_newline',
|
'whitespace/ending_newline',
|
||||||
'whitespace/indent',
|
'whitespace/indent',
|
||||||
|
@ -1245,6 +1247,27 @@ def CheckInvalidIncrement(filename, clean_lines, linenum, error):
|
||||||
'Changing pointer instead of value (or unused value of operator*).')
|
'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):
|
class _ClassInfo(object):
|
||||||
"""Stores information about a class."""
|
"""Stores information about a class."""
|
||||||
|
|
||||||
|
@ -2926,6 +2949,7 @@ def ProcessLine(filename, file_extension,
|
||||||
class_state, error)
|
class_state, error)
|
||||||
CheckPosixThreading(filename, clean_lines, line, error)
|
CheckPosixThreading(filename, clean_lines, line, error)
|
||||||
CheckInvalidIncrement(filename, clean_lines, line, error)
|
CheckInvalidIncrement(filename, clean_lines, line, error)
|
||||||
|
CheckPointerDeclarationWhitespace(filename, clean_lines, line, error)
|
||||||
|
|
||||||
|
|
||||||
def ProcessFileData(filename, file_extension, lines, error):
|
def ProcessFileData(filename, file_extension, lines, error):
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
#!/usr/bin/python2.4
|
#!/usr/bin/python2.4
|
||||||
# -*- coding: utf-8; -*-
|
# -*- coding: utf-8; -*-
|
||||||
#
|
#
|
||||||
# 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
|
# Redistribution and use in source and binary forms, with or without
|
||||||
# modification, are permitted provided that the following conditions are
|
# modification, are permitted provided that the following conditions are
|
||||||
|
@ -348,7 +349,7 @@ class CpplintTest(CpplintTestBase):
|
||||||
'Using C-style cast. Use static_cast<int>(...) instead'
|
'Using C-style cast. Use static_cast<int>(...) instead'
|
||||||
' [readability/casting] [4]')
|
' [readability/casting] [4]')
|
||||||
self.TestLint(
|
self.TestLint(
|
||||||
'int *a = (int *)NULL;',
|
'int* a = (int *)NULL;',
|
||||||
'Using C-style cast. Use reinterpret_cast<int *>(...) instead'
|
'Using C-style cast. Use reinterpret_cast<int *>(...) instead'
|
||||||
' [readability/casting] [4]')
|
' [readability/casting] [4]')
|
||||||
|
|
||||||
|
@ -1646,6 +1647,19 @@ class CpplintTest(CpplintTestBase):
|
||||||
self.TestLint('f(a, /* name */ b);', '')
|
self.TestLint('f(a, /* name */ b);', '')
|
||||||
self.TestLint('f(a, /* name */b);', '')
|
self.TestLint('f(a, /* name */b);', '')
|
||||||
|
|
||||||
|
def testPointerDeclarationWhitespace(self):
|
||||||
|
self.TestLint('int* b;', '')
|
||||||
|
self.TestLint('int *b;',
|
||||||
|
'Declaration has space between type name and * in int *b '
|
||||||
|
'[whitespace/declaration] [3]')
|
||||||
|
self.TestLint('return *b;', '')
|
||||||
|
self.TestLint('delete *b;', '')
|
||||||
|
self.TestLint('int& b;', '')
|
||||||
|
self.TestLint('int &b;',
|
||||||
|
'Declaration has space between type name and & in int &b '
|
||||||
|
'[whitespace/declaration] [3]')
|
||||||
|
self.TestLint('return &b;', '')
|
||||||
|
|
||||||
def testIndent(self):
|
def testIndent(self):
|
||||||
self.TestLint('static int noindent;', '')
|
self.TestLint('static int noindent;', '')
|
||||||
self.TestLint(' int two_space_indent;', '')
|
self.TestLint(' int two_space_indent;', '')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user