(
server: LspServerDefinition,
context: RootUriContext,
)
| 1057 | } |
| 1058 | |
| 1059 | async #resolveRuntimeTarget( |
| 1060 | server: LspServerDefinition, |
| 1061 | context: RootUriContext, |
| 1062 | ): Promise<ResolvedRuntimeTarget | null> { |
| 1063 | const originalDocumentUri = context.uri; |
| 1064 | if (!originalDocumentUri) return null; |
| 1065 | |
| 1066 | const originalRootUri = await this.#resolveRootUri(server, context); |
| 1067 | const { normalizedRootUri } = normalizeRootUriForServer( |
| 1068 | server, |
| 1069 | originalRootUri, |
| 1070 | ); |
| 1071 | const normalizedDocumentUri = await this.#resolveDocumentUri( |
| 1072 | server, |
| 1073 | context, |
| 1074 | ); |
| 1075 | const providerContext = { |
| 1076 | ...context, |
| 1077 | uri: originalDocumentUri, |
| 1078 | documentUri: normalizedDocumentUri, |
| 1079 | originalDocumentUri, |
| 1080 | rootUri: originalRootUri, |
| 1081 | originalRootUri: originalRootUri ?? undefined, |
| 1082 | serverId: server.id, |
| 1083 | allowNonTerminalWorkspace: |
| 1084 | this.options.allowNonTerminalWorkspace === true, |
| 1085 | }; |
| 1086 | const runtimeProvider = await selectRuntimeProvider(server, providerContext); |
| 1087 | if (!runtimeProvider) { |
| 1088 | console.warn( |
| 1089 | `No LSP runtime provider selected for ${server.id}: uri=${originalDocumentUri}, root=${originalRootUri ?? "none"}, normalizedUri=${normalizedDocumentUri ?? "none"}`, |
| 1090 | ); |
| 1091 | return null; |
| 1092 | } |
| 1093 | |
| 1094 | let documentUri = normalizedDocumentUri; |
| 1095 | let rootUri = normalizedRootUri; |
| 1096 | let scope: LspClientScope = "workspace"; |
| 1097 | |
| 1098 | if (runtimeProvider.resolveUris) { |
| 1099 | try { |
| 1100 | const resolution = await runtimeProvider.resolveUris(server, { |
| 1101 | ...providerContext, |
| 1102 | originalRootUri, |
| 1103 | normalizedDocumentUri, |
| 1104 | normalizedRootUri, |
| 1105 | }); |
| 1106 | if (resolution) { |
| 1107 | if (Object.prototype.hasOwnProperty.call(resolution, "documentUri")) { |
| 1108 | documentUri = resolution.documentUri || null; |
| 1109 | } |
| 1110 | if (Object.prototype.hasOwnProperty.call(resolution, "rootUri")) { |
| 1111 | rootUri = resolution.rootUri || null; |
| 1112 | } |
| 1113 | if (resolution.scope) scope = resolution.scope; |
| 1114 | } |
| 1115 | } catch (error) { |
| 1116 | console.warn( |
no test coverage detected