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)
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
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
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()
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 = {}
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"))))