Skip to content

Commit 2678ba1

Browse files
authored
Adding all files in project wide scans, gitIgnore Parsing and seperate section for code scans in status bar (#4248)
* Added New section for code scans in status bar and added changes to include all files under project wihtout git ignore files. * Added tests for gitignore parsing, correcting tests for project wide scans. * correction for RubyCodeScanTest. * Removed language codescan configs and corrected unit tests. removed import parsing/file parsing mechanisms. * Removed queue for file payload creation. Added default payload and timeout limits. * Added ProjectFileParsingManager to include git ignore parsing, project file collection. * Moves FeatureDevSessionContext to core module to avoid deduping in toolkit and for codescan utility. * Removing File Scans and setting Auto Code Scan to false for builder Id users. * Correcting Project Scan Timeout Period. * Adding comment for gitignore patterns. * Update CodeScanSessionConfig.kt to change `gitIgnoreParser` to `featureDevSessionContext`
1 parent ba49c62 commit 2678ba1

File tree

34 files changed

+292
-1295
lines changed

34 files changed

+292
-1295
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/Session.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session
55

66
import com.intellij.openapi.project.Project
77
import com.intellij.openapi.vfs.VfsUtil
8+
import software.aws.toolkits.jetbrains.services.amazonq.FeatureDevSessionContext
89
import software.aws.toolkits.jetbrains.services.amazonq.messages.MessagePublisher
910
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.APPROACH_RETRY_LIMIT
1011
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.CODE_GENERATION_RETRY_LIMIT

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/SessionStateTypes.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session
55

66
import com.fasterxml.jackson.annotation.JsonValue
7+
import software.aws.toolkits.jetbrains.services.amazonq.FeatureDevSessionContext
78
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.clients.FeatureDevClient
89
import software.aws.toolkits.jetbrains.services.cwc.messages.CodeReference
910

plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/PrepareRefinementStateTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ import org.mockito.kotlin.mock
1818
import org.mockito.kotlin.times
1919
import org.mockito.kotlin.verify
2020
import org.mockito.kotlin.whenever
21+
import software.aws.toolkits.jetbrains.services.amazonq.FeatureDevSessionContext
22+
import software.aws.toolkits.jetbrains.services.amazonq.ZipCreationResult
2123
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.FeatureDevTestBase
2224
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.clients.FeatureDevClient
23-
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.model.ZipCreationResult
2425
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.uploadArtifactToS3
2526
import java.io.File
2627

plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/RefinementStateTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import org.mockito.kotlin.mock
1515
import org.mockito.kotlin.times
1616
import org.mockito.kotlin.verify
1717
import org.mockito.kotlin.whenever
18+
import software.aws.toolkits.jetbrains.services.amazonq.FeatureDevSessionContext
1819
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.FeatureDevException
1920
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.FeatureDevTestBase
2021
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.clients.FeatureDevClient
Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session
4+
package software.aws.toolkits.jetbrains.services.amazonq
55

66
import com.intellij.openapi.application.runReadAction
77
import com.intellij.openapi.project.Project
@@ -11,22 +11,22 @@ import com.intellij.openapi.vfs.VirtualFile
1111
import org.apache.commons.codec.digest.DigestUtils
1212
import software.aws.toolkits.core.utils.createTemporaryZipFile
1313
import software.aws.toolkits.core.utils.putNextEntry
14-
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.model.ZipCreationResult
1514
import java.io.File
1615
import java.io.FileInputStream
1716
import java.util.Base64
1817
import kotlin.io.path.Path
1918
import kotlin.io.path.relativeTo
2019

2120
class FeatureDevSessionContext(val project: Project) {
21+
// TODO: Need to correct this class location in the modules going further to support both amazonq and codescan.
2222

23-
private var _projectRoot = project.guessProjectDir() ?: error("Cannot guess base directory for project ${project.name}")
2423
private val ignorePatterns = listOf(
2524
"\\.aws-sam",
2625
"\\.svn",
2726
"\\.hg/",
2827
"\\.rvm",
2928
"\\.git/",
29+
"\\.gitignore",
3030
"\\.project",
3131
"\\.gem",
3232
"/\\.idea/",
@@ -44,16 +44,23 @@ class FeatureDevSessionContext(val project: Project) {
4444
"/LICENSE\\.md$",
4545
).map { Regex(it) }
4646

47+
private var _projectRoot = project.guessProjectDir() ?: error("Cannot guess base directory for project ${project.name}")
48+
private var ignorePatternsWithGitIgnore = emptyList<Regex>()
49+
private val gitIgnoreFile = File(projectRoot.path, ".gitignore")
50+
51+
init {
52+
ignorePatternsWithGitIgnore = ignorePatterns + parseGitIgnore().map { Regex(it) }
53+
}
54+
4755
fun getProjectZip(): ZipCreationResult {
4856
val zippedProject = runReadAction { zipFiles(projectRoot) }
4957
val checkSum256: String = Base64.getEncoder().encodeToString(DigestUtils.sha256(FileInputStream(zippedProject)))
5058
return ZipCreationResult(zippedProject, checkSum256, zippedProject.length())
5159
}
5260

53-
private fun ignoreFile(file: File): Boolean {
54-
val ignorePatternsWithGitIgnore = ignorePatterns + parseGitIgnore(File(projectRoot.path, ".gitignore")).map { Regex(it) }
55-
return ignorePatternsWithGitIgnore.any { p -> p.containsMatchIn(file.path) }
56-
}
61+
fun ignoreFile(file: File): Boolean = ignorePatternsWithGitIgnore.any { p -> p.containsMatchIn(file.path) }
62+
63+
fun ignoreFile(file: VirtualFile): Boolean = ignoreFile(File(file.path))
5764

5865
private fun zipFiles(projectRoot: VirtualFile): File = createTemporaryZipFile {
5966
VfsUtil.collectChildrenRecursively(projectRoot).map { virtualFile -> File(virtualFile.path) }.forEach { file ->
@@ -64,7 +71,7 @@ class FeatureDevSessionContext(val project: Project) {
6471
}
6572
}.toFile()
6673

67-
private fun parseGitIgnore(gitIgnoreFile: File): List<String> {
74+
private fun parseGitIgnore(): List<String> {
6875
if (!gitIgnoreFile.exists()) {
6976
return emptyList()
7077
}
@@ -74,6 +81,7 @@ class FeatureDevSessionContext(val project: Project) {
7481
.map { convertGitIgnorePatternToRegex(it) }
7582
}
7683

84+
// gitignore patterns are not regex, method update needed.
7785
private fun convertGitIgnorePatternToRegex(pattern: String): String = pattern
7886
.replace(".", "\\.")
7987
.replace("*", ".*")
@@ -85,3 +93,5 @@ class FeatureDevSessionContext(val project: Project) {
8593
}
8694
get() = _projectRoot
8795
}
96+
97+
data class ZipCreationResult(val payload: File, val checksum: String, val contentLength: Long)

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanManager.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWh
6363
import software.aws.toolkits.jetbrains.services.codewhisperer.editor.CodeWhispererEditorUtil.overlaps
6464
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager
6565
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.isCodeWhispererEnabled
66+
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.isUserBuilderId
6667
import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage
6768
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererUnknownLanguage
6869
import software.aws.toolkits.jetbrains.services.codewhisperer.language.programmingLanguage
@@ -144,15 +145,14 @@ class CodeWhispererCodeScanManager(val project: Project) {
144145
isCodeScanInProgress.set(false)
145146
return
146147
}
147-
148148
// If scanType is project
149149
if (scanType == CodeWhispererConstants.SecurityScanType.PROJECT) {
150150
// Prepare for a project code scan
151151
beforeCodeScan()
152152
// launch code scan coroutine
153153
codeScanJob = launchCodeScanCoroutine(CodeWhispererConstants.SecurityScanType.PROJECT)
154154
} else {
155-
if (CodeWhispererExplorerActionManager.getInstance().isAutoEnabledForCodeScan()) {
155+
if (CodeWhispererExplorerActionManager.getInstance().isAutoEnabledForCodeScan() and !isUserBuilderId(project)) {
156156
// Add File Scan
157157
codeScanJob = launchCodeScanCoroutine(CodeWhispererConstants.SecurityScanType.FILE)
158158
}

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/sessionconfig/CloudFormationJsonCodeScanSessionConfig.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/sessionconfig/CloudFormationYamlCodeScanSessionConfig.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)