forked from Archive/PX4-Autopilot
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
|
import os
|
||
|
import re
|
||
|
|
||
|
class Scanner(object):
|
||
|
"""
|
||
|
Traverses directory tree, reads all source files, and passes their contents
|
||
|
to the Parser.
|
||
|
"""
|
||
|
|
||
|
re_file_extension = re.compile(r'\.([^\.]+)$')
|
||
|
|
||
|
def ScanDir(self, srcdir, parser):
|
||
|
"""
|
||
|
Scans provided path and passes all found contents to the parser using
|
||
|
parser.Parse method.
|
||
|
"""
|
||
|
extensions = set(parser.GetSupportedExtensions())
|
||
|
for dirname, dirnames, filenames in os.walk(srcdir):
|
||
|
for filename in filenames:
|
||
|
m = self.re_file_extension.search(filename)
|
||
|
if m:
|
||
|
ext = m.group(1)
|
||
|
if ext in extensions:
|
||
|
path = os.path.join(dirname, filename)
|
||
|
self.ScanFile(path, parser)
|
||
|
|
||
|
def ScanFile(self, path, parser):
|
||
|
"""
|
||
|
Scans provided file and passes its contents to the parser using
|
||
|
parser.Parse method.
|
||
|
"""
|
||
|
with open(path, 'r') as f:
|
||
|
contents = f.read()
|
||
|
parser.Parse(contents)
|