You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.7 KiB
52 lines
1.7 KiB
import os |
|
import re |
|
import codecs |
|
import sys |
|
|
|
class SourceScanner(object): |
|
""" |
|
Traverses directory tree, reads all source files, and passes their contents |
|
to the Parser. |
|
""" |
|
|
|
def ScanDir(self, srcdirs, parser): |
|
""" |
|
Scans provided path and passes all found contents to the parser using |
|
parser.Parse method. |
|
""" |
|
extensions = tuple([".cpp"]) |
|
for srcdir in srcdirs: |
|
if os.path.isfile(srcdir): |
|
if not self.ScanFile(srcdir, parser): |
|
return False |
|
else: |
|
for dirname, dirnames, filenames in os.walk(srcdir): |
|
for filename in filenames: |
|
if filename.endswith(extensions): |
|
path = os.path.join(dirname, filename) |
|
try: |
|
if not self.ScanFile(path, parser): |
|
return False |
|
except: |
|
print(("Exception in file %s" % path)) |
|
raise |
|
return True |
|
|
|
def ScanFile(self, path, parser): |
|
""" |
|
Scans provided file and passes its contents to the parser using |
|
parser.Parse method. |
|
""" |
|
|
|
with codecs.open(path, 'r', 'utf-8') as f: |
|
try: |
|
contents = f.read() |
|
except: |
|
contents = '' |
|
print('Failed reading file: %s, skipping content.' % path) |
|
pass |
|
try: |
|
return parser.Parse(contents) |
|
except Exception as e: |
|
print("Exception while parsing file {}".format(path)) |
|
raise
|
|
|