.. _root_api_app_autocompleter:

AutoCompleter
=====================

``AutoCompleter`` — это компонент, отвечающий за интерактивное автодополнение команд. Он улучшает пользовательский опыт, предлагая подсказки и завершая ввод на основе истории команд, что ускоряет работу и снижает вероятность опечаток.

-----

Инициализация
-------------

.. code-block:: python

  __init__(self,
           history_filename: str | None = None,
           autocomplete_button: str = "tab",
           command_highlighting: bool = True,
           auto_suggestions: bool = True) -> None:

Создаёт и настраивает экземпляр ``AutoCompleter``.

* ``history_filename``: Имя файла для сохранения истории команд. Если указано, история будет сохраняться между сессиями. При значении ``None`` история хранится только в контексте сессии.
* ``autocomplete_button``: Клавиша, активирующая автодополнение. По умолчанию — **Tab**.
* ``command_highlighting``: Если True, то в реальном времени при вводе команды она будет подсвечиваться: зелёным, если такой триггер существует и красный, если нет.
* ``auto_suggestions``: Если True, то дополнение до раннее введённой команды будет сразу отображаться светло-серым в строке ввода.

-----

Назначение и возможности
-------------------------

Основные возможности ``AutoCompleter``:

*   **Автодополнение по истории**: При нажатии клавиши автодополнения (по умолчанию **Tab**) система ищет в истории команды, начинающиеся с уже введённого текста.

*   **Общий префикс**: Если найдено несколько команд с общим префиксом, будет подставлена только общая часть. Например, для команд ``show_users`` и ``show_profile`` при вводе ``sho`` и нажатии **Tab** ввод дополнится до ``show_``.

*   **Постоянная история**: Если указан ``history_filename``, история команд сохраняется в файл при выходе и загружается при следующем запуске. Это делает автодополнение со временем «умнее».

*   **Настройка клавиши**: Клавишу автодополнения можно изменить с помощью параметра ``autocomplete_button``.
 
-----

Пример использования
--------------------

``AutoCompleter`` передаётся как аргумент при инициализации `App`.

.. literalinclude:: ../../../code_snippets/autocompleter/snippet.py
    :language: python
    :linenos:
