33 lines
997 B
Python
33 lines
997 B
Python
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT License.
|
|
"""IO handling to communicate with LSP client."""
|
|
|
|
import argparse
|
|
import contextlib
|
|
import socket
|
|
import sys
|
|
from typing import Optional, Sequence
|
|
|
|
|
|
def parse_args(args: Optional[Sequence[str]] = None) -> argparse.Namespace:
|
|
"""Parse command line arguments."""
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--stdio", action="store_true")
|
|
parser.add_argument("--socket", type=int, default=None)
|
|
parser.add_argument("--pipe", type=str, default=None)
|
|
parser.add_argument("--clientProcessId", type=int, default=None)
|
|
|
|
return parser.parse_args(args)
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def use_pipe(pipe_name: str):
|
|
if sys.platform == "win32":
|
|
with open(pipe_name, "r+b") as f:
|
|
yield (f, f)
|
|
else:
|
|
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
sock.connect(pipe_name)
|
|
f = sock.makefile("rwb")
|
|
yield (f, f)
|