def start_client(window: sublime.Window, config: ClientConfig):
project_path = get_project_path(window)
if project_path is None:
return None
if settings.show_status_messages:
window.status_message("Starting " + config.name + "...")
debug("starting in", project_path)
# Create a dictionary of Sublime Text variables
variables = window.extract_variables()
# Expand language server command line environment variables
expanded_args = list(
sublime.expand_variables(os.path.expanduser(arg), variables)
for arg in config.binary_args
)
# Override OS environment variables
env = os.environ.copy()
for var, value in config.env.items():
# Expand both ST and OS environment variables
env[var] = os.path.expandvars(sublime.expand_variables(value, variables))
client = start_server(expanded_args, project_path, env)
if not client:
window.status_message("Could not start " + config.name + ", disabling")
debug("Could not start", config.binary_args, ", disabling")
return None
initializeParams = {
"processId": client.process.pid,
"rootUri": filename_to_uri(project_path),
"rootPath": project_path,
"capabilities": {
"textDocument": {
"completion": {
"completionItem": {
"snippetSupport": True
}
},
"synchronization": {
"didSave": True
}
},
"workspace": {
"applyEdit": True
}
}
}
if config.init_options:
initializeParams['initializationOptions'] = config.init_options
client.send_request(
Request.initialize(initializeParams),
lambda result: handle_initialize_result(result, client, window, config))
return client