Skip to content

Commit 836348a

Browse files
authored
Merge branch 'main' into jurredr/update-help-message
2 parents 9feee08 + 892598f commit 836348a

File tree

9 files changed

+50
-9
lines changed

9 files changed

+50
-9
lines changed

.changes/3.49.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"date" : "2025-01-17",
3+
"version" : "3.49",
4+
"entries" : [ {
5+
"type" : "bugfix",
6+
"description" : "/review: Improved success rate of code reviews for certain workspace configurations"
7+
} ]
8+
}

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# _3.49_ (2025-01-17)
2+
- **(Bug Fix)** /review: Improved success rate of code reviews for certain workspace configurations
3+
14
# _3.48_ (2025-01-16)
25
- **(Feature)** Enhance Q inline completion context fetching for better suggestion quality
36
- **(Feature)** /doc: Add error message if updated README is too large

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# SPDX-License-Identifier: Apache-2.0
33

44
# Toolkit Version
5-
toolkitVersion=3.48
5+
toolkitVersion=3.50-SNAPSHOT
66

77
# Publish Settings
88
publishToken=

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/editor/context/focusArea/FocusAreaContextExtractor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ class FocusAreaContextExtractor(private val fqnWebviewAdapter: FqnWebviewAdapter
180180
val startOffset = 0.coerceAtLeast(offset - halfMaxCharacters)
181181
val endOffset = fileText.length.coerceAtMost(offset + halfMaxCharacters)
182182

183-
// Adjust the start and end offsets if necessary to ensure a total of 40k characters
183+
// Adjust the start and end offsets if necessary to ensure a total of 10k characters
184184
val excessCharacters = maxCharacters - (endOffset - startOffset)
185185
val adjustedStartOffset = 0.coerceAtLeast(startOffset - excessCharacters)
186186
val adjustedEndOffset = fileText.length.coerceAtMost(endOffset + excessCharacters)
@@ -198,7 +198,7 @@ class FocusAreaContextExtractor(private val fqnWebviewAdapter: FqnWebviewAdapter
198198
}
199199

200200
companion object {
201-
const val MAX_LENGTH = 40000
201+
const val MAX_LENGTH = 10000
202202
}
203203
}
204204

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/controller/CodeTransformChatController.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,8 @@ class CodeTransformChatController(
686686
is CodeModernizerJobCompletedResult.Stopped, CodeModernizerJobCompletedResult.JobAbortedBeforeStarting -> handleCodeTransformStoppedByUser()
687687
is CodeModernizerJobCompletedResult.JobFailed -> handleCodeTransformJobFailed(result.failureReason)
688688
is CodeModernizerJobCompletedResult.JobFailedInitialBuild -> handleCodeTransformJobFailedPreBuild(result)
689+
is CodeModernizerJobCompletedResult.RetryableFailure -> handleCodeTransformJobFailed(result.failureReason)
690+
is CodeModernizerJobCompletedResult.UnableToCreateJob -> handleCodeTransformJobFailed(result.failureReason)
689691
else -> {
690692
if (result is CodeModernizerJobCompletedResult.ZipUploadFailed && result.failureReason is UploadFailureReason.CREDENTIALS_EXPIRED) {
691693
return

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhisperer
3636
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.CodeAnalysisScope
3737
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.DEFAULT_CODE_SCAN_TIMEOUT_IN_SECONDS
3838
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.DEFAULT_PAYLOAD_LIMIT_IN_BYTES
39+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.EXPRESS_SCAN_TIMEOUT_IN_SECONDS
3940
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.FILE_SCAN_PAYLOAD_SIZE_LIMIT_IN_BYTES
40-
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.FILE_SCAN_TIMEOUT_IN_SECONDS
41+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.isWithin
4142
import software.aws.toolkits.resources.message
4243
import software.aws.toolkits.telemetry.CodewhispererLanguage
4344
import java.io.File
@@ -67,9 +68,11 @@ class CodeScanSessionConfig(
6768
/**
6869
* Timeout for the overall job - "Run Security Scan".
6970
*/
70-
fun overallJobTimeoutInSeconds(): Long = when (scope) {
71-
CodeAnalysisScope.FILE -> FILE_SCAN_TIMEOUT_IN_SECONDS
72-
else -> DEFAULT_CODE_SCAN_TIMEOUT_IN_SECONDS
71+
fun overallJobTimeoutInSeconds(): Long {
72+
if (scope == CodeAnalysisScope.FILE && !initiatedByChat) {
73+
return EXPRESS_SCAN_TIMEOUT_IN_SECONDS
74+
}
75+
return DEFAULT_CODE_SCAN_TIMEOUT_IN_SECONDS
7376
}
7477

7578
fun getPayloadLimitInBytes(): Long = when (scope) {
@@ -106,7 +109,7 @@ class CodeScanSessionConfig(
106109
null -> getProjectPayloadMetadata()
107110
else -> when (scope) {
108111
CodeAnalysisScope.PROJECT -> getProjectPayloadMetadata()
109-
CodeAnalysisScope.FILE -> if (selectedFile.path.startsWith(projectRoot.path)) {
112+
CodeAnalysisScope.FILE -> if (selectedFile.isWithin(projectRoot)) {
110113
getFilePayloadMetadata(selectedFile, true)
111114
} else {
112115
projectRoot = selectedFile.parent

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/util/CodeWhispererConstants.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ object CodeWhispererConstants {
7676
const val FILE_SCAN_INITIAL_POLLING_INTERVAL_IN_SECONDS: Long = 10
7777
const val PROJECT_SCAN_INITIAL_POLLING_INTERVAL_IN_SECONDS: Long = 30
7878
const val CODE_SCAN_CREATE_PAYLOAD_TIMEOUT_IN_SECONDS: Long = 10
79-
const val FILE_SCAN_TIMEOUT_IN_SECONDS: Long = 60 * 10 // 10 minutes
79+
const val EXPRESS_SCAN_TIMEOUT_IN_SECONDS: Long = 60
8080
const val FILE_SCAN_PAYLOAD_SIZE_LIMIT_IN_BYTES: Long = 1024 * 200 // 200KB
8181
const val AUTO_SCAN_DEBOUNCE_DELAY_IN_SECONDS: Long = 30
8282
const val CODE_FIX_CREATE_PAYLOAD_TIMEOUT_IN_SECONDS: Long = 10

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/util/CodeWhispererUtil.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.intellij.openapi.editor.Editor
1212
import com.intellij.openapi.editor.impl.EditorImpl
1313
import com.intellij.openapi.project.Project
1414
import com.intellij.openapi.vfs.VfsUtil
15+
import com.intellij.openapi.vfs.VfsUtilCore
1516
import com.intellij.openapi.vfs.VirtualFile
1617
import com.intellij.openapi.wm.WindowManager
1718
import com.intellij.ui.ComponentUtil
@@ -152,6 +153,8 @@ fun VirtualFile.toCodeChunk(path: String): Sequence<Chunk> = sequence {
152153
}
153154
}
154155

156+
fun VirtualFile.isWithin(ancestor: VirtualFile): Boolean = VfsUtilCore.isAncestor(ancestor, this, false)
157+
155158
object CodeWhispererUtil {
156159
fun getCompletionType(completion: Completion): CodewhispererCompletionType {
157160
val content = completion.content()

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererUtilTest.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import software.aws.toolkits.jetbrains.core.region.MockRegionProviderRule
2424
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil.getCompletionType
2525
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil.getTelemetryOptOutPreference
2626
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil.getUnmodifiedAcceptedCharsCount
27+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.isWithin
2728
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIdcConnectionOrTelemetryEnabled
2829
import software.aws.toolkits.jetbrains.services.codewhisperer.util.toCodeChunk
2930
import software.aws.toolkits.jetbrains.settings.AwsSettings
@@ -237,4 +238,25 @@ class CodeWhispererUtilTest {
237238
unmodifiedCharsCount = getUnmodifiedAcceptedCharsCount(originalRecommendation, modifiedRecommendation)
238239
assertThat(unmodifiedCharsCount).isEqualTo(originalRecommendation.length)
239240
}
241+
242+
@Test
243+
fun `test isWithin() returns true if file is within the given directory`() {
244+
val projectRoot = fixture.tempDirFixture.findOrCreateDir("workspace/projectA")
245+
val file = fixture.addFileToProject("workspace/projectA/src/Sample.java", "").virtualFile
246+
assertThat(file.isWithin(projectRoot)).isTrue()
247+
}
248+
249+
@Test
250+
fun `test isWithin() returns false if file is not within the given directory`() {
251+
val projectRoot = fixture.tempDirFixture.findOrCreateDir("workspace/projectA")
252+
val file = fixture.addFileToProject("workspace/projectB/src/Sample.java", "").virtualFile
253+
assertThat(file.isWithin(projectRoot)).isFalse()
254+
}
255+
256+
@Test
257+
fun `test isWithin() returns false if file is not within the given directory but has the same prefix`() {
258+
val projectRoot = fixture.tempDirFixture.findOrCreateDir("workspace/projectA")
259+
val file = fixture.addFileToProject("workspace/projectA1/src/Sample.java", "").virtualFile
260+
assertThat(file.isWithin(projectRoot)).isFalse()
261+
}
240262
}

0 commit comments

Comments
 (0)