Пример #1
0
 def do_init(cls, nvim):
     inst = cls(nvim)
     inst.on_init()
     cmd_list = cls.build_interfaces(nvim)
     log.log_info("Defining commands {}", "\n".join(cmd_list))
     cls.__instances__[cls.name] = inst
     return cmd_list
Пример #2
0
    def acid_alternate_file(self, args):
        try:
            src = src_paths(self.nvim)
            path = get(args, 0, self.nvim.funcs.expand("%:p"))
            log_info("Finding alternate file for {}", path)
            root_path = self.nvim.funcs.getcwd()
            rel_path = os.path.relpath(path, start=root_path).split('/')

            if rel_path[0] in src:
                paths = alt_paths(
                    rel_path,
                    test_paths(self.nvim),
                    root_path,
                    lambda f: '{}_test'.format(f),
                )
            else:
                paths = alt_paths(rel_path, src, root_path,
                                  lambda f: "_".join(f.split('_')[:-1]), 'src')
        except Exception as e:
            log_debug("error: {}", e)
            paths = []

        log_debug("paths: {}", paths)

        return list(paths)
Пример #3
0
 def handler(msg, wc, key):
     try:
         nvim.async_call(lambda: nvim.exec_lua(
             "require('acid').callback(...)", msg, async_=True))
         log_info(msg)
     finally:
         if should_finalize(msg):
             finalizer(msg, wc, key)
Пример #4
0
    def prepare_payload(self, *args):
        log.log_info('Evaluating {}'.format(str(args)))

        code = parser.transform(" ".join(args), parser.remove_comment)

        log.log_info('Final code after transform {}'.format(code))

        return {"code": code, "ns": get_acid_ns(self.nvim)}
Пример #5
0
    def send(self, url, data, handler_fn):
        conn = self.get_or_create(url)

        watcher_key = "{}-watcher".format(data['id'])
        conn.watch(watcher_key, {"id": data['id']}, handler_fn(finalize_watch))
        try:
            conn.send(data)
            log.log_info('sent -> {}', str(data))
            return True, ""
        except Exception as e:
            log.log_error('failed to send data: {} -  {}', e, str(data))
            return False, str(e)
Пример #6
0
    def send(self, url, data, handlers):
        conn = self.get_or_create(url)
        log.log_info('sending data -> {}', str(data))

        for handler in handlers:
            handler.pre_send(data)

        try:
            conn.send(data)
        except:
            conn.close()
            del self.sessions[url]
Пример #7
0
    def add_persistent_watch(self, url, handler, matches={}):
        "Adds a callback to all messages in a connection."
        watcher_key = "{}-persistent".format(handler.name)
        conn = self.get_or_create(url)

        if not watcher_key in self.persistent[url]:
            log.log_info('Adding new persisntent watcher fn: {}', handler.name)

            self.persistent[url].add(watcher_key)

            patched_handler = handler.gen_handler(finalize_watch)
            conn.watch(watcher_key, matches, patched_handler)
Пример #8
0
    def acid_command(self, args):
        cmd, *args = args
        log_info(r"Received args for command {}: {}", cmd, args)
        url = formatted_localhost_address(self.nvim)

        if url is None:
            path = current_path(self.nvim)
            echo(self.nvim, "No REPL open")
            log_info("No repl open on path {}".format(path))
            return

        command = self.extensions['commands'].get(cmd.strip())
        command.call(self, self.context(), *args)
Пример #9
0
    def acid_command_meta(self, args):
        cmd, meta_key, *args = args
        log_info(r"Prompting metadata {} for command {} with args {}",
                 meta_key, cmd, args)

        command = self.extensions['commands'].get(cmd.strip())
        if command is None:
            log_warning('Command not found. Aborting!')
            return None

        ret = getattr(command, meta_key)(self.nvim, *args)
        log_info(r"Got {} as a return for {}[{}]".format(ret, cmd, meta_key))
        return ret
Пример #10
0
    def __init__(self, nvim):
        log_handler = new_handler(
            nvim,
            lambda msg, *_: not "changed-namespaces" in msg and log_info(msg),
            lambda *_: False)

        self.nvim = nvim
        self.session_handler = SessionHandler(log_handler)
Пример #11
0
    def add_atomic_watch(self, url, msg_id, handler, matches={}):
        "Adds a callback to a msg_id on a connection."
        watcher_key = "{}-{}-watcher".format(msg_id, handler.name)
        conn = self.get_or_create(url)

        log.log_info(
            'handler -> {}, connection -> {}, matchers -> {}, key -> {}',
            str(handler), str(url), str(matches), str(watcher_key)
            )

        patched_handler = handler.gen_handler(finalize_watch)

        # Avoid side-effects
        matches = matches.copy()
        matches.update({"id": msg_id})

        conn.watch(watcher_key, matches, patched_handler)
        try:
            handler.pre_handle(msg_id, url)
        except Exception as e:
            log.log_error('Err: could not pre-handle -> {}', str(e))
Пример #12
0
 def on_handle(self, msg, *_):
     if not 'state' in msg.get('status', []):
         log_info(msg)
Пример #13
0
    def prepare_payload(self, *args):
        log.log_info('Evaluating {}'.format(str(args)))

        return {"code": " ".join(args), "ns": get_acid_ns(self.nvim)}
Пример #14
0
 def find_fpath(self, args):
     log_info("Finding path")
     return find_file_in_path(nvim, *args)