Skip to content

feat(lsp): Addition of LSP for Amazon Q #5593

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 166 commits into from
Apr 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
166 commits
Select commit Hold shift + click to select a range
5b9ee01
Merge main into feature/q-lsp
aws-toolkit-automation Feb 10, 2025
10b8b1c
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
d204734
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
acdcc9f
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
000e806
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
d948ab9
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
888d9dc
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
847b17a
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
3e3babf
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
368b473
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
dafcfb3
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
51166e3
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
2054332
Merge main into feature/q-lsp
aws-toolkit-automation Feb 11, 2025
d651a46
feat(q): stub out Q LSP logic (#5352)
rli Feb 12, 2025
c895f6b
Merge main into feature/q-lsp
aws-toolkit-automation Feb 12, 2025
03441f1
Merge main into feature/q-lsp
aws-toolkit-automation Feb 12, 2025
4a29d0e
Merge main into feature/q-lsp
aws-toolkit-automation Feb 12, 2025
ffbab15
Merge main into feature/q-lsp
aws-toolkit-automation Feb 12, 2025
013c54f
feat(amazonq): LSP -- Implement Initialize message (#5367)
samgst-amazon Feb 13, 2025
ba5d289
Merge main into feature/q-lsp
aws-toolkit-automation Feb 13, 2025
d9f7bb3
feat(amazonq): initialize flare lsp on project start (#5366)
rli Feb 13, 2025
3a866a6
fix(amazonq): also terminate lsp process on other failures (#5371)
rli Feb 13, 2025
7de1aa4
Merge main into feature/q-lsp
aws-toolkit-automation Feb 13, 2025
7c73892
Merge main into feature/q-lsp
aws-toolkit-automation Feb 13, 2025
e22092f
feat(amazonq): hook up lsp payload encryption (#5370)
rli Feb 13, 2025
bfbaf72
Merge main into feature/q-lsp
aws-toolkit-automation Feb 13, 2025
b979630
Merge main into feature/q-lsp
aws-toolkit-automation Feb 14, 2025
d24f3df
Merge main into feature/q-lsp
aws-toolkit-automation Feb 14, 2025
e3dcd5c
Merge main into feature/q-lsp
aws-toolkit-automation Feb 14, 2025
add1848
Merge main into feature/q-lsp
aws-toolkit-automation Feb 15, 2025
b2910df
Merge main into feature/q-lsp
aws-toolkit-automation Feb 15, 2025
9372b80
Merge main into feature/q-lsp
aws-toolkit-automation Feb 18, 2025
f8e3c87
Merge main into feature/q-lsp
aws-toolkit-automation Feb 18, 2025
f541043
Merge main into feature/q-lsp
aws-toolkit-automation Feb 18, 2025
7fe49e0
Merge main into feature/q-lsp
aws-toolkit-automation Feb 18, 2025
7c25e12
Merge main into feature/q-lsp
aws-toolkit-automation Feb 18, 2025
d927594
feature(amazonq): expose `AmazonQLanguageServer` to consumers (#5386)
rli Feb 18, 2025
5039aad
Merge main into feature/q-lsp
aws-toolkit-automation Feb 18, 2025
5338e0c
Merge main into feature/q-lsp
aws-toolkit-automation Feb 18, 2025
13bf928
Merge main into feature/q-lsp
aws-toolkit-automation Feb 18, 2025
462f836
Merge main into feature/q-lsp
aws-toolkit-automation Feb 19, 2025
b403d8a
Merge main into feature/q-lsp
aws-toolkit-automation Feb 19, 2025
5b15f52
Merge main into feature/q-lsp
aws-toolkit-automation Feb 20, 2025
290ac22
Merge main into feature/q-lsp
aws-toolkit-automation Feb 20, 2025
4efffa0
Merge main into feature/q-lsp
aws-toolkit-automation Feb 20, 2025
41bffe5
Merge main into feature/q-lsp
aws-toolkit-automation Feb 20, 2025
8715a11
Merge main into feature/q-lsp
aws-toolkit-automation Feb 21, 2025
140110c
Merge main into feature/q-lsp
aws-toolkit-automation Feb 21, 2025
c222125
Merge main into feature/q-lsp
aws-toolkit-automation Feb 22, 2025
2d60ec2
Merge main into feature/q-lsp
aws-toolkit-automation Feb 25, 2025
48b20a4
Merge main into feature/q-lsp
aws-toolkit-automation Feb 25, 2025
3a5823e
Merge main into feature/q-lsp
aws-toolkit-automation Feb 25, 2025
1cdc40a
Merge main into feature/q-lsp
aws-toolkit-automation Feb 26, 2025
ab00ed9
Merge main into feature/q-lsp
aws-toolkit-automation Feb 26, 2025
eab7f37
Merge main into feature/q-lsp
aws-toolkit-automation Feb 26, 2025
6d593c3
Merge main into feature/q-lsp
aws-toolkit-automation Feb 26, 2025
179aea2
feat(amazonq): Added LSP Manifest manager related changes (#5387)
LokeshDogga13 Feb 26, 2025
35b0424
feat(amazonq): Implement aws/credentials/token messages (#5410)
samgst-amazon Feb 26, 2025
bd4dd63
feat(amazonq): Extract ZIP File and Unit Test Cases (#5416)
LokeshDogga13 Feb 27, 2025
f7039e1
Merge main into feature/q-lsp
aws-toolkit-automation Feb 27, 2025
c349947
Merge main into feature/q-lsp
aws-toolkit-automation Feb 28, 2025
a6e7685
Merge main into feature/q-lsp
aws-toolkit-automation Feb 28, 2025
a74f884
implement token change listener (#5423)
samgst-amazon Feb 28, 2025
6bfc0e5
Merge main into feature/q-lsp
aws-toolkit-automation Feb 28, 2025
0af95e3
feat(amazonq): Added progress indicator for lsp artifact download (#…
LokeshDogga13 Feb 28, 2025
1fd1e73
feat(amazonq): add virtualFile -> URI util (#5381)
samgst-amazon Mar 3, 2025
25f6e19
Merge main into feature/q-lsp
aws-toolkit-automation Mar 3, 2025
cb97ce7
feat(amazonq): implement workspace file messages (#5377)
samgst-amazon Mar 3, 2025
e20697a
fix(amazonq): fix failing lsp artifact tests (#5433)
rli Mar 3, 2025
85ebf09
Merge main into feature/q-lsp
aws-toolkit-automation Mar 4, 2025
9574b42
feat(amazonq): expose lsp server capabilities to consumers of AmazonQ…
rli Mar 4, 2025
6df31d9
feat(amazonq): implement TextDocumentService message handler (#5380)
samgst-amazon Mar 4, 2025
21ed987
Merge main into feature/q-lsp
aws-toolkit-automation Mar 4, 2025
0b6e695
fix(amazonq): fix failing FileUri/TextDocumentServiceHandler tests (#…
rli Mar 5, 2025
fa2ddee
Merge main into feature/q-lsp
aws-toolkit-automation Mar 5, 2025
332af68
Merge main into feature/q-lsp
aws-toolkit-automation Mar 5, 2025
c0e4ad3
Merge main into feature/q-lsp
aws-toolkit-automation Mar 5, 2025
954096d
Merge main into feature/q-lsp
aws-toolkit-automation Mar 5, 2025
84b0f7d
feat(amazonq): Added changes for override lsp artifacts (#5429)
LokeshDogga13 Mar 6, 2025
e66ca51
Merge main into feature/q-lsp
aws-toolkit-automation Mar 6, 2025
bff5c09
Merge main into feature/q-lsp
aws-toolkit-automation Mar 6, 2025
262a6a8
Merge main into feature/q-lsp
aws-toolkit-automation Mar 7, 2025
b179b37
feat(amazonq): implement configuration/didChangeConfiguration message…
rli Mar 7, 2025
ac81a2f
feat(amazonq): Implement aws/syncModuleDependencies call (#5414)
samgst-amazon Mar 7, 2025
b6ae7b1
feat(amazonq): launch lsp from resolved artifacts and allow user to o…
rli Mar 7, 2025
d370f79
Merge main into feature/q-lsp
aws-toolkit-automation Mar 8, 2025
07fab42
Merge main into feature/q-lsp
aws-toolkit-automation Mar 10, 2025
ca4e3ce
Merge main into feature/q-lsp
aws-toolkit-automation Mar 10, 2025
ecce6e5
Merge main into feature/q-lsp
aws-toolkit-automation Mar 10, 2025
c661fee
Merge main into feature/q-lsp
aws-toolkit-automation Mar 10, 2025
4f8b2c4
Merge main into feature/q-lsp
aws-toolkit-automation Mar 11, 2025
bba5794
Merge main into feature/q-lsp
aws-toolkit-automation Mar 11, 2025
e3aed6c
Merge main into feature/q-lsp
aws-toolkit-automation Mar 12, 2025
526eb4a
Merge main into feature/q-lsp
aws-toolkit-automation Mar 12, 2025
7d92d3a
fix(amazonq): always send creds on lsp init if available (#5459)
rli Mar 12, 2025
660ee40
Merge main into feature/q-lsp
aws-toolkit-automation Mar 12, 2025
151a9ab
Merge main into feature/q-lsp
aws-toolkit-automation Mar 12, 2025
c0f84b1
refactor(amazonq): implement VirtualFile -> URI util for messaging pa…
samgst-amazon Mar 13, 2025
5666c65
Merge main into feature/q-lsp
aws-toolkit-automation Mar 13, 2025
1bed23a
Merge main into feature/q-lsp
aws-toolkit-automation Mar 13, 2025
38fe91e
fix(amazonq): capture more file events for workspace/ messages (#5474)
samgst-amazon Mar 13, 2025
e6d8159
fix(amazonq): lsp token/update emits for init, logins, and token refr…
samgst-amazon Mar 14, 2025
1378eae
Merge main into feature/q-lsp
aws-toolkit-automation Mar 14, 2025
897e2a3
Merge main into feature/q-lsp
aws-toolkit-automation Mar 17, 2025
9f76c93
Merge main into feature/q-lsp
aws-toolkit-automation Mar 17, 2025
2536f83
feat(amazonq): implement aws/credentials/getConnectionMetadata for ls…
samgst-amazon Mar 18, 2025
e8a4bee
Merge main into feature/q-lsp
aws-toolkit-automation Mar 18, 2025
7f90c20
feat(amazonq): add lsp configuration support for includeSuggestionsWi…
samgst-amazon Mar 18, 2025
78b6ac9
Merge main into feature/q-lsp
aws-toolkit-automation Mar 18, 2025
0773bbb
Merge main into feature/q-lsp
aws-toolkit-automation Mar 19, 2025
c0de224
rename params (#5484)
samgst-amazon Mar 19, 2025
8e1355f
fix(amazonq): didRename emits full oldUri path (#5487)
samgst-amazon Mar 20, 2025
083f6d8
Merge main into feature/q-lsp
aws-toolkit-automation Mar 20, 2025
8542f6b
Merge main into feature/q-lsp
aws-toolkit-automation Mar 20, 2025
4367af0
Merge main into feature/q-lsp
aws-toolkit-automation Mar 20, 2025
60a42f4
Merge main into feature/q-lsp
aws-toolkit-automation Mar 21, 2025
59d5c75
fix(amazonq): fix didChangeDependencyPathsParams with absolute pathin…
samgst-amazon Mar 21, 2025
d82065d
Merge main into feature/q-lsp
aws-toolkit-automation Mar 21, 2025
f24037f
Merge main into feature/q-lsp
aws-toolkit-automation Mar 24, 2025
68ba71c
rename to match flare shape (#5504)
samgst-amazon Mar 26, 2025
99827f8
Merge remote-tracking branch 'origin/main' into HEAD
rli Mar 26, 2025
9046a85
Merge pull request #5506 from aws/autoMerge/feature/q-lsp
rli Mar 26, 2025
7d3b55c
Merge main into feature/q-lsp
aws-toolkit-automation Mar 27, 2025
d267a21
Merge main into feature/q-lsp
aws-toolkit-automation Mar 27, 2025
026ffca
Merge main into feature/q-lsp
aws-toolkit-automation Mar 27, 2025
60a5f37
Merge main into feature/q-lsp
aws-toolkit-automation Mar 28, 2025
d22a9bb
Merge main into feature/q-lsp
aws-toolkit-automation Mar 31, 2025
86527a3
Merge main into feature/q-lsp
aws-toolkit-automation Mar 31, 2025
5740273
Merge main into feature/q-lsp
aws-toolkit-automation Mar 31, 2025
49e8f68
Merge main into feature/q-lsp
aws-toolkit-automation Apr 1, 2025
d51385e
Merge main into feature/q-lsp
aws-toolkit-automation Apr 1, 2025
5f752ca
fix(amazonq): didOpen emits for files already open on IDE start (#5494)
samgst-amazon Apr 1, 2025
3abcd1f
fix(amazonq): update didRenameFile to call didOpen & didClose for doc…
samgst-amazon Apr 1, 2025
5456fa0
feat(amazonq): workspace context settings & workspaceId (#5526)
leigaol Apr 1, 2025
525f747
Merge main into feature/q-lsp
aws-toolkit-automation Apr 3, 2025
e68bb80
Merge main into feature/q-lsp
aws-toolkit-automation Apr 3, 2025
35c0eaa
fix(amazonq): do not show workspace context settings (#5534)
leigaol Apr 4, 2025
61c2b5f
add languageId and version to didOpen message (#5536)
samgst-amazon Apr 8, 2025
5cc7ae1
Merge main into feature/q-lsp
aws-toolkit-automation Apr 8, 2025
f444073
Merge remote-tracking branch 'origin/main' into HEAD
rli Apr 10, 2025
35bab00
compile
rli Apr 10, 2025
d03a641
Merge pull request #5537 from aws/autoMerge/feature/q-lsp
rli Apr 10, 2025
1faaa9e
Merge main into feature/q-lsp
aws-toolkit-automation Apr 10, 2025
9ff4d7b
Merge main into feature/q-lsp
aws-toolkit-automation Apr 10, 2025
25ed88a
Merge main into feature/q-lsp
aws-toolkit-automation Apr 10, 2025
dad76f1
Merge main into feature/q-lsp
aws-toolkit-automation Apr 10, 2025
24bf5d4
Merge main into feature/q-lsp
aws-toolkit-automation Apr 10, 2025
345a2c8
Merge main into feature/q-lsp
aws-toolkit-automation Apr 10, 2025
f077616
Merge main into feature/q-lsp
aws-toolkit-automation Apr 11, 2025
f8a47fe
Merge main into feature/q-lsp
aws-toolkit-automation Apr 11, 2025
5de10f3
Merge main into feature/q-lsp
aws-toolkit-automation Apr 11, 2025
f22322a
Merge main into feature/q-lsp
aws-toolkit-automation Apr 11, 2025
64903e1
Merge main into feature/q-lsp
aws-toolkit-automation Apr 11, 2025
d167137
Merge main into feature/q-lsp
aws-toolkit-automation Apr 11, 2025
ae57be6
Merge main into feature/q-lsp
aws-toolkit-automation Apr 12, 2025
09cf748
Merge main into feature/q-lsp
aws-toolkit-automation Apr 15, 2025
dc9ff9d
Merge main into feature/q-lsp
aws-toolkit-automation Apr 15, 2025
97845d8
Merge main into feature/q-lsp
aws-toolkit-automation Apr 15, 2025
de5a4bb
fix(amazonq): fix createWorkspaceFolders (#5578)
samgst-amazon Apr 16, 2025
a64c229
Merge main into feature/q-lsp
aws-toolkit-automation Apr 16, 2025
63ce354
switch LSP endpoint (#5576)
leigaol Apr 16, 2025
a8da8ca
deps(lsp): Add initialization options for profiles (#5599)
manodnyab Apr 17, 2025
9a4bfd6
deps(lsp): implement aws/updateConfiguration (#5600)
samgst-amazon Apr 17, 2025
4d2ff28
Merge remote-tracking branch 'origin/main' into HEAD
rli Apr 17, 2025
2b5d434
Merge pull request #5602 from aws/autoMerge/feature/q-lsp
rli Apr 17, 2025
2685de7
build: delete FIXME
rli Apr 17, 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
3 changes: 2 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref =
kotlin-stdLibJdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" }
mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" }
mockito-junit-jupiter = { module = "org.mockito:mockito-junit-jupiter", version.ref = "mockito" }
mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version.ref = "mockitoKotlin" }
mockk = { module = "io.mockk:mockk", version.ref="mockk" }
nimbus-jose-jwt = {module = "com.nimbusds:nimbus-jose-jwt", version.ref = "nimbus-jose-jwt"}
Expand All @@ -121,7 +122,7 @@ zjsonpatch = { module = "com.flipkart.zjsonpatch:zjsonpatch", version.ref = "zjs
[bundles]
jackson = ["jackson-datetime", "jackson-kotlin", "jackson-yaml", "jackson-xml"]
kotlin = ["kotlin-stdLibJdk8", "kotlin-reflect"]
mockito = ["mockito-core", "mockito-kotlin"]
mockito = ["mockito-core", "mockito-junit-jupiter", "mockito-kotlin"]
sshd = ["sshd-core", "sshd-scp", "sshd-sftp"]

[plugins]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
import software.aws.toolkits.jetbrains.core.gettingstarted.emitUserState
import software.aws.toolkits.jetbrains.services.amazonq.CodeWhispererFeatureConfigService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager
import software.aws.toolkits.jetbrains.services.amazonq.project.ProjectContextController
import software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindow
Expand Down Expand Up @@ -56,6 +57,7 @@

QRegionProfileManager.getInstance().validateProfile(project)

AmazonQLspService.getInstance(project)

Check warning on line 60 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt#L60

Added line #L60 was not covered by tests
startLsp(project)
if (runOnce.get()) return
emitUserState(project)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
import software.aws.toolkits.jetbrains.core.credentials.pinning.CodeWhispererConnection
import software.aws.toolkits.jetbrains.services.amazonq.SUPPLEMENTAL_CONTEXT_TIMEOUT
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.GetConfigurationFromServerParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LspServerConfigurations
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererClientAdaptor
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator
Expand Down Expand Up @@ -92,6 +95,9 @@
import software.aws.toolkits.telemetry.CodewhispererCompletionType
import software.aws.toolkits.telemetry.CodewhispererSuggestionState
import software.aws.toolkits.telemetry.CodewhispererTriggerType
import java.net.URI
import java.nio.file.Paths
import java.util.concurrent.CompletableFuture
import java.util.concurrent.TimeUnit

@Service
Expand Down Expand Up @@ -233,7 +239,8 @@
requestContext.fileContextInfo,
requestContext.awaitSupplementalContext(),
requestContext.customizationArn,
requestContext.profileArn
requestContext.profileArn,
requestContext.workspaceId,

Check warning on line 243 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt#L242-L243

Added lines #L242 - L243 were not covered by tests
)
)

Expand Down Expand Up @@ -670,10 +677,42 @@

val profileArn = QRegionProfileManager.getInstance().activeProfile(project)?.arn

var workspaceId: String? = null
try {
val workspacesInfos = getWorkspaceIds(project).get().workspaces

Check warning on line 682 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt#L680-L682

Added lines #L680 - L682 were not covered by tests
for (workspaceInfo in workspacesInfos) {
val workspaceRootPath = Paths.get(URI(workspaceInfo.workspaceRoot)).toString()

Check warning on line 684 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt#L684

Added line #L684 was not covered by tests
if (psiFile.virtualFile.path.startsWith(workspaceRootPath)) {
workspaceId = workspaceInfo.workspaceId
LOG.info { "Found workspaceId from LSP '$workspaceId'" }
break

Check warning on line 688 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt#L686-L688

Added lines #L686 - L688 were not covered by tests
}
}
} catch (e: Exception) {
LOG.warn { "Cannot get workspaceId from LSP'$e'" }

Check warning on line 692 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt#L691-L692

Added lines #L691 - L692 were not covered by tests
}
return RequestContext(
project, editor, triggerTypeInfo, caretPosition, fileContext,
supplementalContext, connection, latencyContext, customizationArn, profileArn
project,
editor,
triggerTypeInfo,
caretPosition,
fileContext,
supplementalContext,
connection,
latencyContext,
customizationArn,
profileArn,
workspaceId,

Check warning on line 705 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt#L695-L705

Added lines #L695 - L705 were not covered by tests
)
}

private fun getWorkspaceIds(project: Project): CompletableFuture<LspServerConfigurations> {
val payload = GetConfigurationFromServerParams(
section = "aws.q.workspaceContext"

Check warning on line 711 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt#L710-L711

Added lines #L710 - L711 were not covered by tests
)
return AmazonQLspService.executeIfRunning(project) { server ->
server.getConfigurationFromServer(payload)
} ?: (CompletableFuture.failedFuture(IllegalStateException("LSP Server not running")))

Check warning on line 715 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt#L714-L715

Added lines #L714 - L715 were not covered by tests
}

fun validateResponse(response: GenerateCompletionsResponse): GenerateCompletionsResponse {
Expand Down Expand Up @@ -808,6 +847,7 @@
supplementalContext: SupplementalContextInfo?,
customizationArn: String?,
profileArn: String?,
workspaceId: String?,
): GenerateCompletionsRequest {
val programmingLanguage = ProgrammingLanguage.builder()
.languageName(fileContextInfo.programmingLanguage.toCodeWhispererRuntimeLanguage().languageId)
Expand Down Expand Up @@ -837,6 +877,7 @@
.customizationArn(customizationArn)
.optOutPreference(getTelemetryOptOutPreference())
.profileArn(profileArn)
.workspaceId(workspaceId)

Check warning on line 880 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt#L880

Added line #L880 was not covered by tests
.build()
}
}
Expand All @@ -853,6 +894,7 @@
val latencyContext: LatencyContext,
val customizationArn: String?,
val profileArn: String?,
val workspaceId: String?,

Check warning on line 897 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt#L897

Added line #L897 was not covered by tests
) {
// TODO: should make the entire getRequestContext() suspend function instead of making supplemental context only
var supplementalContext: SupplementalContextInfo? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@

import com.intellij.icons.AllIcons
import com.intellij.ide.DataManager
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
import com.intellij.openapi.options.BoundConfigurable
import com.intellij.openapi.options.Configurable
import com.intellij.openapi.options.SearchableConfigurable
import com.intellij.openapi.options.ex.Settings
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.emptyText
import com.intellij.ui.components.ActionLink
import com.intellij.ui.components.fields.ExpandableTextField
import com.intellij.ui.dsl.builder.Align
import com.intellij.ui.dsl.builder.bindIntText
import com.intellij.ui.dsl.builder.bindSelected
import com.intellij.ui.dsl.builder.bindText
Expand All @@ -24,6 +27,7 @@
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.isCodeWhispererEnabled
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
import software.aws.toolkits.jetbrains.settings.LspSettings
import software.aws.toolkits.resources.message
import java.awt.Font
import java.util.concurrent.TimeUnit
Expand Down Expand Up @@ -61,6 +65,24 @@
}
}

group(message("amazonqFeatureDev.placeholder.lsp")) {
row(message("amazonqFeatureDev.placeholder.select_lsp_artifact")) {
val fileChooserDescriptor = FileChooserDescriptorFactory.createSingleFileDescriptor()
fileChooserDescriptor.isForcedToUseIdeaFileChooser = true

Check warning on line 71 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt#L68-L71

Added lines #L68 - L71 were not covered by tests

textFieldWithBrowseButton(fileChooserDescriptor = fileChooserDescriptor)

Check warning on line 73 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unstable API Usage

'textFieldWithBrowseButton(com.intellij.openapi.fileChooser.FileChooserDescriptor, com.intellij.openapi.project.Project, kotlin.jvm.functions.Function1)' is marked unstable with @ApiStatus.Experimental

Check warning

Code scanning / QDJVMC

Unstable API Usage Warning

'textFieldWithBrowseButton(com.intellij.openapi.fileChooser.FileChooserDescriptor, com.intellij.openapi.project.Project, kotlin.jvm.functions.Function1)' is marked unstable with @ApiStatus.Experimental
.bindText(

Check warning on line 74 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt#L73-L74

Added lines #L73 - L74 were not covered by tests
{ LspSettings.getInstance().getArtifactPath().orEmpty() },
{ LspSettings.getInstance().setArtifactPath(it) }

Check warning on line 76 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt#L76

Added line #L76 was not covered by tests
)
.applyToComponent {
emptyText.text = message("executableCommon.auto_managed")
}
.resizableColumn()
.align(Align.FILL)
}
}

Check warning on line 84 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt#L78-L84

Added lines #L78 - L84 were not covered by tests

group(message("aws.settings.codewhisperer.group.general")) {
row {
checkBox(message("aws.settings.codewhisperer.include_code_with_reference")).apply {
Expand Down Expand Up @@ -116,6 +138,20 @@
}

group(message("aws.settings.codewhisperer.group.q_chat")) {
row {
checkBox(message("aws.settings.codewhisperer.workspace_context")).apply {

Check warning on line 142 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Usage of redundant or deprecated syntax or deprecated symbols

'message(String, vararg Any): String' is deprecated. Use extension-specific localization bundle instead

Check warning

Code scanning / QDJVMC

Usage of redundant or deprecated syntax or deprecated symbols Warning

'message(String, vararg Any): String' is deprecated. Use extension-specific localization bundle instead
connect.subscribe(
ToolkitConnectionManagerListener.TOPIC,
object : ToolkitConnectionManagerListener {

Check warning on line 145 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt#L141-L145

Added lines #L141 - L145 were not covered by tests
override fun activeConnectionChanged(newConnection: ToolkitConnection?) {
enabled(isCodeWhispererEnabled(project))
}

Check warning on line 148 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt#L147-L148

Added lines #L147 - L148 were not covered by tests
}
)
enabled(invoke)
bindSelected(codeWhispererSettings::isWorkspaceContextEnabled, codeWhispererSettings::toggleWorkspaceContextEnabled)
}.comment(message("aws.settings.codewhisperer.workspace_context.tooltip"))
}.visible(false)

Check warning on line 154 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt#L151-L154

Added lines #L151 - L154 were not covered by tests
row {
checkBox(message("aws.settings.codewhisperer.project_context")).apply {
connect.subscribe(
Expand Down Expand Up @@ -148,7 +184,7 @@
}.comment(message("aws.settings.codewhisperer.project_context_index_thread.tooltip"))
}

row(message("aws.settings.codewhisperer.project_context_index_max_size")) {

Check warning on line 187 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Usage of redundant or deprecated syntax or deprecated symbols

'message(String, vararg Any): String' is deprecated. Use extension-specific localization bundle instead
intTextField(
range = CodeWhispererSettings.CONTEXT_INDEX_SIZE
).bindIntText(codeWhispererSettings::getProjectContextIndexMaxSize, codeWhispererSettings::setProjectContextIndexMaxSize)
Expand All @@ -162,7 +198,7 @@
}
)
enabled(invoke)
}.comment(message("aws.settings.codewhisperer.project_context_index_max_size.tooltip"))

Check warning on line 201 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Usage of redundant or deprecated syntax or deprecated symbols

'message(String, vararg Any): String' is deprecated. Use extension-specific localization bundle instead
}

row {
Expand Down Expand Up @@ -214,8 +250,8 @@
row {
ExpandableTextField(ParametersListUtil.COLON_LINE_PARSER, ParametersListUtil.COLON_LINE_JOINER).also {
cell(it)
.label(message("aws.settings.codewhisperer.code_review.title"))

Check warning on line 253 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Usage of redundant or deprecated syntax or deprecated symbols

'message(String, vararg Any): String' is deprecated. Use extension-specific localization bundle instead
.comment(message("aws.settings.codewhisperer.code_review.description"))

Check warning on line 254 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Usage of redundant or deprecated syntax or deprecated symbols

'message(String, vararg Any): String' is deprecated. Use extension-specific localization bundle instead
.bindText(codeWhispererSettings::getIgnoredCodeReviewIssues, codeWhispererSettings::setIgnoredCodeReviewIssues)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,8 @@ internal class CodeWhispererCodeCoverageTrackerTestPython : CodeWhispererCodeCov
null,
mock(),
aString(),
aString()
aString(),
aString(),
)
val responseContext = ResponseContext("sessionId")
val recommendationContext = RecommendationContext(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,18 @@ class CodeWhispererConfigurableTest : CodeWhispererTestBase() {

val checkboxes = panel.components.filterIsInstance<JCheckBox>()

assertThat(checkboxes.size).isEqualTo(5)
assertThat(checkboxes.size).isEqualTo(6)
assertThat(checkboxes.map { it.text }).containsExactlyInAnyOrder(
message("aws.settings.codewhisperer.include_code_with_reference"),
message("aws.settings.codewhisperer.configurable.opt_out.title"),
message("aws.settings.codewhisperer.automatic_import_adder"),
"Workspace context",
message("aws.settings.codewhisperer.project_context"),
message("aws.settings.codewhisperer.project_context_gpu")
)

val comments = panel.components.filterIsInstance<DslLabel>()
assertThat(comments.size).isEqualTo(8)
assertThat(comments.size).isEqualTo(9)

mockCodeWhispererEnabledStatus(false)
ApplicationManager.getApplication().messageBus.syncPublisher(ToolkitConnectionManagerListener.TOPIC)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,8 @@ class CodeWhispererServiceTest {
connection = ToolkitConnectionManager.getInstance(projectRule.project).activeConnection(),
latencyContext = LatencyContext(),
customizationArn = "fake-arn",
profileArn = "fake-arn"
profileArn = "fake-arn",
workspaceId = null,
)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,22 @@ import com.intellij.openapi.wm.impl.status.widget.StatusBarWidgetsManager
import com.intellij.testFramework.replaceService
import com.intellij.testFramework.runInEdtAndWait
import com.intellij.util.xmlb.XmlSerializer
import io.mockk.every
import io.mockk.junit4.MockKRule
import io.mockk.mockkObject
import org.assertj.core.api.Assertions.assertThat
import org.jdom.output.XMLOutputter
import org.junit.Before
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.mockito.kotlin.any
import org.mockito.kotlin.never
import org.mockito.kotlin.spy
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
import software.aws.toolkits.jetbrains.core.ToolWindowHeadlessManagerImpl
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererLoginType
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExploreActionState
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.isCodeWhispererEnabled
Expand All @@ -40,6 +45,9 @@ class CodeWhispererSettingsTest : CodeWhispererTestBase() {
private lateinit var codewhispererServiceSpy: CodeWhispererService
private lateinit var toolWindowHeadlessManager: ToolWindowHeadlessManagerImpl

@get:Rule
val mockkRule = MockKRule(this)

@Before
override fun setUp() {
super.setUp()
Expand Down Expand Up @@ -246,6 +254,18 @@ class CodeWhispererSettingsTest : CodeWhispererTestBase() {
assertThat(sut.getProjectContextIndexMaxSize()).isEqualTo(expected)
}
}

@Test
fun `toggleMetricOptIn should trigger LSP didChangeConfiguration`() {
mockkObject(AmazonQLspService)
every { AmazonQLspService.didChangeConfiguration(any()) } returns Unit
settingsManager.toggleMetricOptIn(true)
settingsManager.toggleMetricOptIn(false)

io.mockk.verify(atLeast = 2) {
AmazonQLspService.didChangeConfiguration(any())
}
}
}

class CodeWhispererSettingUnitTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,8 @@ fun aRequestContext(
aString()
),
customizationArn = null,
profileArn = null
profileArn = null,
workspaceId = null,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="migration.software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager"/>
</extensions>

</idea-plugin>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// 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

import org.eclipse.lsp4j.jsonrpc.services.JsonRequest
import org.eclipse.lsp4j.services.LanguageClient
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata
import java.util.concurrent.CompletableFuture

/**
* Requests sent by server to client
*/
@Suppress("unused")
interface AmazonQLanguageClient : LanguageClient {
@JsonRequest("aws/credentials/getConnectionMetadata")
fun getConnectionMetadata(): CompletableFuture<ConnectionMetadata>
}
Loading
Loading