import vim import json import shlex import time import threading import queue import traceback import sys sys.path.insert(0, path.join(dirname(__file__), '3rd')) from ncm2_pyclang import args_from_cmake, args_from_clang_complete from clang import cindex from clang.cindex import CodeCompletionResult, CompletionString, SourceLocation, Cursor, File, Diagnostic logger = getLogger(__name__) class ErrTaskCancel(Exception): pass class Source(Ncm2Source): def __init__(self, nvim): Ncm2Source.__init__(self, nvim) library_path = nvim.vars['ncm2_pyclang#library_path'] if path.isdir(library_path): cindex.Config.set_library_path(library_path) elif path.isfile(library_path): cindex.Config.set_library_file(library_path)
def wrap(): def snipmate_text(txt): txt = txt.replace('\\', '\\\\') txt = txt.replace('$', r'\$') txt = txt.replace('{', r'\{') txt = txt.replace('}', r'\}') txt = txt.replace(':', r'\:') txt = txt.replace('`', r'\`') return txt def snipmate_placeholder(num, txt=''): if txt: # : doesn't work in placeholder txt = snipmate_text(txt) return '${%s:%s}' % (num, txt) else: return '${%s}' % (num) def to_snipmate(ast): txt = '' for t, ele in ast: if t == 'text': txt += snipmate_text(ele) elif t == 'tabstop': txt += "${%s}" % ele elif t == 'placeholder': tab, ph = ele txt += "${%s:%s}" % (tab, to_snipmate(ph)) elif t == 'choice': # snipmate doesn't support choices, replace it with placeholder tab, opts = ele txt += "${%s:%s}" % (tab, snipmate_text(opts[0])) return txt from ncm2_core import ncm2_core from ncm2 import getLogger import vim from ncm2_lsp_snippet.parser import Parser import ncm2_lsp_snippet.utils as lsp_utils import re import json logger = getLogger(__name__) vim.command('call ncm2_snipmate#init()') old_formalize = ncm2_core.match_formalize old_decorate = ncm2_core.matches_decorate parser = Parser() # convert lsp snippet into snipmate snippet def formalize(ctx, item): item = old_formalize(ctx, item) item = lsp_utils.match_formalize(ctx, item) ud = item['user_data'] if not ud['is_snippet']: return item if ud['snippet'] == '': return item try: ast = parser.get_ast(ud['snippet']) snipmate = to_snipmate(ast) if snipmate: ud['snipmate_snippet'] = snipmate ud['is_snippet'] = 1 else: ud['is_snippet'] = 0 except: ud['is_snippet'] = 0 logger.exception("ncm2_lsp_snippet failed parsing item %s", item) return item # add [+] mark for snippets def decorate(data, matches): matches = old_decorate(data, matches) has_snippet = False for m in matches: ud = m['user_data'] if not ud.get('is_snippet', False): continue has_snippet = True if not has_snippet: return matches for m in matches: ud = m['user_data'] if ud.get('is_snippet', False): # [+] sign indicates that this completion item is # expandable if ud.get('ncm2_snipmate_auto', False): m['menu'] = '(+) ' + m['menu'] else: m['menu'] = '[+] ' + m['menu'] else: m['menu'] = '[ ] ' + m['menu'] return matches ncm2_core.matches_decorate = decorate ncm2_core.match_formalize = formalize
# -*- coding: utf-8 -*- """ R Source for Neovim Completion Manager by Gabriel Alcaras """ from neovim.api import NvimError from ncm2 import getLogger, Ncm2Source # pylint: disable=E0401 from omnils import Matches # pylint: disable=E0401 LOGGER = getLogger(__name__) class Rsource(Ncm2Source): # pylint: disable=too-few-public-methods """Base for R Source completion""" def __init__(self, nvim): super(Rsource, self).__init__(nvim) self.matches = Matches() self._settings = dict() try: settings = dict() settings['col1_len'] = self.nvim.eval('g:ncm_r_column1_length') settings['col2_len'] = self.nvim.eval('g:ncm_r_column2_length') settings['col_layout'] = self.nvim.eval('g:ncm_r_column_layout') settings['filetype'] = self.nvim.eval('&filetype') settings['nvimr_id'] = ''
# -*- coding: utf-8 -*- import vim from ncm2 import Ncm2Source, getLogger from subprocess import check_output logger = getLogger(__name__) class Source(Ncm2Source): def __init__(self, nvim): super(Source, self).__init__(nvim) def on_complete(self, ctx): command = vim.call('tmuxcomplete#getcommand', '', 'words') words = check_output(['sh', '-c', command] ).decode('utf-8').splitlines() matches = [{'word': x} for x in words] self.complete(ctx, ctx['startccol'], matches) source = Source(vim) on_complete = source.on_complete