Skip to content
Closed
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
39f2f5b
add message and data classes
samgst-amazon Mar 17, 2025
7204f2a
server config support for includeSuggestionsWithCodeReferences
samgst-amazon Mar 17, 2025
7b41616
Update plugins/amazonq/shared/jetbrains-community/src/software/aws/to…
samgst-amazon Mar 18, 2025
497cbdb
Merge branch 'feature/q-lsp' into samgst/q-lsp-aws-config
samgst-amazon Mar 18, 2025
430bf1b
data classes
samgst-amazon Mar 18, 2025
0b95441
send inlineCompletionParams to lsp
samgst-amazon Mar 18, 2025
dad393e
handler for aws/textDocument
samgst-amazon Mar 19, 2025
8a93408
add to existing textDocumentServiceHandler
samgst-amazon Mar 19, 2025
fa5b08a
Merge branch 'feature/q-lsp' into samgst/q-lsp-inlineCompletion
samgst-amazon Mar 19, 2025
37c88e3
detekt
samgst-amazon Mar 20, 2025
ae44899
code scan
samgst-amazon Mar 20, 2025
4f62d74
didOpen captures already open files in IDE
samgst-amazon Mar 21, 2025
c9cdb9e
Merge branch 'samgst/q-lsp-didOpen-init' into samgst/q-lsp-inlineComp…
samgst-amazon Mar 24, 2025
a2afd32
add more listeners to handler
samgst-amazon Mar 24, 2025
ee72f6d
Merge branch 'feature/q-lsp' into samgst/q-lsp-inlineCompletion
samgst-amazon Mar 24, 2025
8af0bb3
move call into codewhispererService
samgst-amazon Mar 26, 2025
e60ee13
add call
samgst-amazon Mar 26, 2025
72d1c1f
triggerType passed through
samgst-amazon Mar 26, 2025
9cfb452
Merge branch 'feature/q-lsp' into samgst/q-lsp-inlineCompletion
samgst-amazon Mar 26, 2025
bf77c91
ReadAction for param building
samgst-amazon Mar 27, 2025
2ddd138
test
samgst-amazon Mar 27, 2025
6ebef65
Merge branch 'feature/q-lsp' into samgst/q-lsp-inlineCompletion
samgst-amazon Mar 27, 2025
7bf9e83
Merge branch 'feature/q-lsp' into samgst/q-lsp-inlineCompletion
samgst-amazon Mar 31, 2025
8eca4ad
Merge branch 'feature/q-lsp' into samgst/q-lsp-inlineCompletion
samgst-amazon Mar 31, 2025
a5c4c1a
Merge branch 'feature/q-lsp' into samgst/q-lsp-inlineCompletion
samgst-amazon Apr 1, 2025
87292a0
Merge branch 'main' into samgst/q-lsp-inlineCompletion
samgst-amazon Apr 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,18 @@ import org.eclipse.lsp4j.jsonrpc.services.JsonRequest
import org.eclipse.lsp4j.services.LanguageServer
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.UpdateCredentialsPayload
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionListWithReferences
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionWithReferencesParams
import java.util.concurrent.CompletableFuture

/**
* Remote interface exposed by the Amazon Q language server
*/
@Suppress("unused")
interface AmazonQLanguageServer : LanguageServer {
@JsonRequest("aws/textDocument/inlineCompletionWithReferences")
fun inlineCompletionWithReferences(params: InlineCompletionWithReferencesParams): CompletableFuture<InlineCompletionListWithReferences>

@JsonNotification("aws/didChangeDependencyPaths")
fun didChangeDependencyPaths(params: DidChangeDependencyPathsParams): CompletableFuture<Unit>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument

data class InlineCompletionContext(
var triggerKind: InlineCompletionTriggerKind,
var selectedCompletionInfo: SelectedCompletionInfo? = null,
)

Check warning on line 9 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionContext.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionContext.kt#L6-L9

Added lines #L6 - L9 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument

data class InlineCompletionItem(
var itemId: String,
var insertText: String,
var references: List<InlineCompletionReference>,

Check warning on line 9 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionItem.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionItem.kt#L6-L9

Added lines #L6 - L9 were not covered by tests
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument

data class InlineCompletionListWithReferences(
var items: List<InlineCompletionItem>,
var sessionId: String,

Check warning on line 8 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionListWithReferences.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionListWithReferences.kt#L6-L8

Added lines #L6 - L8 were not covered by tests
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument

data class InlineCompletionReference(
var referenceName: String,
var referenceUrl: String,
var licenseName: String,
var position: InlineCompletionReferencePosition,

Check warning on line 10 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionReference.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionReference.kt#L6-L10

Added lines #L6 - L10 were not covered by tests
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument

data class InlineCompletionReferencePosition(
var startCharacter: Int = 0,
var endCharacter: Int = 0,
)

Check warning on line 9 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionReferencePosition.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionReferencePosition.kt#L6-L9

Added lines #L6 - L9 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument

enum class InlineCompletionTriggerKind(val value: Int) {
Invoke(0),
Automatic(1),

Check warning on line 8 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionTriggerKind.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused symbol

Class "Automatic" is never used
}

Check warning on line 9 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionTriggerKind.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionTriggerKind.kt#L6-L9

Added lines #L6 - L9 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument

import org.eclipse.lsp4j.TextDocumentPositionAndWorkDoneProgressParams

data class InlineCompletionWithReferencesParams(
var context: InlineCompletionContext,
) : TextDocumentPositionAndWorkDoneProgressParams()

Check warning on line 10 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionWithReferencesParams.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/InlineCompletionWithReferencesParams.kt#L8-L10

Added lines #L8 - L10 were not covered by tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument

import org.eclipse.lsp4j.Range

data class SelectedCompletionInfo(
var text: String,
var range: Range,

Check warning on line 10 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/SelectedCompletionInfo.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/textDocument/SelectedCompletionInfo.kt#L8-L10

Added lines #L8 - L10 were not covered by tests
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@

package software.aws.toolkits.jetbrains.services.amazonq.lsp.textdocument

import com.intellij.codeInsight.lookup.Lookup
import com.intellij.codeInsight.lookup.LookupEvent
import com.intellij.codeInsight.lookup.LookupListener
import com.intellij.codeInsight.lookup.LookupManagerListener
import com.intellij.codeInsight.lookup.impl.LookupImpl
import com.intellij.openapi.Disposable
import com.intellij.openapi.editor.Document
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.fileEditor.FileDocumentManagerListener
import com.intellij.openapi.fileEditor.FileEditorManager
Expand All @@ -19,11 +25,15 @@
import org.eclipse.lsp4j.DidCloseTextDocumentParams
import org.eclipse.lsp4j.DidOpenTextDocumentParams
import org.eclipse.lsp4j.DidSaveTextDocumentParams
import org.eclipse.lsp4j.Position
import org.eclipse.lsp4j.TextDocumentContentChangeEvent
import org.eclipse.lsp4j.TextDocumentIdentifier
import org.eclipse.lsp4j.TextDocumentItem
import org.eclipse.lsp4j.VersionedTextDocumentIdentifier
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionContext
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionTriggerKind
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionWithReferencesParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.FileUriUtil.toUriString
import software.aws.toolkits.jetbrains.utils.pluginAwareExecuteOnPooledThread

Expand All @@ -32,7 +42,8 @@
serverInstance: Disposable,
) : FileDocumentManagerListener,
FileEditorManagerListener,
BulkFileListener {
BulkFileListener,
LookupManagerListener {

init {
// didOpen & didClose events
Expand All @@ -52,8 +63,59 @@
FileDocumentManagerListener.TOPIC,
this
)

// aws/textDocument/inlineCompletionWithReferences events
project.messageBus.connect(serverInstance).subscribe(
LookupManagerListener.TOPIC,
this

Check warning on line 70 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L68-L70

Added lines #L68 - L70 were not covered by tests
)
}

override fun activeLookupChanged(oldLookup: Lookup?, newLookup: Lookup?) {
if (oldLookup != null || newLookup == null) return

newLookup.addLookupListener(object : LookupListener {

Check warning on line 77 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L77

Added line #L77 was not covered by tests
override fun itemSelected(event: LookupEvent) {
val editor = event.lookup.editor

Check warning on line 79 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L79

Added line #L79 was not covered by tests
if (!(event.lookup as LookupImpl).isShown) {
cleanup()
return

Check warning on line 82 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L81-L82

Added lines #L81 - L82 were not covered by tests
}

handleInlineCompletion(editor)
cleanup()
}

Check warning on line 87 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L85-L87

Added lines #L85 - L87 were not covered by tests

override fun lookupCanceled(event: LookupEvent) {
cleanup()
}

Check warning on line 91 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L90-L91

Added lines #L90 - L91 were not covered by tests

private fun cleanup() {
newLookup.removeLookupListener(this)
}

Check warning on line 95 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L94-L95

Added lines #L94 - L95 were not covered by tests
})
}

Check warning on line 97 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L97

Added line #L97 was not covered by tests

private fun handleInlineCompletion(editor: Editor) {
AmazonQLspService.executeIfRunning(project) { server ->
val params = buildInlineCompletionParams(editor)
server.inlineCompletionWithReferences(params)

Check warning on line 102 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L100-L102

Added lines #L100 - L102 were not covered by tests
}
}

Check warning on line 104 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L104

Added line #L104 was not covered by tests

private fun buildInlineCompletionParams(editor: Editor): InlineCompletionWithReferencesParams =
InlineCompletionWithReferencesParams(
context = InlineCompletionContext(
triggerKind = InlineCompletionTriggerKind.Invoke

Check warning on line 109 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L107-L109

Added lines #L107 - L109 were not covered by tests
)
).apply {
textDocument = TextDocumentIdentifier(toUriString(editor.virtualFile))
position = Position(
editor.caretModel.primaryCaret.visualPosition.line,
editor.caretModel.primaryCaret.offset

Check warning on line 115 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L111-L115

Added lines #L111 - L115 were not covered by tests
)
}

Check warning on line 117 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt#L117

Added line #L117 was not covered by tests

override fun beforeDocumentSaving(document: Document) {
AmazonQLspService.executeIfRunning(project) { languageServer ->
val file = FileDocumentManager.getInstance().getFile(document) ?: return@executeIfRunning
Expand Down
Loading