def gather_results(self, context): results = [] for source_name, source in self.itersource(context): try: if source.disabled_syntaxes and 'syntax_names' not in context: context['syntax_names'] = get_syn_names(self.__vim) ctx = copy.deepcopy(context) charpos = source.get_complete_position(ctx) if charpos >= 0 and source.is_bytepos: charpos = bytepos2charpos( ctx['encoding'], ctx['input'], charpos) ctx['complete_str'] = ctx['input'][charpos:] ctx['complete_position'] = charpos2bytepos( ctx['encoding'], ctx['input'], charpos) ctx['max_abbr_width'] = min(source.max_abbr_width, ctx['max_abbr_width']) ctx['max_menu_width'] = min(source.max_menu_width, ctx['max_menu_width']) if ctx['max_abbr_width'] > 0: ctx['max_abbr_width'] = max(20, ctx['max_abbr_width']) if ctx['max_menu_width'] > 0: ctx['max_menu_width'] = max(10, ctx['max_menu_width']) if charpos < 0 or self.is_skip(ctx, source.disabled_syntaxes, source.min_pattern_length, source.max_pattern_length, source.input_pattern): # Skip continue # Gathering self.profile_start(ctx, source.name) ctx['candidates'] = source.gather_candidates(ctx) self.profile_end(source.name) if 'candidates' not in ctx or not ctx['candidates']: continue if ctx['candidates'] and isinstance(ctx['candidates'][0], str): # Convert to dict ctx['candidates'] = [{'word': x} for x in ctx['candidates']] # Filtering ignorecase = ctx['ignorecase'] smartcase = ctx['smartcase'] camelcase = ctx['camelcase'] # Set ignorecase if (smartcase or camelcase) and re.search(r'[A-Z]', ctx['complete_str']): ctx['ignorecase'] = 0 for filter in [self.__filters[x] for x in source.matchers + source.sorters + source.converters if x in self.__filters]: try: self.profile_start(ctx, filter.name) ctx['candidates'] = filter.filter(ctx) self.profile_end(filter.name) except: self.__filter_errors[filter.name] += 1 if self.__source_errors[filter.name] > 2: error(self.__vim, 'Too many errors from "%s". ' 'This filter is disabled until Neovim ' 'is restarted.' % filter.name) self.__filters.pop(filter.name) continue error_tb(self.__vim, 'Could not filter using: %s' % filter) ctx['ignorecase'] = ignorecase # On post filter if hasattr(source, 'on_post_filter'): ctx['candidates'] = source.on_post_filter(ctx) # Set default menu and icase mark = source.mark + ' ' for candidate in ctx['candidates']: candidate['icase'] = 1 if source.mark != '' \ and candidate.get('menu', '').find(mark) != 0: candidate['menu'] = mark + candidate.get('menu', '') results.append({ 'name': source_name, 'source': source, 'context': ctx, }) except: self.__source_errors[source_name] += 1 if self.__source_errors[source_name] > 2: error(self.__vim, 'Too many errors from "%s". ' 'This source is disabled until Neovim ' 'is restarted.' % source_name) self.__sources.pop(source_name) continue error_tb(self.__vim, 'Could not get completions from: %s' % source_name) return results
def gather_results(self, context): results = [] for source_name, source in list(self.itersource(context)): try: if source.disabled_syntaxes and 'syntax_names' not in context: context['syntax_names'] = get_syn_names(self.__vim) ctx = copy.deepcopy(context) charpos = source.get_complete_position(ctx) if charpos >= 0 and source.is_bytepos: charpos = bytepos2charpos(ctx['encoding'], ctx['input'], charpos) ctx['complete_str'] = ctx['input'][charpos:] ctx['complete_position'] = charpos2bytepos( ctx['encoding'], ctx['input'], charpos) ctx['max_abbr_width'] = min(source.max_abbr_width, ctx['max_abbr_width']) ctx['max_menu_width'] = min(source.max_menu_width, ctx['max_menu_width']) if ctx['max_abbr_width'] > 0: ctx['max_abbr_width'] = max(20, ctx['max_abbr_width']) if ctx['max_menu_width'] > 0: ctx['max_menu_width'] = max(10, ctx['max_menu_width']) if charpos < 0 or self.is_skip(ctx, source.disabled_syntaxes, source.min_pattern_length, source.max_pattern_length, source.input_pattern): # Skip continue # Gathering self.profile_start(ctx, source.name) ctx['candidates'] = source.gather_candidates(ctx) self.profile_end(source.name) if 'candidates' not in ctx or not ctx['candidates']: continue if ctx['candidates'] and isinstance(ctx['candidates'][0], str): # Convert to dict ctx['candidates'] = [{ 'word': x } for x in ctx['candidates']] # Filtering ignorecase = ctx['ignorecase'] smartcase = ctx['smartcase'] camelcase = ctx['camelcase'] # Set ignorecase if (smartcase or camelcase) and re.search( r'[A-Z]', ctx['complete_str']): ctx['ignorecase'] = 0 for filter in [ self.__filters[x] for x in source.matchers + source.sorters + source.converters if x in self.__filters ]: try: self.profile_start(ctx, filter.name) ctx['candidates'] = filter.filter(ctx) self.profile_end(filter.name) except Exception: self.__filter_errors[filter.name] += 1 if self.__source_errors[filter.name] > 2: error( self.__vim, 'Too many errors from "%s". ' 'This filter is disabled until Neovim ' 'is restarted.' % filter.name) self.__ignored_filters.add(filter.path) self.__filters.pop(filter.name) continue error_tb(self.__vim, 'Could not filter using: %s' % filter) ctx['ignorecase'] = ignorecase # On post filter if hasattr(source, 'on_post_filter'): ctx['candidates'] = source.on_post_filter(ctx) # Set default menu and icase mark = source.mark + ' ' for candidate in ctx['candidates']: candidate['icase'] = 1 if source.mark != '' \ and candidate.get('menu', '').find(mark) != 0: candidate['menu'] = mark + candidate.get('menu', '') results.append({ 'name': source_name, 'source': source, 'context': ctx, }) except Exception: self.__source_errors[source_name] += 1 if self.__source_errors[source_name] > 2: error( self.__vim, 'Too many errors from "%s". ' 'This source is disabled until Neovim ' 'is restarted.' % source_name) self.__ignored_sources.add(source.path) self.__sources.pop(source_name) continue error_tb(self.__vim, 'Could not get completions from: %s' % source_name) return results
def gather_results(self, context): # sources = ['buffer', 'neosnippet'] # sources = ['buffer'] results = [] for source_name, source in self.itersource(context): if source.disabled_syntaxes and 'syntax_name' not in context: context['syntax_name'] = get_syn_name(self.__vim) cont = copy.deepcopy(context) charpos = source.get_complete_position(cont) if charpos >= 0 and source.is_bytepos: charpos = bytepos2charpos( self.__encoding, cont['input'], charpos) cont['complete_str'] = cont['input'][charpos:] cont['complete_position'] = charpos2bytepos( self.__encoding, cont['input'], charpos) cont['max_abbr_width'] = min(source.max_abbr_width, cont['max_abbr_width']) cont['max_menu_width'] = min(source.max_menu_width, cont['max_menu_width']) if cont['max_abbr_width'] > 0: cont['max_abbr_width'] = max(20, cont['max_abbr_width']) if cont['max_menu_width'] > 0: cont['max_menu_width'] = max(10, cont['max_menu_width']) # self.debug(source.rank) # self.debug(source_name) # self.debug(cont['input']) # self.debug(charpos) # self.debug(cont['complete_position']) # self.debug(cont['complete_str']) if charpos < 0 or self.is_skip(cont, source.disabled_syntaxes, source.min_pattern_length, source.max_pattern_length, source.input_pattern): # Skip continue results.append({ 'name': source_name, 'source': source, 'context': cont, }) for result in results: context = result['context'] source = result['source'] # self.debug(source.name) self.profile_start(context, source.name) context['candidates'] = source.gather_candidates(context) self.profile_end(source.name) if context['candidates'] and isinstance( context['candidates'][0], str): # Convert to dict context['candidates'] = [{'word': x} for x in context['candidates']] ignorecase = context['ignorecase'] smartcase = context['smartcase'] camelcase = context['camelcase'] try: # Set ignorecase if (smartcase or camelcase) and re.search( r'[A-Z]', context['complete_str']): context['ignorecase'] = 0 for filter in [self.__filters[x] for x in source.matchers + source.sorters + source.converters if x in self.__filters]: self.profile_start(context, filter.name) context['candidates'] = filter.filter(context) self.profile_end(filter.name) finally: context['ignorecase'] = ignorecase # self.debug(context['candidates']) # On post filter if hasattr(source, 'on_post_filter'): context['candidates'] = source.on_post_filter(context) candidates = context['candidates'] # Set default menu and icase mark = source.mark + ' ' for candidate in candidates: candidate['icase'] = 1 if source.mark != '' and candidate.get( 'menu', '').find(mark) != 0: candidate['menu'] = mark + candidate.get('menu', '') # self.debug(context['candidates']) return results