Skip to content
Closed
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
37 changes: 19 additions & 18 deletions Lib/linecache.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,28 @@
import os
import tokenize

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

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


# The cache

# The cache. Maps filenames to either a thunk which will provide source code,
# or a tuple (size, mtime, lines, fullname) once loaded.
cache = {}


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]
else:
return ''


def getlines(filename, module_globals=None):
Expand All @@ -56,11 +56,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 +108,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__` in `linecache` module.
Remove `global` keyword reference and use `clear()` to remove elements in `dict`.
Small refactoring in `getline` method to remove unnecessary `else` condition.