diff --git a/src/prompt_toolkit/document.py b/src/prompt_toolkit/document.py index c9fbd9a36..382fb93e3 100644 --- a/src/prompt_toolkit/document.py +++ b/src/prompt_toolkit/document.py @@ -457,12 +457,10 @@ def get_word_before_cursor( def _is_word_before_cursor_complete( self, WORD: bool = False, pattern: Pattern[str] | None = None ) -> bool: + if not self.text_before_cursor == "" or self.text_before_cursor[-1:].isspace(): + return True if pattern: return self.find_start_of_previous_word(WORD=WORD, pattern=pattern) is None - else: - return ( - self.text_before_cursor == "" or self.text_before_cursor[-1:].isspace() - ) def find_start_of_previous_word( self, count: int = 1, WORD: bool = False, pattern: Pattern[str] | None = None diff --git a/tests/test_document.py b/tests/test_document.py index d052d537c..f10232a21 100644 --- a/tests/test_document.py +++ b/tests/test_document.py @@ -1,6 +1,7 @@ from __future__ import annotations import pytest +import re from prompt_toolkit.document import Document @@ -67,3 +68,13 @@ def test_translate_index_to_position(document): def test_is_cursor_at_the_end(document): assert Document("hello", 5).is_cursor_at_the_end assert not Document("hello", 4).is_cursor_at_the_end + + +def test_get_word_before_cursor_with_whitespace_and_pattern(): + text = "foobar " + document = Document(text=text, cursor_position=len(text)) + + assert document.get_word_before_cursor() == "" + + _FIND_WORD_RE = re.compile(r"([a-zA-Z0-9_]+|[^a-zA-Z0-9_\s]+)") + assert document.get_word_before_cursor(pattern=_FIND_WORD_RE) == "" \ No newline at end of file