def _update_candidates(self) -> bool:
    if (not self._denite):
        return False
    [self._is_async, pattern, statuses, self._entire_len, self._candidates] = self._denite.filter_candidates(self._context)
    prev_displayed_texts = self._displayed_texts
    self._update_displayed_texts()
    prev_matched_pattern = self._matched_pattern
    self._matched_pattern = pattern
    prev_statusline_sources = self._statusline_sources
    self._statusline_sources = ' '.join(statuses)
    if self._is_async:
        self._start_timer('update_candidates')
    else:
        self._stop_timer('update_candidates')
    updated = ((self._displayed_texts != prev_displayed_texts) or (self._matched_pattern != prev_matched_pattern) or (self._statusline_sources != prev_statusline_sources))
    if updated:
        self._updated = True
        self._start_timer('update_buffer')
    if (self._context['search'] and self._context['input']):
        self._vim.call('setreg', '/', self._context['input'])
    return self._updated
def _update_candidates(self) -> bool:
    if (not self._denite):
        return False
    [self._is_async, pattern, statuses, self._entire_len, self._candidates] = self._denite.filter_candidates(self._context)
    prev_displayed_texts = self._displayed_texts
    self._update_displayed_texts()
    prev_matched_pattern = self._matched_pattern
    self._matched_pattern = pattern
    prev_statusline_sources = self._statusline_sources
    self._statusline_sources = ' '.join(statuses)
    if self._is_async:
        self._start_timer('update_candidates')
    else:
        self._stop_timer('update_candidates')
    updated = ((self._displayed_texts != prev_displayed_texts) or (self._matched_pattern != prev_matched_pattern) or (self._statusline_sources != prev_statusline_sources))
    if updated:
        self._updated = True
        self._start_timer('update_buffer')
    if (self._context['search'] and self._context['input']):
        self._vim.call('setreg', '/', self._context['input'])
    return self._updated