Skip to content

Commit a5c4c1a

Browse files
Merge branch 'feature/q-lsp' into samgst/q-lsp-inlineCompletion
2 parents 8eca4ad + 3abcd1f commit a5c4c1a

File tree

9 files changed

+138
-65
lines changed

9 files changed

+138
-65
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "/review: Respect user option to allow code suggestions with references"
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "feature",
3+
"description" : "/review: automatically generate fix without clicking Generate Fix button"
4+
}

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/AmazonQCodeFixSession.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import software.amazon.awssdk.services.codewhispererruntime.model.GetCodeFixJobR
1414
import software.amazon.awssdk.services.codewhispererruntime.model.GetCodeFixJobResponse
1515
import software.amazon.awssdk.services.codewhispererruntime.model.Position
1616
import software.amazon.awssdk.services.codewhispererruntime.model.Range
17+
import software.amazon.awssdk.services.codewhispererruntime.model.RecommendationsWithReferencesPreference
1718
import software.amazon.awssdk.services.codewhispererruntime.model.StartCodeFixJobRequest
1819
import software.amazon.awssdk.services.codewhispererruntime.model.StartCodeFixJobResponse
1920
import software.amazon.awssdk.services.codewhispererruntime.model.UploadContext
@@ -28,6 +29,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWh
2829
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants
2930
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererZipUploadManager
3031
import software.aws.toolkits.jetbrains.services.codewhisperer.util.getTelemetryErrorMessage
32+
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
3133
import software.aws.toolkits.resources.message
3234
import java.io.File
3335
import java.nio.file.Path
@@ -161,12 +163,19 @@ class AmazonQCodeFixSession(val project: Project) {
161163
codeFixName: String? = null,
162164
ruleId: String? = null,
163165
): StartCodeFixJobResponse {
166+
val includeCodeWithReference = if (CodeWhispererSettings.getInstance().isIncludeCodeWithReference()) {
167+
RecommendationsWithReferencesPreference.ALLOW
168+
} else {
169+
RecommendationsWithReferencesPreference.BLOCK
170+
}
171+
164172
val request = StartCodeFixJobRequest.builder()
165173
.uploadId(uploadId)
166174
.snippetRange(snippetRange)
167175
.codeFixName(codeFixName)
168176
.ruleId(ruleId)
169177
.description(description)
178+
.referenceTrackerConfiguration { it.recommendationsWithReferences(includeCodeWithReference) }
170179
.build()
171180

172181
return try {

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanIssueDetailsPanel.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,5 +333,10 @@ internal class CodeWhispererCodeScanIssueDetailsPanel(
333333
add(BorderLayout.SOUTH, buttonPane)
334334
isVisible = true
335335
revalidate()
336+
if (issue.suggestedFixes.isEmpty()) {
337+
defaultScope.launch {
338+
handleGenerateFix(issue)
339+
}
340+
}
336341
}
337342
}

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,16 @@ import org.eclipse.lsp4j.CreateFilesParams
2020
import org.eclipse.lsp4j.DeleteFilesParams
2121
import org.eclipse.lsp4j.DidChangeWatchedFilesParams
2222
import org.eclipse.lsp4j.DidChangeWorkspaceFoldersParams
23+
import org.eclipse.lsp4j.DidCloseTextDocumentParams
24+
import org.eclipse.lsp4j.DidOpenTextDocumentParams
2325
import org.eclipse.lsp4j.FileChangeType
2426
import org.eclipse.lsp4j.FileCreate
2527
import org.eclipse.lsp4j.FileDelete
2628
import org.eclipse.lsp4j.FileEvent
2729
import org.eclipse.lsp4j.FileRename
2830
import org.eclipse.lsp4j.RenameFilesParams
31+
import org.eclipse.lsp4j.TextDocumentIdentifier
32+
import org.eclipse.lsp4j.TextDocumentItem
2933
import org.eclipse.lsp4j.WorkspaceFolder
3034
import org.eclipse.lsp4j.WorkspaceFoldersChangeEvent
3135
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
@@ -135,6 +139,29 @@ class WorkspaceServiceHandler(
135139
val oldUri = toUriString(parentFile)?.let { parentUri -> "$parentUri/$oldFileName" }
136140
val newUri = toUriString(renamedFile)
137141

142+
if (!renamedFile.isDirectory) {
143+
oldUri?.let { uri ->
144+
languageServer.textDocumentService.didClose(
145+
DidCloseTextDocumentParams().apply {
146+
textDocument = TextDocumentIdentifier().apply {
147+
this.uri = uri
148+
}
149+
}
150+
)
151+
}
152+
153+
newUri?.let { uri ->
154+
languageServer.textDocumentService.didOpen(
155+
DidOpenTextDocumentParams().apply {
156+
textDocument = TextDocumentItem().apply {
157+
this.uri = uri
158+
text = renamedFile.inputStream.readAllBytes().decodeToString()
159+
}
160+
}
161+
)
162+
}
163+
}
164+
138165
FileRename().apply {
139166
this.oldUri = oldUri
140167
this.newUri = newUri

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/manifest/ManifestManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import software.aws.toolkits.jetbrains.core.getTextFromUrl
1515

1616
class ManifestManager {
1717
private val cloudFrontUrl = "https://aws-toolkit-language-servers.amazonaws.com/q-context/manifest.json"
18-
val currentVersion = "0.1.32"
18+
val currentVersion = "0.1.46"
1919
val currentOs = getOs()
2020
private val arch = CpuArch.CURRENT
2121
private val mapper = jacksonObjectMapper().apply { configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) }

plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandlerTest.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ import io.mockk.runs
2525
import io.mockk.slot
2626
import io.mockk.verify
2727
import kotlinx.coroutines.test.runTest
28+
import org.assertj.core.api.Assertions.assertThat
2829
import org.eclipse.lsp4j.DidChangeTextDocumentParams
2930
import org.eclipse.lsp4j.DidCloseTextDocumentParams
3031
import org.eclipse.lsp4j.DidOpenTextDocumentParams
3132
import org.eclipse.lsp4j.DidSaveTextDocumentParams
3233
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage
3334
import org.eclipse.lsp4j.services.TextDocumentService
34-
import org.junit.Assert.assertEquals
3535
import org.junit.Before
3636
import org.junit.Test
3737
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer
@@ -127,8 +127,8 @@ class TextDocumentServiceHandlerTest {
127127
verify { mockTextDocumentService.didSave(capture(paramsSlot)) }
128128

129129
with(paramsSlot.captured) {
130-
assertEquals(normalizeFileUri(uri.toString()), textDocument.uri)
131-
assertEquals("test content", text)
130+
assertThat(textDocument.uri).isEqualTo(normalizeFileUri(uri.toString()))
131+
assertThat(text).isEqualTo("test content")
132132
}
133133
}
134134
}
@@ -147,8 +147,8 @@ class TextDocumentServiceHandlerTest {
147147
verify { mockTextDocumentService.didOpen(capture(paramsSlot)) }
148148

149149
with(paramsSlot.captured.textDocument) {
150-
assertEquals(normalizeFileUri(uri.toString()), this.uri)
151-
assertEquals(content, text)
150+
assertThat(this.uri).isEqualTo(normalizeFileUri(uri.toString()))
151+
assertThat(text).isEqualTo(content)
152152
}
153153
}
154154

@@ -168,8 +168,8 @@ class TextDocumentServiceHandlerTest {
168168
verify { mockTextDocumentService.didOpen(capture(paramsSlot)) }
169169

170170
with(paramsSlot.captured.textDocument) {
171-
assertEquals(normalizeFileUri(uri.toString()), this.uri)
172-
assertEquals(content, text)
171+
assertThat(this.uri).isEqualTo(normalizeFileUri(uri.toString()))
172+
assertThat(text).isEqualTo(content)
173173
}
174174
}
175175

@@ -183,7 +183,7 @@ class TextDocumentServiceHandlerTest {
183183
val paramsSlot = slot<DidCloseTextDocumentParams>()
184184
verify { mockTextDocumentService.didClose(capture(paramsSlot)) }
185185

186-
assertEquals(normalizeFileUri(uri.toString()), paramsSlot.captured.textDocument.uri)
186+
assertThat(paramsSlot.captured.textDocument.uri).isEqualTo(normalizeFileUri(uri.toString()))
187187
}
188188

189189
@Test
@@ -217,9 +217,9 @@ class TextDocumentServiceHandlerTest {
217217
verify { mockTextDocumentService.didChange(capture(paramsSlot)) }
218218

219219
with(paramsSlot.captured) {
220-
assertEquals(normalizeFileUri(uri.toString()), textDocument.uri)
221-
assertEquals(123, textDocument.version)
222-
assertEquals("changed content", contentChanges[0].text)
220+
assertThat(textDocument.uri).isEqualTo(normalizeFileUri(uri.toString()))
221+
assertThat(textDocument.version).isEqualTo(123)
222+
assertThat(contentChanges[0].text).isEqualTo("changed content")
223223
}
224224
}
225225

plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/WorkspaceFolderUtilTest.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import com.intellij.openapi.roots.ProjectRootManager
88
import com.intellij.openapi.vfs.VirtualFile
99
import io.mockk.every
1010
import io.mockk.mockk
11-
import org.junit.jupiter.api.Assertions.assertEquals
11+
import org.assertj.core.api.Assertions.assertThat
1212
import org.junit.jupiter.api.Test
1313
import java.net.URI
1414
import java.nio.file.Path
@@ -22,7 +22,7 @@ class WorkspaceFolderUtilTest {
2222

2323
val result = WorkspaceFolderUtil.createWorkspaceFolders(mockProject)
2424

25-
assertEquals(emptyList<VirtualFile>(), result)
25+
assertThat(result).isEqualTo(emptyList<VirtualFile>())
2626
}
2727

2828
@Test
@@ -44,11 +44,11 @@ class WorkspaceFolderUtilTest {
4444

4545
val result = WorkspaceFolderUtil.createWorkspaceFolders(mockProject)
4646

47-
assertEquals(2, result.size)
48-
assertEquals(normalizeFileUri("file:///path/to/root1"), result[0].uri)
49-
assertEquals(normalizeFileUri("file:///path/to/root2"), result[1].uri)
50-
assertEquals("root1", result[0].name)
51-
assertEquals("root2", result[1].name)
47+
assertThat(result).hasSize(2)
48+
assertThat(result[0].uri).isEqualTo(normalizeFileUri("file:///path/to/root1"))
49+
assertThat(result[1].uri).isEqualTo(normalizeFileUri("file:///path/to/root2"))
50+
assertThat(result[0].name).isEqualTo("root1")
51+
assertThat(result[1].name).isEqualTo("root2")
5252
}
5353

5454
@Test
@@ -62,7 +62,7 @@ class WorkspaceFolderUtilTest {
6262

6363
val result = WorkspaceFolderUtil.createWorkspaceFolders(mockProject)
6464

65-
assertEquals(emptyList<VirtualFile>(), result)
65+
assertThat(result).isEqualTo(emptyList<VirtualFile>())
6666
}
6767

6868
private fun createMockVirtualFile(uri: URI, name: String): VirtualFile {

0 commit comments

Comments
 (0)