init
This commit is contained in:
commit
38355d2442
9083 changed files with 1225834 additions and 0 deletions
|
|
@ -0,0 +1,43 @@
|
|||
from typing import Iterable, Set
|
||||
|
||||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue