Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Internal
* Add `.txt` to text files without file extensions.
* Move `test` directory to `mycli_test`.
* Ignore recent refactoring move commits in `git-blame`.
* Recast `cli_is_multiline()` as `repl_is_multiline()`.


v2.28.0 (2026/10/02)
Expand Down
4 changes: 2 additions & 2 deletions mycli/main_modes/repl.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
from mycli.packages.execution.sql_execute import SQLExecute
from mycli.packages.prompt_toolkit.history import FRECENCY_HISTORY_ENTRIES, FRECENCY_REFRESH_INTERVAL, FileHistoryWithTimestamp
from mycli.packages.prompt_toolkit.key_bindings import mycli_bindings
from mycli.packages.prompt_toolkit.multiline import cli_is_multiline
from mycli.packages.prompt_toolkit.multiline import repl_is_multiline
from mycli.packages.prompt_toolkit.style import style_factory_ptoolkit
from mycli.packages.prompt_toolkit.toolbar import create_toolbar_tokens_func, get_vi_mode
from mycli.packages.pygments.mycli_lexer import MyCliLexer
Expand Down Expand Up @@ -781,7 +781,7 @@ def _build_prompt_session(
history=history,
auto_suggest=ThreadedAutoSuggest(AutoSuggestFromHistory()),
complete_while_typing=complete_while_typing_filter,
multiline=cli_is_multiline(mycli),
multiline=repl_is_multiline(mycli),
style=style_factory_ptoolkit(mycli.syntax_style, mycli.cli_style),
include_default_pygments_style=False,
key_bindings=key_bindings,
Expand Down
2 changes: 1 addition & 1 deletion mycli/packages/prompt_toolkit/multiline.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
)


def cli_is_multiline(mycli) -> Filter:
def repl_is_multiline(mycli) -> Filter:
@Condition
def cond():
if not mycli.multi_line:
Expand Down
42 changes: 21 additions & 21 deletions mycli_test/pytests/test_clibuffer.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import pytest

from mycli.packages.prompt_toolkit import multiline as clibuffer
from mycli.packages.prompt_toolkit import multiline


@dataclass
Expand Down Expand Up @@ -38,8 +38,8 @@ def make_app_for_text(text: str) -> tuple[SimpleNamespace, DummyLayout]:
def test_multiline_exception_handles_favorite_queries_only_after_blank_line(command: str) -> None:
text = f'{command} demo select 1; select 2'

assert clibuffer._multiline_exception(text) is False
assert clibuffer._multiline_exception(f'{text}\n') is True
assert multiline._multiline_exception(text) is False
assert multiline._multiline_exception(f'{text}\n') is True


@pytest.mark.parametrize(
Expand All @@ -63,22 +63,22 @@ def test_multiline_exception_detects_commands_terminators_and_plain_sql(
text: str,
expected: bool,
) -> None:
monkeypatch.setattr(clibuffer.iocommands, 'get_current_delimiter', lambda: '//')
monkeypatch.setattr(clibuffer, 'CASE_SENSITIVE_COMMANDS', {'Camel'})
monkeypatch.setattr(clibuffer, 'CASE_INSENSITIVE_COMMANDS', {'help', 'exit'})
monkeypatch.setattr(multiline.iocommands, 'get_current_delimiter', lambda: '//')
monkeypatch.setattr(multiline, 'CASE_SENSITIVE_COMMANDS', {'Camel'})
monkeypatch.setattr(multiline, 'CASE_INSENSITIVE_COMMANDS', {'help', 'exit'})

assert clibuffer._multiline_exception(text) is expected
assert multiline._multiline_exception(text) is expected


def test_cli_is_multiline_returns_false_when_multiline_mode_is_disabled(monkeypatch) -> None:
def test_repl_is_multiline_returns_false_when_multiline_mode_is_disabled(monkeypatch) -> None:
mycli = SimpleNamespace(multi_line=False)

def fail_get_app() -> None:
raise AssertionError('get_app() should not be called when multiline mode is disabled')

monkeypatch.setattr(clibuffer, 'get_app', fail_get_app)
monkeypatch.setattr(multiline, 'get_app', fail_get_app)

multiline_filter = clibuffer.cli_is_multiline(mycli)
multiline_filter = multiline.repl_is_multiline(mycli)

assert multiline_filter() is False

Expand All @@ -88,11 +88,11 @@ def test_multiline_exception_recognizes_non_backslashed_special_commands_with_ge
monkeypatch,
text: str,
) -> None:
monkeypatch.setattr(clibuffer.iocommands, 'get_current_delimiter', lambda: ';')
monkeypatch.setattr(clibuffer, 'CASE_SENSITIVE_COMMANDS', {'Camel'})
monkeypatch.setattr(clibuffer, 'CASE_INSENSITIVE_COMMANDS', {'help', 'exit'})
monkeypatch.setattr(multiline.iocommands, 'get_current_delimiter', lambda: ';')
monkeypatch.setattr(multiline, 'CASE_SENSITIVE_COMMANDS', {'Camel'})
monkeypatch.setattr(multiline, 'CASE_INSENSITIVE_COMMANDS', {'help', 'exit'})

assert clibuffer._multiline_exception(text) is True
assert multiline._multiline_exception(text) is True


@pytest.mark.parametrize(
Expand All @@ -102,20 +102,20 @@ def test_multiline_exception_recognizes_non_backslashed_special_commands_with_ge
('help select', False),
),
)
def test_cli_is_multiline_uses_buffer_text_when_multiline_mode_is_enabled(
def test_repl_is_multiline_uses_buffer_text_when_multiline_mode_is_enabled(
monkeypatch,
text: str,
expected: bool,
) -> None:
app, layout = make_app_for_text(text)
mycli = SimpleNamespace(multi_line=True)

monkeypatch.setattr(clibuffer, 'get_app', lambda: app)
monkeypatch.setattr(clibuffer.iocommands, 'get_current_delimiter', lambda: ';')
monkeypatch.setattr(clibuffer, 'CASE_SENSITIVE_COMMANDS', {'Camel'})
monkeypatch.setattr(clibuffer, 'CASE_INSENSITIVE_COMMANDS', {'help'})
monkeypatch.setattr(multiline, 'get_app', lambda: app)
monkeypatch.setattr(multiline.iocommands, 'get_current_delimiter', lambda: ';')
monkeypatch.setattr(multiline, 'CASE_SENSITIVE_COMMANDS', {'Camel'})
monkeypatch.setattr(multiline, 'CASE_INSENSITIVE_COMMANDS', {'help'})

multiline_filter = clibuffer.cli_is_multiline(mycli)
multiline_filter = multiline.repl_is_multiline(mycli)

assert multiline_filter() is expected
assert layout.requested_names == [clibuffer.DEFAULT_BUFFER]
assert layout.requested_names == [multiline.DEFAULT_BUFFER]
2 changes: 1 addition & 1 deletion mycli_test/pytests/test_main_modes_repl.py
Original file line number Diff line number Diff line change
Expand Up @@ -1514,7 +1514,7 @@ def fake_prompt_session(**kwargs: Any) -> FakePromptSession:

monkeypatch.setattr(repl_mode, 'PromptSession', fake_prompt_session)
monkeypatch.setattr(repl_mode, 'style_factory_ptoolkit', lambda *args, **kwargs: 'style')
monkeypatch.setattr(repl_mode, 'cli_is_multiline', lambda mycli: False)
monkeypatch.setattr(repl_mode, 'repl_is_multiline', lambda mycli: False)

def fake_toolbar_tokens(mycli: Any, show_help: Any, fmt: str, custom_toolbar: Any) -> str:
toolbar_help.append(show_help())
Expand Down
Loading