Open chancerussell opened 9 months ago
Smarten up
FireplaceConnect
to recognize connection strings that represent filesystem locations.
We already support literal filesystem locations. But they're used to specify the path to a directory that contains .nrepl-port
:
So all you need to do is disambiguate with a getftype()
check and you're golden.
This might be problematic because of ambiguous cases where a given string could represent either a hostname or a filesystem location.
The circumstances where this could happen are extremely narrow: <port>
, <host>:<port>
, and URLs. And if you do hit one of those, you can use ./
to force a file path.
So all you need to do is disambiguate with a getftype() check and you're golden.
Very cool, I can handle that!
When we hit the "str is pointing to a socket file" case, do you think we should just pass the value as the host
arg to the python script, or should we have an explicit (new) arg for socket paths?
When we hit the "str is pointing to a socket file" case, do you think we should just pass the value as the
host
arg to the python script, or should we have an explicit (new) arg for socket paths?
I would change the host
arg to dest
and drop the port
arg. Those parameters are legacy: In fireplace#transport#connect()
we always coerce it to a URL. (You might want to move this coercion to fireplace#ConnectCommand()
.)
Then you can pass the socket path through directly, and main()
can look at dest
and decide if it looks like a URL or a file path. This is unambiguous.
nREPL has had support for running servers through AF_UNIX-style domain sockets for a while: https://github.com/nrepl/nrepl/pull/270 . It'd be nice if we could connect to those servers with vim-fireplace.
I've messed around and have confirmed that vim-fireplace can talk to nREPL over a domain socket with minimal changes to the
Connection
class'ssocket
method inpythonx/fireplace.py
to instantiate the correct type of socket as appropriate. I’m less sure of how starting such a connection should work.The main question I have is: how should the user indicate that they wish to connect to a domain socket server?
Options I can think of:
FireplaceConnect
to recognize connection strings that represent filesystem locations. This might be problematic because of ambiguous cases where a given string could represent either a hostname or a filesystem location.FireplaceConnect
specifically for connecting to domain sockets. This is a little less convenient but removes the ambiguity.FireplaceConnect
. When nREPL starts up in socket mode, it prints a message likenREPL server started on socket nrepl+unix:$SOCKET_PATH
, so maybe treatingnrepl+unix:
as a magic prefix would suffice.I’ve opened #416 as a draft proof of concept. It works, but it isn’t pretty.
Thanks for all your work on vim-fireplace!