class FuzzyWordCompleter(Completer): def __init__( self, words: List[str], display_dict: Optional[Dict[str, str]] = None, meta_dict: Optional[Dict[str, str]] = None, ) -> None: self.words = words self.WORD = True self.word_completer = WordCompleter( words=self.words, WORD=self.WORD, display_dict=display_dict, meta_dict=meta_dict, ) self.fuzzy_completer = FuzzyCompleter(self.word_completer, WORD=self.WORD) def get_completions(self, document: Document, complete_event: CompleteEvent) -> Iterable[Completion]: return self.fuzzy_completer.get_completions(document, complete_event) def get_completions_filtered( self, document: Document, complete_event: CompleteEvent, predicate: Callable[[Completion], bool], ) -> Iterable[Completion]: for v in self.get_completions(document, complete_event): if predicate(v): yield v def get_completions_without(self, document: Document, complete_event: CompleteEvent, **filter_values: bool) -> Iterable[Completion]: return self.get_completions_filtered( document, complete_event, lambda v: not filter_values.get(v.text, False))
class FuzzyWordCompleter(Completer): """ Fuzzy completion on a list of words. (This is basically a `WordCompleter` wrapped in a `FuzzyCompleter`.) :param words: List of words or callable that returns a list of words. :param meta_dict: Optional dict mapping words to their meta-information. :param WORD: When True, use WORD characters. """ def __init__(self, words, meta_dict=None, WORD=False): # assert callable(words) or all(isinstance(w, string_types) for w in words) self.words = words self.meta_dict = meta_dict or {} self.WORD = WORD self.word_completer = WordCompleter( words=lambda: self.words, WORD=self.WORD, meta_dict=self.meta_dict ) self.fuzzy_completer = FuzzyCompleter(self.word_completer, WORD=self.WORD) def get_completions(self, document, complete_event): return self.fuzzy_completer.get_completions(document, complete_event)