コード例 #1
0
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)
コード例 #2
0
ファイル: ncm2_snipmate.py プロジェクト: ncm2/ncm2-snipmate
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
コード例 #3
0
# -*- 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'] = ''
コード例 #4
0
# -*- 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