Beispiel #1
0
    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)