def change_state(self, new_state, payload, *handlers): handlers = list(handlers) handlers.append(self) send(self.session_handler, self.url, handlers, payload) self.current_state = new_state self.current_handler_fn = getattr(self, 'handle_{}'.format(new_state), lambda *args, **kwargs: None)
def eval(self, data, *handlers): address = localhost(self.nvim) if address is None: self.nvim.command('echom "No repl open"') return handlers = [self.get_handler(i) for i in handlers] if not 'op' in data: data.update({'op': 'eval'}) if not 'ns' in data: data.update({'ns': get_acid_ns(self.nvim)}) send(self.sessions, address, handlers, data)
def command(self, data, handlers, url): acid_session = self.nvim.vars.get('acid_current_session') if get_customization_variable(self.nvim, 'acid_log_messages', 0): handlers = (i for i in (*handlers, self.get_handler('Log').configure( **self.context()))) if not 'op' in data: data.update({'op': 'eval'}) if acid_session: data.update({'session': acid_session}) if url not in self.sessions.sessions and url not in self.fired_urls: self.nvim.command("doautocmd User AcidPreConnectNrepl") self.fired_urls.add(url) send(self.sessions, url, handlers, data)
def acid_eval(self, data): nvim = self.nvim payload = data[0] fn = data[1] # fn name addr = get(data, 2) addr_managed_by_acid = addr != None addr = addr or repl_host_address(nvim) url = format_addr(*addr) backend = get(data, 3) or "lua" handler_impl = handlers[backend](nvim, fn) handler = partial_handler(nvim, handler_impl) success, msg = send(self.session_handler, url, [handler], payload) if not success and addr_managed_by_acid: nvim.api.err_writeln( "Dropping connection on {} due to error when sending: {}". format(addr[1], msg)) nvim.funcs.luaeval("require('acid.connections'):remove(_A)", addr)