"""Line-cache functionality."""
import linecache
def generate_unique_filename(cls: type, func_name: str, lines: list[str] = []) -> str:
"""
Create a "filename" suitable for a function being generated.
If *lines* are provided, insert them in the first free spot or stop
if a duplicate is found.
"""
extra = ""
count = 1
while True:
unique_filename = "".format(
func_name, cls.__module__, getattr(cls, "__qualname__", cls.__name__), extra
)
if not lines:
return unique_filename
cache_line = (len("\n".join(lines)), None, lines, unique_filename)
if linecache.cache.setdefault(unique_filename, cache_line) == cache_line:
return unique_filename
# Looks like this spot is taken. Try again.
count += 1
extra = f"-{count}"