def generateFromFiles(self, files):
        # load files into memory
        self.files = files
        self.filecontent = {}
        for file in files:
            f = open(file, 'r')
            self.filecontent[file] = f.readlines()
            f.close()

        # create the class
        ctags = exuberant_ctags(tag_program=self.ctags_path, files=files)

        # you can generate a ctags_file instance right away
        # ctags_file is what parses lines from the generator or a
        # tags file and creates a list of ctags_entry instances
        tag_file = ctags.generate_object()

        # override the default run parameters for exuberant ctags, so we get
        # full kind names, say
        tag_file = ctags.generate_object(generator_options={
                                         '--fields': '+afmikKlnsStz', '-F': None, '--c++-kinds': '+cegfmnpstv '})

        harvester = kind_harvester()
        harvester.process_tag_list(tag_file.tags)
        kinds = harvester.get_data()
        # print kinds
        lastClass = ''

        result = ""

        # collect classes
        self.classmap = {}
        for entry_type in kinds.keys():
            if entry_type != 'class':
                continue
            for entry in kinds[entry_type]:
                ns = ''
                if 'namespace' in entry.extensions.keys():
                    ns = entry.extensions['namespace'] + '_'
                #self.classmap[entry.name] = ns + entry.name + 'Class'
                if self.use_namespace_names:
                    self.classmap[entry.name] = ns + entry.name
                else:
                    self.classmap[entry.name] = entry.name

        # this sorts the result a bit depending on the type
        result = ''
        entry_types = ['class', 'member', 'function', 'prototype']
        for entry_type in entry_types:
            if entry_type in kinds.keys():
                res = self._handleKind(kinds, entry_type)
                if res != '':
                    result += "/// %s\n" % str(entry_type)
                    result += res

        self.result = result.strip()
        print "processed %d tags. output files written" % (len(tag_file.tags))
        return len(tag_file.tags)
Beispiel #2
0
    def UpdateCTagsGenerator(self):
        self.ctags_generator = exuberant_ctags(files=self.source_files)
        try:
            if self.source_files:
                self.list_of_tags = self.ctags_generator.generate_tags(generator_options={"--fields": "+n"})

            self.names = name_lookup_harvester()
            self.by_name = by_name_harvester()
            self.tagfile = ctags_file(self.list_of_tags, harvesters=[self.names, self.by_name])
        except:
            pass
Beispiel #3
0

import sys

from pyctags import exuberant_ctags, ctags_file
from pyctags.harvesters import name_lookup_harvester, by_name_harvester
import os

source_files = list()

for (dirpath, dirs, files) in os.walk("../"):
    for f in files:
        if f[-3:] == '.py':
            source_files.append(os.path.join(dirpath, f))

generator = exuberant_ctags(files=source_files)
list_o_tags = generator.generate_tags(generator_options={'--fields' : '+n'})

names = name_lookup_harvester()
by_name = by_name_harvester()
tagfile = ctags_file(list_o_tags, harvesters=[names, by_name])

print ("Found %d tags in %d source files." % (len(tagfile.tags), len(source_files)))

# this fetches unique names
letter_tags = names.starts_with('c')
print ("%d individual names start with the letter c." % (len(letter_tags)))
by_name_tags = by_name.get_data()

for t in letter_tags:
    # there can be more than one occurance of a particular name
Beispiel #4
0
                    for line in sc.classbox():
                        num += 1
                        if num == 1:
                            print("  | " + line)
                        elif num == 2:
                            print("  |-" + line)
                        elif thisclass == lastclass:
                            print("    " + line)
                        else:
                            print("  | " + line)
                    if thisclass < lastclass:
                        print("  |")
                    thisclass += 1
            print("")


source_files = list()
for (dirpath, dirs, files) in os.walk(srcdir):
    for f in files:
        if f[-3:] == '.py':
            source_files.append(os.path.join(dirpath, f))

harvester = python_class_harvester()
ec = pyctags.exuberant_ctags()

tf = ec.generate_object(generator_options={"--fields": "+in"},
                        files=source_files,
                        harvesters=[harvester])

harvester.pretty_print()
Beispiel #5
0

import sys

from pyctags import exuberant_ctags, ctags_file
from pyctags.harvesters import name_lookup_harvester, by_name_harvester
import os

source_files = list()

for (dirpath, dirs, files) in os.walk("/Big2/microbe/"):
    for f in files:
        if f[-4:] == '.cpp' or f[-2:] == ".h" :
            source_files.append(os.path.join(dirpath, f))

generator = exuberant_ctags(files=source_files)
list_o_tags = generator.generate_tags(generator_options={'--fields' : '+n'})



names = name_lookup_harvester()
by_name = by_name_harvester()
tagfile = ctags_file(list_o_tags, harvesters=[names, by_name])

print ("Found %d tags in %d source files." % (len(tagfile.tags), len(source_files)))



import microbe, re

regexs = {}
Beispiel #6
0
    srcdir = os.path.realpath("/usr/src/linux")

source_files = list()
extensions = ['.c', '.h', '.s']

cl = time.clock()
print ("Walking source tree %s..." % (srcdir))
for (dirpath, dirs, files) in os.walk(srcdir):
    for f in files:
        if f[-2:] in extensions:
            source_files.append(os.path.join(dirpath, f))
            
print ("%.2f seconds elapsed, found %d source files." % (time.clock() - cl, len(source_files)))
print ("This part will take a while.  I've seen it take five to eight minutes on my machine which isn't exactly tuff...")
cl = time.clock()
tf = pyctags.exuberant_ctags().generate_object(files=source_files, generator_options={"--fields" : "-sfk+Kn"})

print ("%d tags parsed in %.2f seconds." % (len(tf.tags), time.clock() - cl))
cl = time.clock()
names = pyctags.harvesters.name_lookup_harvester()
names.process_tag_list(tf.tags)
print ("Name index took %.2f seconds to build." % (time.clock() - cl))

abs_names = names.starts_with('abs_')
print ("%d tags start with the letters abs.  They are:" % (len(abs_names)))

for name in abs_names:
    print ("\t%s" % (name))
print("\n")

print ("%d tags start with the letters abse.  They are:" % (len(names.starts_with("abse"))))