def completion(self, document, complete_event=None): # complete_event is None when this method is called by complete_input() if complete_event == None and len(document.text) == 0: return t = document.text.split() if len(t) == 0 or (len(t) == 1 and document.text[-1] != ' '): # command completion if self.fuzzy_completion and complete_event: c = FuzzyWordCompleter(self.commands()) for v in c.get_completions(document, complete_event): yield v else: for cmd in self.commands(): if cmd.startswith(document.text): yield Completion(cmd, start_position=-len(document.text)) else: # argument completion # complete command(t[0]) first try: cmd = self.complete_input([t[0]])[0] except InvalidInput: return v = self._commands.get(cmd) if not v: return c = v['completer'] if c: # do argument completion with text after the command (t[0]) new_document = Document(document.text[len(t[0]):].lstrip()) for v in c.get_completions(new_document, complete_event): yield v
def test_fuzzy_completer(): collection = [ "migrations.py", "django_migrations.py", "django_admin_log.py", "api_user.doc", "user_group.doc", "users.txt", "accounts.txt", "123.py", "test123test.py", ] completer = FuzzyWordCompleter(collection) completions = completer.get_completions(Document("txt"), CompleteEvent()) assert [c.text for c in completions] == ["users.txt", "accounts.txt"] completions = completer.get_completions(Document("djmi"), CompleteEvent()) assert [c.text for c in completions] == [ "django_migrations.py", "django_admin_log.py", ] completions = completer.get_completions(Document("mi"), CompleteEvent()) assert [c.text for c in completions] == [ "migrations.py", "django_migrations.py", "django_admin_log.py", ] completions = completer.get_completions(Document("user"), CompleteEvent()) assert [c.text for c in completions] == [ "user_group.doc", "users.txt", "api_user.doc", ] completions = completer.get_completions(Document("123"), CompleteEvent()) assert [c.text for c in completions] == ["123.py", "test123test.py"] completions = completer.get_completions(Document("miGr"), CompleteEvent()) assert [c.text for c in completions] == [ "migrations.py", "django_migrations.py", ] # Multiple words ending with space. (Accept all options) completions = completer.get_completions(Document("test "), CompleteEvent()) assert [c.text for c in completions] == collection # Multiple words. (Check last only.) completions = completer.get_completions(Document("test txt"), CompleteEvent()) assert [c.text for c in completions] == ["users.txt", "accounts.txt"]
def test_fuzzy_completer(): collection = [ 'migrations.py', 'django_migrations.py', 'django_admin_log.py', 'api_user.doc', 'user_group.doc', 'users.txt', 'accounts.txt', '123.py', 'test123test.py' ] completer = FuzzyWordCompleter(collection) completions = completer.get_completions(Document('txt'), CompleteEvent()) assert [c.text for c in completions] == ['users.txt', 'accounts.txt'] completions = completer.get_completions(Document('djmi'), CompleteEvent()) assert [c.text for c in completions] == ['django_migrations.py', 'django_admin_log.py'] completions = completer.get_completions(Document('mi'), CompleteEvent()) assert [c.text for c in completions] == ['migrations.py', 'django_migrations.py', 'django_admin_log.py'] completions = completer.get_completions(Document('user'), CompleteEvent()) assert [c.text for c in completions] == ['user_group.doc', 'users.txt', 'api_user.doc'] completions = completer.get_completions(Document('123'), CompleteEvent()) assert [c.text for c in completions] == ['123.py', 'test123test.py'] completions = completer.get_completions(Document('miGr'), CompleteEvent()) assert [c.text for c in completions] == ['migrations.py', 'django_migrations.py',]
def test_fuzzy_completer(): collection = [ 'migrations.py', 'django_migrations.py', 'django_admin_log.py', 'api_user.doc', 'user_group.doc', 'users.txt', 'accounts.txt', '123.py', 'test123test.py' ] completer = FuzzyWordCompleter(collection) completions = completer.get_completions(Document('txt'), CompleteEvent()) assert [c.text for c in completions] == ['users.txt', 'accounts.txt'] completions = completer.get_completions(Document('djmi'), CompleteEvent()) assert [c.text for c in completions ] == ['django_migrations.py', 'django_admin_log.py'] completions = completer.get_completions(Document('mi'), CompleteEvent()) assert [c.text for c in completions] == [ 'migrations.py', 'django_migrations.py', 'django_admin_log.py' ] completions = completer.get_completions(Document('user'), CompleteEvent()) assert [c.text for c in completions ] == ['user_group.doc', 'users.txt', 'api_user.doc'] completions = completer.get_completions(Document('123'), CompleteEvent()) assert [c.text for c in completions] == ['123.py', 'test123test.py'] completions = completer.get_completions(Document('miGr'), CompleteEvent()) assert [c.text for c in completions] == [ 'migrations.py', 'django_migrations.py', ]
def test_fuzzy_completer(): collection = [ 'migrations.py', 'django_migrations.py', 'django_admin_log.py', 'api_user.doc', 'user_group.doc', 'users.txt', 'accounts.txt', '123.py', 'test123test.py' ] completer = FuzzyWordCompleter(collection) completions = completer.get_completions(Document('txt'), CompleteEvent()) assert [c.text for c in completions] == ['users.txt', 'accounts.txt'] completions = completer.get_completions(Document('djmi'), CompleteEvent()) assert [c.text for c in completions ] == ['django_migrations.py', 'django_admin_log.py'] completions = completer.get_completions(Document('mi'), CompleteEvent()) assert [c.text for c in completions] == [ 'migrations.py', 'django_migrations.py', 'django_admin_log.py' ] completions = completer.get_completions(Document('user'), CompleteEvent()) assert [c.text for c in completions ] == ['user_group.doc', 'users.txt', 'api_user.doc'] completions = completer.get_completions(Document('123'), CompleteEvent()) assert [c.text for c in completions] == ['123.py', 'test123test.py'] completions = completer.get_completions(Document('miGr'), CompleteEvent()) assert [c.text for c in completions] == [ 'migrations.py', 'django_migrations.py', ] # Multiple words ending with space. (Accept all options) completions = completer.get_completions(Document('test '), CompleteEvent()) assert [c.text for c in completions] == collection # Multiple words. (Check last only.) completions = completer.get_completions(Document('test txt'), CompleteEvent()) assert [c.text for c in completions] == ['users.txt', 'accounts.txt']
class FirstWordFuzzyWordCompleter(Completer): def __init__(self, words: Union[List[str], Callable[[], List[str]]], meta_dict: Optional[Dict[str, str]] = None, WORD: bool = False) -> None: self.words = words self.meta_dict = meta_dict or {} self.WORD = WORD self.fuzzy_word_completer = FuzzyWordCompleter(words=self.words, WORD=self.WORD) def get_completions(self, document: Document, complete_event: CompleteEvent) -> Iterable[Completion]: pattern = re.compile(r"^\w*$") if not pattern.match(document.text.strip()): return [] return self.fuzzy_word_completer.get_completions( document, complete_event)
def test_fuzzy_completer(): collection = [ 'migrations.py', 'django_migrations.py', 'django_admin_log.py', 'api_user.doc', 'user_group.doc', 'users.txt', 'accounts.txt', '123.py', 'test123test.py' ] completer = FuzzyWordCompleter(collection) completions = completer.get_completions(Document('txt'), CompleteEvent()) assert [c.text for c in completions] == ['users.txt', 'accounts.txt'] completions = completer.get_completions(Document('djmi'), CompleteEvent()) assert [c.text for c in completions] == ['django_migrations.py', 'django_admin_log.py'] completions = completer.get_completions(Document('mi'), CompleteEvent()) assert [c.text for c in completions] == ['migrations.py', 'django_migrations.py', 'django_admin_log.py'] completions = completer.get_completions(Document('user'), CompleteEvent()) assert [c.text for c in completions] == ['user_group.doc', 'users.txt', 'api_user.doc'] completions = completer.get_completions(Document('123'), CompleteEvent()) assert [c.text for c in completions] == ['123.py', 'test123test.py'] completions = completer.get_completions(Document('miGr'), CompleteEvent()) assert [c.text for c in completions] == ['migrations.py', 'django_migrations.py',] # Multiple words ending with space. (Accept all options) completions = completer.get_completions(Document('test '), CompleteEvent()) assert [c.text for c in completions] == collection # Multiple words. (Check last only.) completions = completer.get_completions(Document('test txt'), CompleteEvent()) assert [c.text for c in completions] == ['users.txt', 'accounts.txt']