Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions Lib/linecache.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,8 @@
import os
import tokenize

__all__ = ["getline", "clearcache", "checkcache"]
__all__ = ["getline", "clearcache", "checkcache", "lazycache"]

def getline(filename, lineno, module_globals=None):
lines = getlines(filename, module_globals)
if 1 <= lineno <= len(lines):
return lines[lineno-1]
else:
return ''


# The cache

# The cache. Maps filenames to either a thunk which will provide source code,
# or a tuple (size, mtime, lines, fullname) once loaded.
Expand All @@ -29,9 +20,17 @@ def getline(filename, lineno, module_globals=None):

def clearcache():
"""Clear the cache entirely."""
cache.clear()

global cache
cache = {}

def getline(filename, lineno, module_globals=None):
"""Get a line for a Python source file from the cache.
Update the cache if it doesn't contain an entry for this file already."""

lines = getlines(filename, module_globals)
if 1 <= lineno <= len(lines):
return lines[lineno - 1]
return ''


def getlines(filename, module_globals=None):
Expand All @@ -56,11 +55,10 @@ def checkcache(filename=None):

if filename is None:
filenames = list(cache.keys())
elif filename in cache:
filenames = [filename]
else:
if filename in cache:
filenames = [filename]
else:
return
return

for filename in filenames:
entry = cache[filename]
Expand Down Expand Up @@ -109,8 +107,10 @@ def updatecache(filename, module_globals=None):
# for this module.
return []
cache[filename] = (
len(data), None,
[line+'\n' for line in data.splitlines()], fullname
len(data),
None,
[line + '\n' for line in data.splitlines()],
fullname
)
return cache[filename][2]

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* Add `lazycache` function to `__all__`.
* Use `dict.clear` to clear the cache.
* Refactoring `getline` function and `checkcache` function.