Limit the public interface of Completer.
Only schedule_completion_update and selection_changed are used externally, so mark the rest of the API as private.
This commit is contained in:
parent
aedf5b930a
commit
e5da179ebf
@ -61,25 +61,25 @@ class Completer(QObject):
|
||||
self._timer = QTimer()
|
||||
self._timer.setSingleShot(True)
|
||||
self._timer.setInterval(0)
|
||||
self._timer.timeout.connect(self.update_completion)
|
||||
self._timer.timeout.connect(self._update_completion)
|
||||
self._cursor_part = None
|
||||
self._last_cursor_pos = None
|
||||
self._last_text = None
|
||||
|
||||
objreg.get('config').changed.connect(self.on_auto_open_changed)
|
||||
self.handle_signal_connections()
|
||||
objreg.get('config').changed.connect(self._on_auto_open_changed)
|
||||
self._handle_signal_connections()
|
||||
self._cmd.clear_completion_selection.connect(
|
||||
self.handle_signal_connections)
|
||||
self._handle_signal_connections)
|
||||
|
||||
def __repr__(self):
|
||||
return utils.get_repr(self)
|
||||
|
||||
@config.change_filter('completion', 'auto-open')
|
||||
def on_auto_open_changed(self):
|
||||
self.handle_signal_connections()
|
||||
def _on_auto_open_changed(self):
|
||||
self._handle_signal_connections()
|
||||
|
||||
@pyqtSlot()
|
||||
def handle_signal_connections(self):
|
||||
def _handle_signal_connections(self):
|
||||
self._connect_signals(config.get('completion', 'auto-open'))
|
||||
|
||||
def _connect_signals(self, connect=True):
|
||||
@ -95,7 +95,7 @@ class Completer(QObject):
|
||||
"""
|
||||
connections = [
|
||||
(self._cmd.update_completion, self.schedule_completion_update),
|
||||
(self._cmd.textChanged, self.on_text_edited),
|
||||
(self._cmd.textChanged, self._on_text_edited),
|
||||
]
|
||||
|
||||
if connect and not self._signals_connected:
|
||||
@ -121,7 +121,7 @@ class Completer(QObject):
|
||||
if not config.get('completion', 'auto-open'):
|
||||
connected = self._connect_signals(True)
|
||||
if connected:
|
||||
self.update_completion()
|
||||
self._update_completion()
|
||||
|
||||
def _model(self):
|
||||
"""Convenience method to get the current completion model."""
|
||||
@ -265,7 +265,7 @@ class Completer(QObject):
|
||||
data = model.data(indexes[0])
|
||||
if data is None:
|
||||
return
|
||||
parts = self.split()
|
||||
parts = self._split()
|
||||
try:
|
||||
needs_quoting = cmdutils.cmd_dict[parts[0]].maxsplit is None
|
||||
except KeyError:
|
||||
@ -275,11 +275,11 @@ class Completer(QObject):
|
||||
if model.count() == 1 and config.get('completion', 'quick-complete'):
|
||||
# If we only have one item, we want to apply it immediately
|
||||
# and go on to the next part.
|
||||
self.change_completed_part(data, immediate=True)
|
||||
self._change_completed_part(data, immediate=True)
|
||||
else:
|
||||
log.completion.debug("Will ignore next completion update.")
|
||||
self._ignore_change = True
|
||||
self.change_completed_part(data)
|
||||
self._change_completed_part(data)
|
||||
|
||||
@pyqtSlot()
|
||||
def schedule_completion_update(self):
|
||||
@ -299,10 +299,10 @@ class Completer(QObject):
|
||||
self._last_text = self._cmd.text()
|
||||
|
||||
@pyqtSlot()
|
||||
def update_completion(self):
|
||||
def _update_completion(self):
|
||||
"""Check if completions are available and activate them."""
|
||||
self.update_cursor_part()
|
||||
parts = self.split()
|
||||
self._update_cursor_part()
|
||||
parts = self._split()
|
||||
|
||||
log.completion.debug(
|
||||
"Updating completion - prefix {}, parts {}, cursor_part {}".format(
|
||||
@ -354,8 +354,8 @@ class Completer(QObject):
|
||||
if completion.enabled:
|
||||
completion.show()
|
||||
|
||||
def split(self, keep=False):
|
||||
"""Get the text split up in parts.
|
||||
def _split(self, keep=False):
|
||||
"""Get the text _split up in parts.
|
||||
|
||||
Args:
|
||||
keep: Whether to keep special chars and whitespace.
|
||||
@ -381,13 +381,13 @@ class Completer(QObject):
|
||||
return parts
|
||||
|
||||
@pyqtSlot()
|
||||
def update_cursor_part(self):
|
||||
def _update_cursor_part(self):
|
||||
"""Get the part index of the commandline where the cursor is over."""
|
||||
cursor_pos = self._cmd.cursorPosition()
|
||||
snippet = slice(cursor_pos - 1, cursor_pos + 1)
|
||||
spaces = self._cmd.text()[snippet] == ' '
|
||||
cursor_pos -= len(self._cmd.prefix())
|
||||
parts = self.split(keep=True)
|
||||
parts = self._split(keep=True)
|
||||
log.completion.vdebug(
|
||||
"text: {}, parts: {}, cursor_pos after removing prefix '{}': "
|
||||
"{}".format(self._cmd.text(), parts, self._cmd.prefix(),
|
||||
@ -429,7 +429,7 @@ class Completer(QObject):
|
||||
self._cursor_part, spaces))
|
||||
return
|
||||
|
||||
def change_completed_part(self, newtext, immediate=False):
|
||||
def _change_completed_part(self, newtext, immediate=False):
|
||||
"""Change the part we're currently completing in the commandline.
|
||||
|
||||
Args:
|
||||
@ -438,7 +438,7 @@ class Completer(QObject):
|
||||
including a trailing space and we shouldn't continue
|
||||
completing the current item.
|
||||
"""
|
||||
parts = self.split()
|
||||
parts = self._split()
|
||||
log.completion.debug("changing part {} to '{}'".format(
|
||||
self._cursor_part, newtext))
|
||||
try:
|
||||
@ -465,10 +465,10 @@ class Completer(QObject):
|
||||
self._cmd.show_cmd.emit()
|
||||
|
||||
@pyqtSlot()
|
||||
def on_text_edited(self):
|
||||
def _on_text_edited(self):
|
||||
"""Reset _empty_item_idx if text was edited."""
|
||||
self._empty_item_idx = None
|
||||
# We also want to update the cursor part and emit update_completion
|
||||
# We also want to update the cursor part and emit _update_completion
|
||||
# here, but that's already done for us by cursorPositionChanged
|
||||
# anyways, so we don't need to do it twice.
|
||||
|
||||
|
@ -219,7 +219,8 @@ def test_selection_changed(before, newtxt, count, quick_complete, after,
|
||||
selection.indexes = unittest.mock.Mock(return_value=indexes)
|
||||
completion_widget_stub.model = unittest.mock.Mock(return_value=model)
|
||||
_set_cmd_prompt(cmd, before)
|
||||
completer_obj.update_cursor_part()
|
||||
# schedule_completion_update is needed to pick up the cursor position
|
||||
completer_obj.schedule_completion_update()
|
||||
completer_obj.selection_changed(selection, None)
|
||||
model.data.assert_called_with(indexes[0])
|
||||
_validate_cmd_prompt(cmd, after)
|
||||
|
Loading…
Reference in New Issue
Block a user