Name.get_code caching to make lookups faster

This commit is contained in:
Dave Halter
2014-04-12 15:27:35 +02:00
parent 7f288eb0b0
commit 3d9d0bfd03
2 changed files with 12 additions and 5 deletions

View File

@@ -1429,18 +1429,22 @@ class Name(Simple):
So a name like "module.class.function"
would result in an array of [module, class, function]
"""
__slots__ = ('names',)
__slots__ = ('names', '_get_code')
def __init__(self, module, names, start_pos, end_pos, parent=None):
super(Name, self).__init__(module, start_pos, end_pos)
self.names = tuple(n if isinstance(n, NamePart) else
NamePart(n[0], self, n[1]) for n in names)
names = tuple(n if isinstance(n, NamePart) else
NamePart(n[0], self, n[1]) for n in names)
# Cache get_code, because it's used quite often for comparisons
# (seen by using the profiler).
self._get_code = ".".join(unicode(n) for n in names)
self.names = names
if parent is not None:
self.parent = parent
def get_code(self):
""" Returns the names in a full string format """
return ".".join(unicode(n) for n in self.names)
return self._get_code
@property
def end_pos(self):

View File

@@ -36,7 +36,10 @@ def main(args):
run(code, i)
jedi.set_debug_function(notices=args['--debug'])
cProfile.runctx('run(code, n)', globals(), locals(), sort=args['-s'])
if args['--omit']:
run(code, n)
else:
cProfile.runctx('run(code, n)', globals(), locals(), sort=args['-s'])
if __name__ == '__main__':