def _get_results(self, context): is_async = False results = [] for cnt, parent in enumerate(self._parents): if cnt in self._prev_results: # Use previous result results += copy.deepcopy(self._prev_results[cnt]) else: result = parent.merge_results(context) is_async = is_async or result[0] if not result[0]: self._prev_results[cnt] = result[1] results += result[1] return [is_async, results]
def _merge_results(self, context): use_prev = (context['input'] == self._prev_input and context['next_input'] == self._prev_next_input and context['event'] != 'Manual') if not use_prev: self._prev_merged_results = {} is_async = False merged_results = [] for cnt, parent in enumerate(self._parents): if use_prev and cnt in self._prev_merged_results: # Use previous result merged_results += copy.deepcopy( self._prev_merged_results[cnt]) else: result = parent.merge_results(context) is_async = is_async or result[0] if not result[0]: self._prev_merged_results[cnt] = result[1] merged_results += result[1] self._prev_input = context['input'] self._prev_next_input = context['next_input'] if not merged_results: return (is_async, -1, []) complete_position = min(x['complete_position'] for x in merged_results) all_candidates = [] for result in sorted(merged_results, key=lambda x: x['rank'], reverse=True): candidates = result['candidates'] prefix = context['input'][ complete_position:result['complete_position']] if prefix != '': for candidate in candidates: # Add prefix candidate['word'] = prefix + candidate['word'] all_candidates += candidates # self.debug(candidates) max_list = self._vim.call('deoplete#custom#_get_option', 'max_list') if max_list > 0: all_candidates = all_candidates[: max_list] return (is_async, complete_position, all_candidates)
def _merge_results(self, context): use_prev = (context['input'] == self._prev_input and context['next_input'] == self._prev_next_input and context['event'] != 'Manual') if not use_prev: self._prev_merged_results = {} is_async = False merged_results = [] for cnt, parent in enumerate(self._parents): if use_prev and cnt in self._prev_merged_results: # Use previous result merged_results += copy.deepcopy(self._prev_merged_results[cnt]) else: result = parent.merge_results(context) is_async = is_async or result[0] if not result[0]: self._prev_merged_results[cnt] = result[1] merged_results += result[1] self._prev_input = context['input'] self._prev_next_input = context['next_input'] if not merged_results: return (is_async, -1, []) complete_position = min(x['complete_position'] for x in merged_results) all_candidates = [] for result in sorted(merged_results, key=lambda x: x['rank'], reverse=True): candidates = result['candidates'] prefix = context['input'][ complete_position:result['complete_position']] if prefix != '': for candidate in candidates: # Add prefix candidate['word'] = prefix + candidate['word'] all_candidates += candidates # self.debug(candidates) max_list = self._vim.call('deoplete#custom#_get_option', 'max_list') if max_list > 0: all_candidates = all_candidates[:max_list] return (is_async, complete_position, all_candidates)
def _get_results(self, context: UserContext) -> typing.List[typing.Any]: is_async = False needs_poll = False results: typing.List[Candidates] = [] for cnt, parent in enumerate(self._parents): if cnt in self._prev_results: # Use previous result results += copy.deepcopy( self._prev_results[cnt]) # type: ignore else: result = parent.merge_results(context) is_async = is_async or result[0] needs_poll = needs_poll or result[1] if not result[0]: self._prev_results[cnt] = result[2] results += result[2] return [is_async, needs_poll, results]