MCPcopy Create free account
hub / github.com/arctic-cli/interface / getClients

Function getClients

packages/arctic/src/lsp/index.ts:158–242  ·  view source on GitHub ↗
(file: string)

Source from the content-addressed store, hash-verified

156 }
157
158 async function getClients(file: string) {
159 const s = await state()
160 const extension = path.parse(file).ext || file
161 const result: LSPClient.Info[] = []
162
163 async function schedule(server: LSPServer.Info, root: string, key: string) {
164 const handle = await server
165 .spawn(root)
166 .then((value) => {
167 if (!value) s.broken.add(key)
168 return value
169 })
170 .catch((err) => {
171 s.broken.add(key)
172 log.error(`Failed to spawn LSP server ${server.id}`, { error: err })
173 return undefined
174 })
175
176 if (!handle) return undefined
177 log.info("spawned lsp server", { serverID: server.id })
178
179 const client = await LSPClient.create({
180 serverID: server.id,
181 server: handle,
182 root,
183 }).catch((err) => {
184 s.broken.add(key)
185 handle.process.kill()
186 log.error(`Failed to initialize LSP client ${server.id}`, { error: err })
187 return undefined
188 })
189
190 if (!client) {
191 handle.process.kill()
192 return undefined
193 }
194
195 const existing = s.clients.find((x) => x.root === root && x.serverID === server.id)
196 if (existing) {
197 handle.process.kill()
198 return existing
199 }
200
201 s.clients.push(client)
202 return client
203 }
204
205 for (const server of Object.values(s.servers)) {
206 if (server.extensions.length && !server.extensions.includes(extension)) continue
207 const root = await server.root(file)
208 if (!root) continue
209 if (s.broken.has(root + server.id)) continue
210
211 const match = s.clients.find((x) => x.root === root && x.serverID === server.id)
212 if (match) {
213 result.push(match)
214 continue
215 }

Callers 1

touchFileFunction · 0.85

Calls 7

stateFunction · 0.85
scheduleFunction · 0.85
pushMethod · 0.80
getMethod · 0.45
setMethod · 0.45
deleteMethod · 0.45
publishMethod · 0.45

Tested by

no test coverage detected