mirror of
https://github.com/google/styleguide.git
synced 2024-03-22 13:11:43 +08:00
Merge pull request #292 from iam/root_cpplint_cfg
CPPLINT.cfg root=setting is now relative to CFG file.
This commit is contained in:
commit
8667623865
30
cpplint/cpplint.py
vendored
30
cpplint/cpplint.py
vendored
|
@ -114,12 +114,13 @@ Syntax: cpplint.py [--verbose=#] [--output=vs7] [--filter=-x,+y,...]
|
|||
ignored.
|
||||
|
||||
Examples:
|
||||
Assuming that src/.git exists, the header guard CPP variables for
|
||||
src/chrome/browser/ui/browser.h are:
|
||||
Assuming that top/src/.git exists (and cwd=top/src), the header guard
|
||||
CPP variables for top/src/chrome/browser/ui/browser.h are:
|
||||
|
||||
No flag => CHROME_BROWSER_UI_BROWSER_H_
|
||||
--root=chrome => BROWSER_UI_BROWSER_H_
|
||||
--root=chrome/browser => UI_BROWSER_H_
|
||||
--root=.. => SRC_CHROME_BROWSER_UI_BROWSER_H_
|
||||
|
||||
linelength=digits
|
||||
This is the allowed line length for the project. The default value is
|
||||
|
@ -168,7 +169,7 @@ Syntax: cpplint.py [--verbose=#] [--output=vs7] [--filter=-x,+y,...]
|
|||
"linelength" allows to specify the allowed line length for the project.
|
||||
|
||||
The "root" option is similar in function to the --root flag (see example
|
||||
above).
|
||||
above). Paths are relative to the directory of the CPPLINT.cfg.
|
||||
|
||||
The "headers" option is similar in function to the --headers flag
|
||||
(see example above).
|
||||
|
@ -539,6 +540,7 @@ _error_suppressions = {}
|
|||
# The root directory used for deriving header guard CPP variable.
|
||||
# This is set by --root flag.
|
||||
_root = None
|
||||
_root_debug = False
|
||||
|
||||
# The allowed line length of files.
|
||||
# This is set by --linelength flag.
|
||||
|
@ -1802,8 +1804,14 @@ def GetHeaderGuardCPPVariable(filename):
|
|||
file_path_from_root = fileinfo.RepositoryName()
|
||||
|
||||
def FixupPathFromRoot():
|
||||
if _root_debug:
|
||||
sys.stderr.write("\n_root fixup, _root = '%s', repository name = '%s'\n"
|
||||
%(_root, fileinfo.RepositoryName()))
|
||||
|
||||
# Process the file path with the --root flag if it was set.
|
||||
if not _root:
|
||||
if _root_debug:
|
||||
sys.stderr.write("_root unspecified\n")
|
||||
return file_path_from_root
|
||||
|
||||
def StripListPrefix(lst, prefix):
|
||||
|
@ -1817,6 +1825,11 @@ def GetHeaderGuardCPPVariable(filename):
|
|||
# --root=subdir , lstrips subdir from the header guard
|
||||
maybe_path = StripListPrefix(PathSplitToList(file_path_from_root),
|
||||
PathSplitToList(_root))
|
||||
|
||||
if _root_debug:
|
||||
sys.stderr.write("_root lstrip (maybe_path=%s, file_path_from_root=%s," +
|
||||
" _root=%s)\n" %(maybe_path, file_path_from_root, _root))
|
||||
|
||||
if maybe_path:
|
||||
return os.path.join(*maybe_path)
|
||||
|
||||
|
@ -1826,9 +1839,17 @@ def GetHeaderGuardCPPVariable(filename):
|
|||
|
||||
maybe_path = StripListPrefix(PathSplitToList(full_path),
|
||||
PathSplitToList(root_abspath))
|
||||
|
||||
if _root_debug:
|
||||
sys.stderr.write("_root prepend (maybe_path=%s, full_path=%s, " +
|
||||
"root_abspath=%s)\n" %(maybe_path, full_path, root_abspath))
|
||||
|
||||
if maybe_path:
|
||||
return os.path.join(*maybe_path)
|
||||
|
||||
if _root_debug:
|
||||
sys.stderr.write("_root ignore, returning %s\n" %(file_path_from_root))
|
||||
|
||||
# --root=FAKE_DIR is ignored
|
||||
return file_path_from_root
|
||||
|
||||
|
@ -5947,7 +5968,8 @@ def ProcessConfigOverrides(filename):
|
|||
sys.stderr.write('Line length must be numeric.')
|
||||
elif name == 'root':
|
||||
global _root
|
||||
_root = val
|
||||
# root directories are specified relative to CPPLINT.cfg dir.
|
||||
_root = os.path.join(os.path.dirname(cfg_file), val)
|
||||
elif name == 'headers':
|
||||
ProcessHppHeadersOption(val)
|
||||
else:
|
||||
|
|
|
@ -4218,6 +4218,8 @@ class CpplintTest(CpplintTestBase):
|
|||
error_collector.ResultList())
|
||||
|
||||
def testBuildHeaderGuardWithRoot(self):
|
||||
# note: Tested file paths must be real, otherwise
|
||||
# the repository name lookup will fail.
|
||||
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||||
'cpplint_test_header.h')
|
||||
file_info = cpplint.FileInfo(file_path)
|
||||
|
@ -4238,9 +4240,33 @@ class CpplintTest(CpplintTestBase):
|
|||
#
|
||||
|
||||
# left-strip the header guard by using a root dir inside of the repo dir.
|
||||
# relative directory
|
||||
cpplint._root = 'cpplint'
|
||||
self.assertEquals('CPPLINT_TEST_HEADER_H_',
|
||||
cpplint.GetHeaderGuardCPPVariable(file_path))
|
||||
|
||||
nested_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||||
os.path.join('nested',
|
||||
'cpplint_test_header.h'))
|
||||
cpplint._root = os.path.join('cpplint', 'nested')
|
||||
actual = cpplint.GetHeaderGuardCPPVariable(nested_file_path)
|
||||
self.assertEquals('CPPLINT_TEST_HEADER_H_',
|
||||
actual)
|
||||
|
||||
# absolute directory
|
||||
# (note that CPPLINT.cfg root=setting is always made absolute)
|
||||
cpplint._root = os.path.join(os.path.dirname(os.path.abspath(__file__)))
|
||||
self.assertEquals('CPPLINT_TEST_HEADER_H_',
|
||||
cpplint.GetHeaderGuardCPPVariable(file_path))
|
||||
|
||||
nested_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||||
os.path.join('nested',
|
||||
'cpplint_test_header.h'))
|
||||
cpplint._root = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||||
'nested')
|
||||
self.assertEquals('CPPLINT_TEST_HEADER_H_',
|
||||
cpplint.GetHeaderGuardCPPVariable(nested_file_path))
|
||||
|
||||
# --root flag is ignored if an non-existent directory is specified.
|
||||
cpplint._root = 'NON_EXISTENT_DIR'
|
||||
self.assertEquals('CPPLINT_CPPLINT_TEST_HEADER_H_',
|
||||
|
@ -4250,6 +4276,7 @@ class CpplintTest(CpplintTestBase):
|
|||
# than the repo dir
|
||||
|
||||
# (using absolute paths)
|
||||
# (note that CPPLINT.cfg root=setting is always made absolute)
|
||||
this_files_path = os.path.dirname(os.path.abspath(__file__))
|
||||
(styleguide_path, this_files_dir) = os.path.split(this_files_path)
|
||||
(styleguide_parent_path, _) = os.path.split(styleguide_path)
|
||||
|
@ -4260,6 +4287,10 @@ class CpplintTest(CpplintTestBase):
|
|||
self.assertEquals('STYLEGUIDE_CPPLINT_CPPLINT_TEST_HEADER_H_',
|
||||
cpplint.GetHeaderGuardCPPVariable(file_path))
|
||||
|
||||
# To run the 'relative path' tests, we must be in the directory of this test file.
|
||||
cur_dir = os.getcwd()
|
||||
os.chdir(this_files_path)
|
||||
|
||||
# (using relative paths)
|
||||
styleguide_rel_path = os.path.relpath(styleguide_path, this_files_path)
|
||||
# '..'
|
||||
|
@ -4275,6 +4306,9 @@ class CpplintTest(CpplintTestBase):
|
|||
|
||||
cpplint._root = None
|
||||
|
||||
# Restore previous CWD.
|
||||
os.chdir(cur_dir)
|
||||
|
||||
def testPathSplitToList(self):
|
||||
self.assertEquals([''],
|
||||
cpplint.PathSplitToList(os.path.join('')))
|
||||
|
|
1
cpplint/nested/cpplint_test_header.h
Normal file
1
cpplint/nested/cpplint_test_header.h
Normal file
|
@ -0,0 +1 @@
|
|||
// A test header for cpplint_unittest.py.
|
Loading…
Reference in New Issue
Block a user