Skip to content

Commit 97af88f

Browse files
committed
add InitializeParams
1 parent 14cebac commit 97af88f

File tree

1 file changed

+72
-12
lines changed
  • plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp

1 file changed

+72
-12
lines changed

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

Lines changed: 72 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,22 @@ import com.intellij.openapi.util.Key
1919
import com.intellij.util.io.await
2020
import kotlinx.coroutines.CoroutineScope
2121
import kotlinx.coroutines.launch
22+
import org.eclipse.lsp4j.ClientCapabilities
23+
import org.eclipse.lsp4j.ClientInfo
24+
import org.eclipse.lsp4j.FileOperationsWorkspaceCapabilities
2225
import org.eclipse.lsp4j.InitializeParams
2326
import org.eclipse.lsp4j.InitializedParams
27+
import org.eclipse.lsp4j.SynchronizationCapabilities
28+
import org.eclipse.lsp4j.TextDocumentClientCapabilities
29+
import org.eclipse.lsp4j.WorkspaceClientCapabilities
30+
import org.eclipse.lsp4j.WorkspaceFolder
2431
import org.eclipse.lsp4j.jsonrpc.Launcher
2532
import org.eclipse.lsp4j.launch.LSPLauncher
2633
import org.slf4j.event.Level
2734
import software.aws.toolkits.core.utils.getLogger
2835
import software.aws.toolkits.core.utils.warn
2936
import software.aws.toolkits.jetbrains.isDeveloperMode
37+
import software.aws.toolkits.jetbrains.services.telemetry.ClientMetadata
3038
import java.io.IOException
3139
import java.io.OutputStreamWriter
3240
import java.io.PipedInputStream
@@ -80,6 +88,69 @@ class AmazonQLspService(project: Project, private val cs: CoroutineScope) : Disp
8088
private val launcherFuture: Future<Void>
8189
private val launcherHandler: KillableProcessHandler
8290

91+
private fun createInitializeParams(): InitializeParams {
92+
return InitializeParams().apply {
93+
processId = ProcessHandle.current().pid().toInt()
94+
capabilities = createClientCapabilities()
95+
clientInfo = createClientInfo()
96+
workspaceFolders = createWorkspaceFolders()
97+
initializationOptions = getExtendedClientMetadata()
98+
}
99+
}
100+
101+
private fun createClientCapabilities(): ClientCapabilities {
102+
return ClientCapabilities().apply {
103+
textDocument = TextDocumentClientCapabilities().apply {
104+
// For didSaveTextDocument, other textDocument/ messages always mandatory
105+
synchronization = SynchronizationCapabilities().apply {
106+
didSave = true
107+
}
108+
}
109+
110+
workspace = WorkspaceClientCapabilities().apply {
111+
applyEdit = false
112+
113+
// For workspace folder changes
114+
workspaceFolders = true
115+
116+
// For file operations (create, delete)
117+
fileOperations = FileOperationsWorkspaceCapabilities().apply {
118+
didCreate = true
119+
didDelete = true
120+
}
121+
}
122+
}
123+
}
124+
125+
private fun createWorkspaceFolders(): List<WorkspaceFolder> {
126+
return emptyList()
127+
}
128+
129+
private fun createClientInfo(): ClientInfo {
130+
val metadata = ClientMetadata.getDefault()
131+
return ClientInfo().apply {
132+
name = metadata.awsProduct.toString()
133+
version = metadata.awsVersion
134+
}
135+
}
136+
137+
private fun getExtendedClientMetadata(): Map<String, Any> {
138+
val metadata = ClientMetadata.getDefault()
139+
return mapOf(
140+
"aws" to mapOf(
141+
"clientInfo" to mapOf(
142+
"extension" to mapOf(
143+
"name" to metadata.awsProduct.toString(),
144+
"version" to metadata.awsVersion
145+
),
146+
"clientId" to metadata.clientId,
147+
"version" to metadata.parentProductVersion,
148+
"name" to metadata.parentProduct
149+
)
150+
)
151+
)
152+
}
153+
83154
init {
84155
val cmd = GeneralCommandLine("amazon-q-lsp")
85156

@@ -116,18 +187,7 @@ class AmazonQLspService(project: Project, private val cs: CoroutineScope) : Disp
116187
launcherFuture = launcher.startListening()
117188

118189
cs.launch {
119-
val initializeResult = languageServer.initialize(
120-
InitializeParams().apply {
121-
// does this work on windows
122-
processId = ProcessHandle.current().pid().toInt()
123-
// capabilities
124-
// client info
125-
// trace?
126-
// workspace folders?
127-
// anything else we need?
128-
}
129-
// probably need a timeout
130-
).await()
190+
val initializeResult = languageServer.initialize(createInitializeParams()).await()
131191

132192
// then if this succeeds then we can allow the client to send requests
133193
languageServer.initialized(InitializedParams())

0 commit comments

Comments
 (0)