Spaces:
Sleeping
Sleeping
first-space
/
first-space-venv
/lib
/python3.12
/site-packages
/prompt_toolkit
/completion
/deduplicate.py
from __future__ import annotations | |
from typing import Iterable | |
from prompt_toolkit.document import Document | |
from .base import CompleteEvent, Completer, Completion | |
__all__ = ["DeduplicateCompleter"] | |
class DeduplicateCompleter(Completer): | |
""" | |
Wrapper around a completer that removes duplicates. Only the first unique | |
completions are kept. | |
Completions are considered to be a duplicate if they result in the same | |
document text when they would be applied. | |
""" | |
def __init__(self, completer: Completer) -> None: | |
self.completer = completer | |
def get_completions( | |
self, document: Document, complete_event: CompleteEvent | |
) -> Iterable[Completion]: | |
# Keep track of the document strings we'd get after applying any completion. | |
found_so_far: set[str] = set() | |
for completion in self.completer.get_completions(document, complete_event): | |
text_if_applied = ( | |
document.text[: document.cursor_position + completion.start_position] | |
+ completion.text | |
+ document.text[document.cursor_position :] | |
) | |
if text_if_applied == document.text: | |
# Don't include completions that don't have any effect at all. | |
continue | |
if text_if_applied in found_so_far: | |
continue | |
found_so_far.add(text_if_applied) | |
yield completion | |