def setup(self): self.args = self._parser.parse_args() self.filepath = self.args.file self.flags = _getFlagsFromArgs(self.args) hardcodedFlags = ['-xc++', '-std=c++98', '-Wall'] self.transUnit = _getTranslationUnit(self.filepath, hardcodedFlags + self.flags) if self.args.verbose: traverse(self.transUnit.cursor, TreePrinter()) fileprinter.printf('\n') didFindError = _printErrors(self.transUnit, fileprinter.printerr) if didFindError and not self.args.ignoreErrors: sys.exit('FATAL One or more errors found in compilation unit.') return self.args, self.transUnit
from collections import defaultdict def rewritesByFile(unusedParameters): rewrites = defaultdict(list) for cursor in unusedParameters: token = eponymousToken(cursor) if not token: continue startOffset = token.extent.start.offset endOffset = token.extent.end.offset rewrite = (startOffset, endOffset - startOffset, '') rewrites[token.location.file.name].append(rewrite) return rewrites rewrites = rewritesByFile(finder.unusedParameters) from rewrite import rewrite for filename, rewrites in rewrites.iteritems(): if filename != inFilepath: printf('Skipping file {}', filename) continue elif len(rewrites) == 0: continue with open(filename, 'r') as fin: printf('Rewriting file {}', filename) with open(filename + '.rewrite', 'w') as fout: rewrite(fin, fout, rewrites)
# def get_size(self): # def get_offset(self, fieldname): # def get_ref_qualifier(self): # def spelling(self): # def __eq__(self, other): # def __ne__(self, other): def printType(cppType, columnWidth, printer=printf): printer('{{:<{0}}}{{:<{0}}}{{:<{0}}}'.format(columnWidth), '"' + cppType.spelling + '"', cppType.kind, cppType.get_ref_qualifier()) if __name__ == '__main__': util = Fixer('Print all of the types in a translation unit.') util.add_argument('--column-width', dest='columnWidth', default=45, help='Width in characters of each output column') args, translationUnit = util.setup() grabber = TypeGrabber() traverse(translationUnit.cursor, grabber) if len(grabber.types): printf('{{:<{0}}}{{:<{0}}}{{:<{0}}}'.format(args.columnWidth), '---- Name ----', '---- Kind ----', '---- Ref Qualifier ----') for cppType in grabber.types: printType(cppType, args.columnWidth)