@aws/lsp-codewhisperer 0.0.69 → 0.0.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/out/language-server/agenticChat/agenticChatController.js +53 -28
- package/out/language-server/agenticChat/agenticChatController.js.map +1 -1
- package/out/language-server/agenticChat/constants/constants.d.ts +1 -1
- package/out/language-server/agenticChat/constants/constants.js +2 -1
- package/out/language-server/agenticChat/constants/constants.js.map +1 -1
- package/out/language-server/agenticChat/constants/toolConstants.d.ts +1 -1
- package/out/language-server/agenticChat/constants/toolConstants.js +2 -2
- package/out/language-server/agenticChat/constants/toolConstants.js.map +1 -1
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.js +1 -1
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.js.map +1 -1
- package/out/language-server/agenticChat/qAgenticChatServer.d.ts +1 -1
- package/out/language-server/agenticChat/qAgenticChatServer.js +7 -8
- package/out/language-server/agenticChat/qAgenticChatServer.js.map +1 -1
- package/out/language-server/agenticChat/tools/chatDb/chatDb.d.ts +1 -0
- package/out/language-server/agenticChat/tools/chatDb/chatDb.js +3 -3
- package/out/language-server/agenticChat/tools/chatDb/chatDb.js.map +1 -1
- package/out/language-server/agenticChat/tools/executeBash.d.ts +3 -1
- package/out/language-server/agenticChat/tools/executeBash.js +28 -24
- package/out/language-server/agenticChat/tools/executeBash.js.map +1 -1
- package/out/language-server/agenticChat/tools/mcp/mcpEventHandler.js +258 -165
- package/out/language-server/agenticChat/tools/mcp/mcpEventHandler.js.map +1 -1
- package/out/language-server/agenticChat/tools/mcp/mcpManager.d.ts +42 -17
- package/out/language-server/agenticChat/tools/mcp/mcpManager.js +254 -78
- package/out/language-server/agenticChat/tools/mcp/mcpManager.js.map +1 -1
- package/out/language-server/agenticChat/tools/mcp/mcpTypes.d.ts +3 -1
- package/out/language-server/agenticChat/tools/mcp/mcpTypes.js.map +1 -1
- package/out/language-server/agenticChat/tools/mcp/mcpUtils.js +36 -16
- package/out/language-server/agenticChat/tools/mcp/mcpUtils.js.map +1 -1
- package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReview.d.ts → codeReview.d.ts} +4 -3
- package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReview.js → codeReview.js} +179 -127
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReview.js.map +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewConstants.d.ts → codeReviewConstants.d.ts} +8 -6
- package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewConstants.js → codeReviewConstants.js} +32 -20
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewConstants.js.map +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewErrors.d.ts +12 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewErrors.js +32 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewErrors.js.map +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewSchemas.d.ts → codeReviewSchemas.d.ts} +6 -6
- package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewSchemas.js → codeReviewSchemas.js} +15 -15
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewSchemas.js.map +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewTypes.d.ts → codeReviewTypes.d.ts} +22 -1
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewTypes.js +15 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewTypes.js.map +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewUtils.d.ts → codeReviewUtils.d.ts} +16 -14
- package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewUtils.js → codeReviewUtils.js} +38 -46
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewUtils.js.map +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindings.d.ts +89 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindings.js +138 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindings.js.map +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsConstants.d.ts +14 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsConstants.js +40 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsConstants.js.map +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsSchemas.d.ts +177 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsSchemas.js +93 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsSchemas.js.map +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsTypes.d.ts +27 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsTypes.js +12 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsTypes.js.map +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsUtils.d.ts +17 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsUtils.js +33 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsUtils.js.map +1 -0
- package/out/language-server/agenticChat/tools/toolServer.js +30 -10
- package/out/language-server/agenticChat/tools/toolServer.js.map +1 -1
- package/out/language-server/agenticChat/utils/commandParser.d.ts +17 -0
- package/out/language-server/agenticChat/utils/commandParser.js +85 -0
- package/out/language-server/agenticChat/utils/commandParser.js.map +1 -0
- package/out/language-server/chat/chatController.js +77 -0
- package/out/language-server/chat/chatController.js.map +1 -1
- package/out/language-server/chat/chatSessionService.js +19 -5
- package/out/language-server/chat/chatSessionService.js.map +1 -1
- package/out/language-server/chat/constants.d.ts +1 -0
- package/out/language-server/chat/constants.js +2 -1
- package/out/language-server/chat/constants.js.map +1 -1
- package/out/language-server/chat/telemetry/chatTelemetryController.d.ts +4 -2
- package/out/language-server/chat/telemetry/chatTelemetryController.js +13 -2
- package/out/language-server/chat/telemetry/chatTelemetryController.js.map +1 -1
- package/out/language-server/chat/utils.js +6 -0
- package/out/language-server/chat/utils.js.map +1 -1
- package/out/language-server/configuration/qConfigurationServer.d.ts +2 -1
- package/out/language-server/configuration/qConfigurationServer.js.map +1 -1
- package/out/language-server/inline-completion/auto-trigger/autoTrigger.js +2 -1
- package/out/language-server/inline-completion/auto-trigger/autoTrigger.js.map +1 -1
- package/out/language-server/inline-completion/codeWhispererServer.js +48 -143
- package/out/language-server/inline-completion/codeWhispererServer.js.map +1 -1
- package/out/language-server/inline-completion/telemetry.d.ts +9 -0
- package/out/language-server/inline-completion/telemetry.js +109 -0
- package/out/language-server/inline-completion/telemetry.js.map +1 -0
- package/out/language-server/netTransform/validation.d.ts +5 -0
- package/out/language-server/netTransform/validation.js +9 -2
- package/out/language-server/netTransform/validation.js.map +1 -1
- package/out/language-server/workspaceContext/artifactManager.d.ts +1 -0
- package/out/language-server/workspaceContext/artifactManager.js +55 -19
- package/out/language-server/workspaceContext/artifactManager.js.map +1 -1
- package/out/language-server/workspaceContext/workspaceContextServer.js +2 -0
- package/out/language-server/workspaceContext/workspaceContextServer.js.map +1 -1
- package/out/language-server/workspaceContext/workspaceFolderManager.d.ts +3 -0
- package/out/language-server/workspaceContext/workspaceFolderManager.js +24 -5
- package/out/language-server/workspaceContext/workspaceFolderManager.js.map +1 -1
- package/out/shared/amazonQServiceManager/AmazonQTokenServiceManager.d.ts +1 -0
- package/out/shared/amazonQServiceManager/AmazonQTokenServiceManager.js +16 -7
- package/out/shared/amazonQServiceManager/AmazonQTokenServiceManager.js.map +1 -1
- package/out/shared/amazonQServiceManager/qDeveloperProfiles.js +48 -5
- package/out/shared/amazonQServiceManager/qDeveloperProfiles.js.map +1 -1
- package/out/shared/codeWhispererService.js +1 -0
- package/out/shared/codeWhispererService.js.map +1 -1
- package/out/shared/languageDetection.d.ts +14 -0
- package/out/shared/languageDetection.js +20 -0
- package/out/shared/languageDetection.js.map +1 -1
- package/out/shared/localProjectContextController.js +1 -3
- package/out/shared/localProjectContextController.js.map +1 -1
- package/out/shared/models/constants.js +2 -1
- package/out/shared/models/constants.js.map +1 -1
- package/out/shared/supplementalContextUtil/crossFileContextUtil.d.ts +4 -4
- package/out/shared/supplementalContextUtil/crossFileContextUtil.js +112 -18
- package/out/shared/supplementalContextUtil/crossFileContextUtil.js.map +1 -1
- package/out/shared/supplementalContextUtil/supplementalContextUtil.d.ts +1 -1
- package/out/shared/supplementalContextUtil/supplementalContextUtil.js +2 -2
- package/out/shared/supplementalContextUtil/supplementalContextUtil.js.map +1 -1
- package/out/shared/telemetry/telemetryService.js +36 -17
- package/out/shared/telemetry/telemetryService.js.map +1 -1
- package/out/shared/telemetry/types.d.ts +19 -1
- package/out/shared/telemetry/types.js +8 -1
- package/out/shared/telemetry/types.js.map +1 -1
- package/out/shared/utils.d.ts +12 -0
- package/out/shared/utils.js +53 -3
- package/out/shared/utils.js.map +1 -1
- package/package.json +4 -4
- package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReview.js.map +0 -1
- package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewConstants.js.map +0 -1
- package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewErrors.d.ts +0 -12
- package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewErrors.js +0 -32
- package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewErrors.js.map +0 -1
- package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewSchemas.js.map +0 -1
- package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewTypes.js +0 -3
- package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewTypes.js.map +0 -1
- package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewUtils.js.map +0 -1
package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReview.js → codeReview.js}
RENAMED
|
@@ -1,38 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/* eslint-disable import/no-nodejs-modules */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
4
|
+
exports.CodeReview = void 0;
|
|
5
|
+
const codeReviewConstants_1 = require("./codeReviewConstants");
|
|
6
|
+
const codeReviewUtils_1 = require("./codeReviewUtils");
|
|
7
|
+
const codeReviewSchemas_1 = require("./codeReviewSchemas");
|
|
8
8
|
const crypto_1 = require("crypto");
|
|
9
9
|
const crypto = require("crypto");
|
|
10
10
|
const path = require("path");
|
|
11
11
|
const JSZip = require("jszip");
|
|
12
12
|
const fs_1 = require("fs");
|
|
13
|
-
const
|
|
13
|
+
const codeReviewErrors_1 = require("./codeReviewErrors");
|
|
14
|
+
const codeReviewTypes_1 = require("./codeReviewTypes");
|
|
14
15
|
const lsp_core_1 = require("@aws/lsp-core");
|
|
15
|
-
class
|
|
16
|
+
class CodeReview {
|
|
16
17
|
static CUSTOMER_CODE_BASE_PATH = 'customerCodeBaseFolder';
|
|
17
18
|
static CODE_ARTIFACT_PATH = 'code_artifact';
|
|
18
19
|
static CUSTOMER_CODE_ZIP_NAME = 'customerCode.zip';
|
|
19
20
|
static CODE_DIFF_PATH = 'code_artifact/codeDiff/customerCodeDiff.diff';
|
|
20
21
|
static RULE_ARTIFACT_PATH = '.amazonq/rules';
|
|
21
|
-
static MAX_POLLING_ATTEMPTS =
|
|
22
|
-
static MID_POLLING_ATTEMPTS =
|
|
23
|
-
static POLLING_INTERVAL_MS = 10000;
|
|
22
|
+
static MAX_POLLING_ATTEMPTS = 90; // 90 * POLLING_INTERVAL_MS (10000) = 15 mins
|
|
23
|
+
static MID_POLLING_ATTEMPTS = 20;
|
|
24
|
+
static POLLING_INTERVAL_MS = 10000; // 10 seconds
|
|
24
25
|
static UPLOAD_INTENT = 'AGENTIC_CODE_REVIEW';
|
|
25
26
|
static SCAN_SCOPE = 'AGENTIC';
|
|
26
27
|
static MAX_FINDINGS_COUNT = 50;
|
|
27
28
|
static ERROR_MESSAGES = {
|
|
28
29
|
MISSING_CLIENT: 'CodeWhisperer client not available',
|
|
29
|
-
MISSING_ARTIFACTS: `Missing fileLevelArtifacts and folderLevelArtifacts for ${
|
|
30
|
-
MISSING_FILES_TO_SCAN: `There are no valid files to scan.
|
|
31
|
-
UPLOAD_FAILED: `Failed to upload artifact for code review in ${
|
|
32
|
-
START_CODE_ANALYSIS_FAILED: (
|
|
30
|
+
MISSING_ARTIFACTS: `Missing fileLevelArtifacts and folderLevelArtifacts for ${codeReviewConstants_1.CODE_REVIEW_TOOL_NAME} tool. Ask user to provide a specific file / folder / workspace which has code that can be scanned.`,
|
|
31
|
+
MISSING_FILES_TO_SCAN: `There are no valid files to scan in the input. Use other available tools to find the correct path to the files, otherwise ask user to provide a specific file which has code that can be scanned.`,
|
|
32
|
+
UPLOAD_FAILED: `Failed to upload artifact for code review in ${codeReviewConstants_1.CODE_REVIEW_TOOL_NAME} tool.`,
|
|
33
|
+
START_CODE_ANALYSIS_FAILED: (scanName, errorMessage) => `Failed to start code analysis for scanName - ${scanName} due to - ${errorMessage}`,
|
|
33
34
|
CODE_ANALYSIS_FAILED: (jobId, message) => `Code analysis failed for jobId - ${jobId} due to ${message}`,
|
|
34
35
|
SCAN_FAILED: 'Code scan failed',
|
|
35
|
-
TIMEOUT:
|
|
36
|
+
TIMEOUT: `Code review timed out. Ask user to provide a smaller size of code to scan.`,
|
|
36
37
|
};
|
|
37
38
|
credentialsProvider;
|
|
38
39
|
logging;
|
|
@@ -41,25 +42,27 @@ class QCodeReview {
|
|
|
41
42
|
codeWhispererClient;
|
|
42
43
|
cancellationToken;
|
|
43
44
|
writableStream;
|
|
45
|
+
toolStartTime = 0;
|
|
44
46
|
constructor(features) {
|
|
45
47
|
this.credentialsProvider = features.credentialsProvider;
|
|
46
48
|
this.logging = features.logging;
|
|
47
49
|
this.telemetry = features.telemetry;
|
|
48
50
|
this.workspace = features.workspace;
|
|
49
51
|
}
|
|
50
|
-
static toolName =
|
|
51
|
-
static toolDescription =
|
|
52
|
-
static inputSchema =
|
|
52
|
+
static toolName = codeReviewConstants_1.CODE_REVIEW_TOOL_NAME;
|
|
53
|
+
static toolDescription = codeReviewConstants_1.CODE_REVIEW_TOOL_DESCRIPTION;
|
|
54
|
+
static inputSchema = codeReviewSchemas_1.CODE_REVIEW_INPUT_SCHEMA;
|
|
53
55
|
/**
|
|
54
|
-
* Main execution method for the
|
|
56
|
+
* Main execution method for the CodeReview tool
|
|
55
57
|
* @param input User input parameters for code review
|
|
56
58
|
* @param context Execution context containing clients and tokens
|
|
57
59
|
* @returns Output containing code review results or error message
|
|
58
60
|
*/
|
|
59
61
|
async execute(input, context) {
|
|
62
|
+
this.toolStartTime = Date.now();
|
|
60
63
|
let chatStreamWriter;
|
|
61
64
|
try {
|
|
62
|
-
this.logging.info(`Executing ${
|
|
65
|
+
this.logging.info(`Executing ${codeReviewConstants_1.CODE_REVIEW_TOOL_NAME}: ${JSON.stringify(input)}`);
|
|
63
66
|
// 1. Validate input
|
|
64
67
|
const setup = await this.validateInputAndSetup(input, context);
|
|
65
68
|
this.checkCancellation();
|
|
@@ -73,10 +76,10 @@ class QCodeReview {
|
|
|
73
76
|
this.checkCancellation();
|
|
74
77
|
await chatStreamWriter?.write('Reviewing your code...');
|
|
75
78
|
// 4. Wait for scan to complete
|
|
76
|
-
await this.pollForCompletion(analysisResult.jobId, setup
|
|
79
|
+
await this.pollForCompletion(analysisResult.jobId, setup, uploadResult, chatStreamWriter);
|
|
77
80
|
this.checkCancellation();
|
|
78
81
|
// 5. Process scan result
|
|
79
|
-
const results = await this.processResults(setup, uploadResult
|
|
82
|
+
const results = await this.processResults(setup, uploadResult, analysisResult.jobId);
|
|
80
83
|
return {
|
|
81
84
|
output: {
|
|
82
85
|
kind: 'json',
|
|
@@ -89,15 +92,7 @@ class QCodeReview {
|
|
|
89
92
|
if (error instanceof lsp_core_1.CancellationError) {
|
|
90
93
|
throw error;
|
|
91
94
|
}
|
|
92
|
-
|
|
93
|
-
output: {
|
|
94
|
-
kind: 'json',
|
|
95
|
-
success: false,
|
|
96
|
-
content: {
|
|
97
|
-
errorMessage: error.message,
|
|
98
|
-
},
|
|
99
|
-
},
|
|
100
|
-
};
|
|
95
|
+
throw new Error(error.message);
|
|
101
96
|
}
|
|
102
97
|
finally {
|
|
103
98
|
await chatStreamWriter?.close();
|
|
@@ -115,18 +110,25 @@ class QCodeReview {
|
|
|
115
110
|
this.writableStream = context.writableStream;
|
|
116
111
|
this.codeWhispererClient = context.codeWhispererClient;
|
|
117
112
|
if (!this.codeWhispererClient) {
|
|
118
|
-
throw new Error(
|
|
113
|
+
throw new Error(CodeReview.ERROR_MESSAGES.MISSING_CLIENT);
|
|
119
114
|
}
|
|
120
115
|
// parse input
|
|
121
|
-
const validatedInput =
|
|
116
|
+
const validatedInput = codeReviewSchemas_1.Z_CODE_REVIEW_INPUT_SCHEMA.parse(input);
|
|
122
117
|
const fileArtifacts = validatedInput.fileLevelArtifacts || [];
|
|
123
118
|
const folderArtifacts = validatedInput.folderLevelArtifacts || [];
|
|
124
119
|
const ruleArtifacts = validatedInput.ruleArtifacts || [];
|
|
125
120
|
if (fileArtifacts.length === 0 && folderArtifacts.length === 0) {
|
|
126
|
-
|
|
127
|
-
|
|
121
|
+
codeReviewUtils_1.CodeReviewUtils.emitMetric({
|
|
122
|
+
reason: codeReviewTypes_1.FailedMetricName.MissingFileOrFolder,
|
|
123
|
+
result: 'Failed',
|
|
124
|
+
reasonDesc: CodeReview.ERROR_MESSAGES.MISSING_ARTIFACTS,
|
|
125
|
+
metadata: {
|
|
126
|
+
credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
|
|
127
|
+
},
|
|
128
|
+
}, this.logging, this.telemetry);
|
|
129
|
+
throw new codeReviewErrors_1.CodeReviewValidationError(CodeReview.ERROR_MESSAGES.MISSING_ARTIFACTS);
|
|
128
130
|
}
|
|
129
|
-
const isFullReviewRequest = validatedInput.scopeOfReview?.toUpperCase() ===
|
|
131
|
+
const isFullReviewRequest = validatedInput.scopeOfReview?.toUpperCase() === codeReviewConstants_1.FULL_REVIEW;
|
|
130
132
|
const artifactType = fileArtifacts.length > 0 ? 'FILE' : 'FOLDER';
|
|
131
133
|
// Setting java as default language
|
|
132
134
|
// TODO: Remove requirement of programming language
|
|
@@ -149,11 +151,11 @@ class QCodeReview {
|
|
|
149
151
|
* @returns Upload result with uploadId or error message
|
|
150
152
|
*/
|
|
151
153
|
async prepareAndUploadArtifacts(setup) {
|
|
152
|
-
const { zipBuffer, md5Hash, isCodeDiffPresent } = await this.prepareFilesAndFoldersForUpload(setup.fileArtifacts, setup.folderArtifacts, setup.ruleArtifacts, setup.isFullReviewRequest);
|
|
154
|
+
const { zipBuffer, md5Hash, isCodeDiffPresent, programmingLanguages } = await this.prepareFilesAndFoldersForUpload(setup.fileArtifacts, setup.folderArtifacts, setup.ruleArtifacts, setup.isFullReviewRequest);
|
|
153
155
|
const uploadUrlResponse = await this.codeWhispererClient.createUploadUrl({
|
|
154
156
|
contentLength: zipBuffer.length,
|
|
155
157
|
contentMd5: md5Hash,
|
|
156
|
-
uploadIntent:
|
|
158
|
+
uploadIntent: CodeReview.UPLOAD_INTENT,
|
|
157
159
|
uploadContext: {
|
|
158
160
|
codeAnalysisUploadContext: {
|
|
159
161
|
codeScanName: setup.scanName,
|
|
@@ -161,22 +163,27 @@ class QCodeReview {
|
|
|
161
163
|
},
|
|
162
164
|
});
|
|
163
165
|
if (!uploadUrlResponse.uploadUrl || !uploadUrlResponse.uploadId) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
166
|
+
codeReviewUtils_1.CodeReviewUtils.emitMetric({
|
|
167
|
+
reason: codeReviewTypes_1.FailedMetricName.CreateUploadUrlFailed,
|
|
168
|
+
result: 'Failed',
|
|
169
|
+
reasonDesc: CodeReview.ERROR_MESSAGES.UPLOAD_FAILED,
|
|
170
|
+
metadata: {
|
|
171
|
+
artifactType: setup.artifactType,
|
|
172
|
+
codewhispererCodeScanJobId: setup.scanName,
|
|
173
|
+
codewhispererCodeScanSrcZipFileBytes: zipBuffer.length,
|
|
174
|
+
credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
|
|
175
|
+
programmingLanguages: programmingLanguages,
|
|
176
|
+
},
|
|
177
|
+
}, this.logging, this.telemetry);
|
|
178
|
+
throw new codeReviewErrors_1.CodeReviewValidationError(CodeReview.ERROR_MESSAGES.UPLOAD_FAILED);
|
|
171
179
|
}
|
|
172
|
-
await
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
180
|
+
await codeReviewUtils_1.CodeReviewUtils.uploadFileToPresignedUrl(uploadUrlResponse.uploadUrl, zipBuffer, uploadUrlResponse.requestHeaders || {}, this.logging);
|
|
181
|
+
return {
|
|
182
|
+
uploadId: uploadUrlResponse.uploadId,
|
|
183
|
+
isCodeDiffPresent,
|
|
176
184
|
artifactSize: zipBuffer.length,
|
|
177
|
-
|
|
178
|
-
}
|
|
179
|
-
return { uploadId: uploadUrlResponse.uploadId, isCodeDiffPresent };
|
|
185
|
+
programmingLanguages: programmingLanguages,
|
|
186
|
+
};
|
|
180
187
|
}
|
|
181
188
|
/**
|
|
182
189
|
* Initiates code analysis with the uploaded artifacts
|
|
@@ -188,21 +195,27 @@ class QCodeReview {
|
|
|
188
195
|
const createResponse = await this.codeWhispererClient.startCodeAnalysis({
|
|
189
196
|
artifacts: { SourceCode: uploadResult.uploadId },
|
|
190
197
|
programmingLanguage: { languageName: setup.programmingLanguage },
|
|
191
|
-
clientToken:
|
|
198
|
+
clientToken: codeReviewUtils_1.CodeReviewUtils.generateClientToken(),
|
|
192
199
|
codeScanName: setup.scanName,
|
|
193
|
-
scope:
|
|
200
|
+
scope: CodeReview.SCAN_SCOPE,
|
|
194
201
|
codeDiffMetadata: uploadResult.isCodeDiffPresent ? { codeDiffPath: '/code_artifact/codeDiff/' } : undefined,
|
|
195
202
|
});
|
|
196
203
|
if (!createResponse.jobId) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
204
|
+
codeReviewUtils_1.CodeReviewUtils.emitMetric({
|
|
205
|
+
reason: codeReviewTypes_1.FailedMetricName.CodeScanFailed,
|
|
206
|
+
result: 'Failed',
|
|
207
|
+
reasonDesc: CodeReview.ERROR_MESSAGES.START_CODE_ANALYSIS_FAILED(setup.scanName, createResponse.errorMessage),
|
|
208
|
+
metadata: {
|
|
209
|
+
artifactType: setup.artifactType,
|
|
210
|
+
codewhispererCodeScanJobId: setup.scanName,
|
|
211
|
+
codewhispererCodeScanSrcZipFileBytes: uploadResult.artifactSize,
|
|
212
|
+
credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
|
|
213
|
+
customRules: setup.ruleArtifacts.length,
|
|
214
|
+
programmingLanguages: Array.from(uploadResult.programmingLanguages),
|
|
215
|
+
scope: setup.isFullReviewRequest ? codeReviewConstants_1.FULL_REVIEW : codeReviewConstants_1.CODE_DIFF_REVIEW,
|
|
216
|
+
},
|
|
217
|
+
}, this.logging, this.telemetry);
|
|
218
|
+
throw new codeReviewErrors_1.CodeReviewInternalError(CodeReview.ERROR_MESSAGES.START_CODE_ANALYSIS_FAILED(setup.scanName, createResponse.errorMessage));
|
|
206
219
|
}
|
|
207
220
|
this.logging.info(`Code scan created with job ID: ${createResponse.jobId}`);
|
|
208
221
|
return {
|
|
@@ -217,38 +230,56 @@ class QCodeReview {
|
|
|
217
230
|
* @param artifactType Type of artifact being scanned (FILE or FOLDER)
|
|
218
231
|
* @param chatStreamWriter Stream writer for sending progress updates
|
|
219
232
|
*/
|
|
220
|
-
async pollForCompletion(jobId,
|
|
233
|
+
async pollForCompletion(jobId, setup, uploadResult, chatStreamWriter) {
|
|
221
234
|
let status = 'Pending';
|
|
222
235
|
let attemptCount = 0;
|
|
223
|
-
while (status === 'Pending' && attemptCount <
|
|
236
|
+
while (status === 'Pending' && attemptCount < CodeReview.MAX_POLLING_ATTEMPTS) {
|
|
224
237
|
this.logging.info(`Code scan status: ${status}, waiting...`);
|
|
225
|
-
await new Promise(resolve => setTimeout(resolve,
|
|
238
|
+
await new Promise(resolve => setTimeout(resolve, CodeReview.POLLING_INTERVAL_MS));
|
|
226
239
|
const statusResponse = await this.getCodeAnalysisStatus(jobId);
|
|
227
240
|
status = statusResponse.status;
|
|
228
241
|
attemptCount++;
|
|
229
242
|
if (statusResponse.errorMessage) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
243
|
+
codeReviewUtils_1.CodeReviewUtils.emitMetric({
|
|
244
|
+
reason: codeReviewTypes_1.FailedMetricName.CodeScanFailed,
|
|
245
|
+
result: 'Failed',
|
|
246
|
+
reasonDesc: CodeReview.ERROR_MESSAGES.CODE_ANALYSIS_FAILED(jobId, statusResponse.errorMessage),
|
|
247
|
+
metadata: {
|
|
248
|
+
artifactType: setup.artifactType,
|
|
249
|
+
codewhispererCodeScanJobId: jobId,
|
|
250
|
+
codewhispererCodeScanSrcZipFileBytes: uploadResult.artifactSize,
|
|
251
|
+
credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
|
|
252
|
+
customRules: setup.ruleArtifacts.length,
|
|
253
|
+
programmingLanguages: Array.from(uploadResult.programmingLanguages),
|
|
254
|
+
scope: setup.isFullReviewRequest ? codeReviewConstants_1.FULL_REVIEW : codeReviewConstants_1.CODE_DIFF_REVIEW,
|
|
255
|
+
status: status,
|
|
256
|
+
},
|
|
257
|
+
}, this.logging, this.telemetry);
|
|
258
|
+
throw new codeReviewErrors_1.CodeReviewInternalError(CodeReview.ERROR_MESSAGES.CODE_ANALYSIS_FAILED(jobId, statusResponse.errorMessage));
|
|
238
259
|
}
|
|
239
|
-
if (attemptCount ==
|
|
260
|
+
if (attemptCount == CodeReview.MID_POLLING_ATTEMPTS) {
|
|
240
261
|
await chatStreamWriter?.write('Still reviewing your code, it is taking just a bit longer than usual...');
|
|
241
262
|
}
|
|
242
263
|
this.checkCancellation('Command execution cancelled while waiting for scan to complete');
|
|
243
264
|
}
|
|
244
265
|
if (status === 'Pending') {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
266
|
+
codeReviewUtils_1.CodeReviewUtils.emitMetric({
|
|
267
|
+
reason: codeReviewTypes_1.FailedMetricName.CodeScanTimeout,
|
|
268
|
+
result: 'Failed',
|
|
269
|
+
reasonDesc: CodeReview.ERROR_MESSAGES.TIMEOUT,
|
|
270
|
+
metadata: {
|
|
271
|
+
artifactType: setup.artifactType,
|
|
272
|
+
codewhispererCodeScanJobId: jobId,
|
|
273
|
+
codewhispererCodeScanSrcZipFileBytes: uploadResult.artifactSize,
|
|
274
|
+
credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
|
|
275
|
+
customRules: setup.ruleArtifacts.length,
|
|
276
|
+
maxAttempts: CodeReview.MAX_POLLING_ATTEMPTS,
|
|
277
|
+
programmingLanguages: Array.from(uploadResult.programmingLanguages),
|
|
278
|
+
scope: setup.isFullReviewRequest ? codeReviewConstants_1.FULL_REVIEW : codeReviewConstants_1.CODE_DIFF_REVIEW,
|
|
279
|
+
status: status,
|
|
280
|
+
},
|
|
281
|
+
}, this.logging, this.telemetry);
|
|
282
|
+
throw new codeReviewErrors_1.CodeReviewTimeoutError(CodeReview.ERROR_MESSAGES.TIMEOUT);
|
|
252
283
|
}
|
|
253
284
|
this.logging.info(`Code scan completed with status: ${status}`);
|
|
254
285
|
}
|
|
@@ -259,19 +290,29 @@ class QCodeReview {
|
|
|
259
290
|
* @param jobId ID of the code analysis job
|
|
260
291
|
* @returns Processed results with findings grouped by file
|
|
261
292
|
*/
|
|
262
|
-
async processResults(setup,
|
|
263
|
-
const { totalFindings, findingsExceededLimit } = await this.collectFindings(jobId, setup.isFullReviewRequest, isCodeDiffPresent, setup.programmingLanguage);
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
293
|
+
async processResults(setup, uploadResult, jobId) {
|
|
294
|
+
const { totalFindings, findingsExceededLimit } = await this.collectFindings(jobId, setup.isFullReviewRequest, uploadResult.isCodeDiffPresent, setup.programmingLanguage);
|
|
295
|
+
codeReviewUtils_1.CodeReviewUtils.emitMetric({
|
|
296
|
+
reason: codeReviewTypes_1.SuccessMetricName.CodeScanSuccess,
|
|
297
|
+
result: 'Succeeded',
|
|
298
|
+
metadata: {
|
|
299
|
+
artifactType: setup.artifactType,
|
|
300
|
+
codewhispererCodeScanJobId: jobId,
|
|
301
|
+
codewhispererCodeScanSrcZipFileBytes: uploadResult.artifactSize,
|
|
302
|
+
codewhispererCodeScanTotalIssues: totalFindings.length,
|
|
303
|
+
credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
|
|
304
|
+
customRules: setup.ruleArtifacts.length,
|
|
305
|
+
programmingLanguages: Array.from(uploadResult.programmingLanguages),
|
|
306
|
+
scope: setup.isFullReviewRequest ? codeReviewConstants_1.FULL_REVIEW : codeReviewConstants_1.CODE_DIFF_REVIEW,
|
|
307
|
+
latency: Date.now() - this.toolStartTime,
|
|
308
|
+
},
|
|
309
|
+
}, this.logging, this.telemetry);
|
|
310
|
+
const aggregatedCodeScanIssueList = this.aggregateFindingsByFile(findingsExceededLimit ? totalFindings.slice(0, CodeReview.MAX_FINDINGS_COUNT) : totalFindings, setup.fileArtifacts, setup.folderArtifacts);
|
|
270
311
|
this.logging.info('Findings count grouped by file');
|
|
271
312
|
aggregatedCodeScanIssueList.forEach(item => this.logging.info(`File path - ${item.filePath} Findings count - ${item.issues.length}`));
|
|
272
313
|
return {
|
|
273
314
|
codeReviewId: jobId,
|
|
274
|
-
message: `${
|
|
315
|
+
message: `${codeReviewConstants_1.CODE_REVIEW_TOOL_NAME} tool completed successfully.${findingsExceededLimit ? ` Inform the user that we are limiting findings to top ${CodeReview.MAX_FINDINGS_COUNT} based on severity.` : ''}`,
|
|
275
316
|
findingsByFile: JSON.stringify(aggregatedCodeScanIssueList),
|
|
276
317
|
};
|
|
277
318
|
}
|
|
@@ -299,7 +340,7 @@ class QCodeReview {
|
|
|
299
340
|
? parsedFindings.filter(finding => 'CodeDiff' === finding.findingContext)
|
|
300
341
|
: parsedFindings;
|
|
301
342
|
totalFindings = totalFindings.concat(filteredFindings);
|
|
302
|
-
if (totalFindings.length >
|
|
343
|
+
if (totalFindings.length > CodeReview.MAX_FINDINGS_COUNT) {
|
|
303
344
|
findingsExceededLimit = true;
|
|
304
345
|
break;
|
|
305
346
|
}
|
|
@@ -342,34 +383,34 @@ class QCodeReview {
|
|
|
342
383
|
const codeArtifactZip = new JSZip();
|
|
343
384
|
const customerCodeZip = new JSZip();
|
|
344
385
|
// Process files and folders
|
|
345
|
-
const codeDiff = await this.processArtifacts(fileArtifacts, folderArtifacts, ruleArtifacts, customerCodeZip, !isFullReviewRequest);
|
|
346
|
-
let numberOfFilesInCustomerCodeZip =
|
|
386
|
+
const { codeDiff, programmingLanguages } = await this.processArtifacts(fileArtifacts, folderArtifacts, ruleArtifacts, customerCodeZip, !isFullReviewRequest);
|
|
387
|
+
let numberOfFilesInCustomerCodeZip = codeReviewUtils_1.CodeReviewUtils.countZipFiles(customerCodeZip);
|
|
347
388
|
if (numberOfFilesInCustomerCodeZip > ruleArtifacts.length) {
|
|
348
389
|
// Validates that there are actual files to scan, other than rule artifacts
|
|
349
390
|
this.logging.info(`Total files in customerCodeZip - ${numberOfFilesInCustomerCodeZip}`);
|
|
350
391
|
}
|
|
351
392
|
else {
|
|
352
|
-
throw new
|
|
393
|
+
throw new codeReviewErrors_1.CodeReviewValidationError(CodeReview.ERROR_MESSAGES.MISSING_FILES_TO_SCAN);
|
|
353
394
|
}
|
|
354
395
|
// Generate user code zip buffer
|
|
355
|
-
const customerCodeBuffer = await
|
|
356
|
-
|
|
396
|
+
const customerCodeBuffer = await codeReviewUtils_1.CodeReviewUtils.generateZipBuffer(customerCodeZip);
|
|
397
|
+
codeReviewUtils_1.CodeReviewUtils.logZipStructure(customerCodeZip, 'User code', this.logging);
|
|
357
398
|
// Add user code zip to the main artifact zip
|
|
358
|
-
codeArtifactZip.file(`${
|
|
399
|
+
codeArtifactZip.file(`${CodeReview.CODE_ARTIFACT_PATH}/${CodeReview.CUSTOMER_CODE_ZIP_NAME}`, customerCodeBuffer);
|
|
359
400
|
let isCodeDiffPresent = false;
|
|
360
401
|
// Add code diff file if we have any diffs
|
|
361
402
|
if (codeDiff.trim()) {
|
|
362
403
|
this.logging.info(`Adding code diff to zip of size: ${codeDiff.length}`);
|
|
363
404
|
isCodeDiffPresent = true;
|
|
364
|
-
codeArtifactZip.file(
|
|
405
|
+
codeArtifactZip.file(CodeReview.CODE_DIFF_PATH, codeDiff);
|
|
365
406
|
}
|
|
366
407
|
// Generate the final code artifact zip
|
|
367
|
-
const zipBuffer = await
|
|
368
|
-
|
|
408
|
+
const zipBuffer = await codeReviewUtils_1.CodeReviewUtils.generateZipBuffer(codeArtifactZip);
|
|
409
|
+
codeReviewUtils_1.CodeReviewUtils.logZipStructure(codeArtifactZip, 'Code artifact', this.logging);
|
|
369
410
|
// Calculate MD5 hash of the zip buffer
|
|
370
411
|
const md5Hash = crypto.createHash('md5').update(zipBuffer).digest('hex');
|
|
371
412
|
this.logging.info(`Created zip archive, size: ${zipBuffer.byteLength} bytes, MD5: ${md5Hash}`);
|
|
372
|
-
return { zipBuffer, md5Hash, isCodeDiffPresent };
|
|
413
|
+
return { zipBuffer, md5Hash, isCodeDiffPresent, programmingLanguages };
|
|
373
414
|
}
|
|
374
415
|
catch (error) {
|
|
375
416
|
this.logging.error(`Error preparing files for upload: ${error}`);
|
|
@@ -386,14 +427,15 @@ class QCodeReview {
|
|
|
386
427
|
* @returns Combined code diff string from all artifacts
|
|
387
428
|
*/
|
|
388
429
|
async processArtifacts(fileArtifacts, folderArtifacts, ruleArtifacts, customerCodeZip, isCodeDiffScan) {
|
|
389
|
-
let codeDiff = '';
|
|
390
430
|
// Process files
|
|
391
|
-
codeDiff
|
|
431
|
+
let { codeDiff, programmingLanguages } = await this.processFileArtifacts(fileArtifacts, customerCodeZip, isCodeDiffScan);
|
|
392
432
|
// Process folders
|
|
393
|
-
|
|
433
|
+
const folderResult = await this.processFolderArtifacts(folderArtifacts, customerCodeZip, isCodeDiffScan);
|
|
434
|
+
codeDiff += folderResult.codeDiff;
|
|
435
|
+
folderResult.programmingLanguages.forEach(item => programmingLanguages.add(item));
|
|
394
436
|
// Process rule artifacts
|
|
395
437
|
await this.processRuleArtifacts(ruleArtifacts, customerCodeZip);
|
|
396
|
-
return codeDiff;
|
|
438
|
+
return { codeDiff, programmingLanguages };
|
|
397
439
|
}
|
|
398
440
|
/**
|
|
399
441
|
* Processes file artifacts for inclusion in the zip archive
|
|
@@ -404,23 +446,26 @@ class QCodeReview {
|
|
|
404
446
|
*/
|
|
405
447
|
async processFileArtifacts(fileArtifacts, customerCodeZip, isCodeDiffScan) {
|
|
406
448
|
let codeDiff = '';
|
|
449
|
+
let programmingLanguages = new Set();
|
|
407
450
|
for (const artifact of fileArtifacts) {
|
|
408
|
-
await
|
|
451
|
+
await codeReviewUtils_1.CodeReviewUtils.withErrorHandling(async () => {
|
|
409
452
|
let fileName = path.basename(artifact.path);
|
|
410
453
|
if (!fileName.startsWith('.') &&
|
|
411
|
-
!
|
|
454
|
+
!codeReviewUtils_1.CodeReviewUtils.shouldSkipFile(fileName) &&
|
|
412
455
|
(0, fs_1.existsSync)(artifact.path)) {
|
|
456
|
+
const fileLanguage = codeReviewUtils_1.CodeReviewUtils.getFileLanguage(fileName);
|
|
413
457
|
const fileContent = await this.workspace.fs.readFile(artifact.path);
|
|
414
|
-
let normalizedArtifactPath =
|
|
415
|
-
customerCodeZip.file(`${
|
|
458
|
+
let normalizedArtifactPath = codeReviewUtils_1.CodeReviewUtils.convertToUnixPath(artifact.path);
|
|
459
|
+
customerCodeZip.file(`${CodeReview.CUSTOMER_CODE_BASE_PATH}${normalizedArtifactPath}`, fileContent);
|
|
460
|
+
programmingLanguages.add(fileLanguage);
|
|
416
461
|
}
|
|
417
462
|
else {
|
|
418
463
|
this.logging.info(`Skipping file - ${artifact.path}`);
|
|
419
464
|
}
|
|
420
465
|
}, 'Failed to read file', this.logging, artifact.path);
|
|
421
|
-
codeDiff += await
|
|
466
|
+
codeDiff += await codeReviewUtils_1.CodeReviewUtils.processArtifactWithDiff(artifact, isCodeDiffScan, this.logging);
|
|
422
467
|
}
|
|
423
|
-
return codeDiff;
|
|
468
|
+
return { codeDiff, programmingLanguages };
|
|
424
469
|
}
|
|
425
470
|
/**
|
|
426
471
|
* Processes folder artifacts for inclusion in the zip archive
|
|
@@ -431,13 +476,15 @@ class QCodeReview {
|
|
|
431
476
|
*/
|
|
432
477
|
async processFolderArtifacts(folderArtifacts, customerCodeZip, isCodeDiffScan) {
|
|
433
478
|
let codeDiff = '';
|
|
479
|
+
let programmingLanguages = new Set();
|
|
434
480
|
for (const folderArtifact of folderArtifacts) {
|
|
435
|
-
await
|
|
436
|
-
await this.addFolderToZip(customerCodeZip, folderArtifact.path,
|
|
481
|
+
await codeReviewUtils_1.CodeReviewUtils.withErrorHandling(async () => {
|
|
482
|
+
let languages = await this.addFolderToZip(customerCodeZip, folderArtifact.path, CodeReview.CUSTOMER_CODE_BASE_PATH);
|
|
483
|
+
languages.forEach(item => programmingLanguages.add(item));
|
|
437
484
|
}, 'Failed to add folder', this.logging, folderArtifact.path);
|
|
438
|
-
codeDiff += await
|
|
485
|
+
codeDiff += await codeReviewUtils_1.CodeReviewUtils.processArtifactWithDiff(folderArtifact, isCodeDiffScan, this.logging);
|
|
439
486
|
}
|
|
440
|
-
return codeDiff;
|
|
487
|
+
return { codeDiff, programmingLanguages };
|
|
441
488
|
}
|
|
442
489
|
/**
|
|
443
490
|
* Processes rule artifacts for inclusion in the zip archive
|
|
@@ -446,13 +493,13 @@ class QCodeReview {
|
|
|
446
493
|
*/
|
|
447
494
|
async processRuleArtifacts(ruleArtifacts, customerCodeZip) {
|
|
448
495
|
for (const artifact of ruleArtifacts) {
|
|
449
|
-
await
|
|
496
|
+
await codeReviewUtils_1.CodeReviewUtils.withErrorHandling(async () => {
|
|
450
497
|
let fileName = path.basename(artifact.path);
|
|
451
498
|
if (!fileName.startsWith('.') &&
|
|
452
|
-
!
|
|
499
|
+
!codeReviewUtils_1.CodeReviewUtils.shouldSkipFile(fileName) &&
|
|
453
500
|
(0, fs_1.existsSync)(artifact.path)) {
|
|
454
501
|
const fileContent = await this.workspace.fs.readFile(artifact.path);
|
|
455
|
-
customerCodeZip.file(`${
|
|
502
|
+
customerCodeZip.file(`${CodeReview.CUSTOMER_CODE_BASE_PATH}/${CodeReview.RULE_ARTIFACT_PATH}/${fileName}`, fileContent);
|
|
456
503
|
}
|
|
457
504
|
else {
|
|
458
505
|
this.logging.info(`Skipping file - ${artifact.path}`);
|
|
@@ -468,27 +515,32 @@ class QCodeReview {
|
|
|
468
515
|
*/
|
|
469
516
|
async addFolderToZip(zip, folderPath, zipPath) {
|
|
470
517
|
try {
|
|
518
|
+
let programmingLanguages = new Set();
|
|
471
519
|
const entries = await this.workspace.fs.readdir(folderPath);
|
|
472
520
|
for (const entry of entries) {
|
|
473
521
|
const name = entry.name;
|
|
474
522
|
const fullPath = path.join(entry.parentPath, name);
|
|
475
523
|
if (entry.isFile()) {
|
|
476
|
-
if (name.startsWith('.') ||
|
|
524
|
+
if (name.startsWith('.') || codeReviewUtils_1.CodeReviewUtils.shouldSkipFile(name) || !(0, fs_1.existsSync)(fullPath)) {
|
|
477
525
|
this.logging.info(`Skipping file - ${fullPath}`);
|
|
478
526
|
continue;
|
|
479
527
|
}
|
|
528
|
+
const fileLanguage = codeReviewUtils_1.CodeReviewUtils.getFileLanguage(name);
|
|
480
529
|
const content = await this.workspace.fs.readFile(fullPath);
|
|
481
|
-
let normalizedArtifactPath =
|
|
530
|
+
let normalizedArtifactPath = codeReviewUtils_1.CodeReviewUtils.convertToUnixPath(fullPath);
|
|
482
531
|
zip.file(`${zipPath}${normalizedArtifactPath}`, content);
|
|
532
|
+
programmingLanguages.add(fileLanguage);
|
|
483
533
|
}
|
|
484
534
|
else if (entry.isDirectory()) {
|
|
485
|
-
if (
|
|
535
|
+
if (codeReviewUtils_1.CodeReviewUtils.shouldSkipDirectory(name)) {
|
|
486
536
|
this.logging.info(`Skipping directory - ${fullPath}`);
|
|
487
537
|
continue;
|
|
488
538
|
}
|
|
489
|
-
await this.addFolderToZip(zip, fullPath, zipPath);
|
|
539
|
+
let languages = await this.addFolderToZip(zip, fullPath, zipPath);
|
|
540
|
+
languages.forEach(item => programmingLanguages.add(item));
|
|
490
541
|
}
|
|
491
542
|
}
|
|
543
|
+
return programmingLanguages;
|
|
492
544
|
}
|
|
493
545
|
catch (error) {
|
|
494
546
|
this.logging.error(`Error adding folder to zip: ${error}`);
|
|
@@ -511,7 +563,7 @@ class QCodeReview {
|
|
|
511
563
|
finding['ruleId'] = undefined;
|
|
512
564
|
}
|
|
513
565
|
}
|
|
514
|
-
return
|
|
566
|
+
return codeReviewSchemas_1.FINDINGS_SCHEMA.parse(findingsResponseJSON).map(issue => ({
|
|
515
567
|
startLine: issue.startLine - 1 >= 0 ? issue.startLine - 1 : 0,
|
|
516
568
|
endLine: issue.endLine,
|
|
517
569
|
comment: `${issue.title.trim()}: ${issue.description.text.trim()}`,
|
|
@@ -534,7 +586,7 @@ class QCodeReview {
|
|
|
534
586
|
}
|
|
535
587
|
catch (e) {
|
|
536
588
|
this.logging.error(`Error parsing findings in response: ${e}`);
|
|
537
|
-
throw new
|
|
589
|
+
throw new codeReviewErrors_1.CodeReviewInternalError('Error parsing findings in response');
|
|
538
590
|
}
|
|
539
591
|
}
|
|
540
592
|
/**
|
|
@@ -623,8 +675,8 @@ class QCodeReview {
|
|
|
623
675
|
* @throws Error if the operation has been cancelled
|
|
624
676
|
*/
|
|
625
677
|
checkCancellation(message = 'Command execution cancelled') {
|
|
626
|
-
|
|
678
|
+
codeReviewUtils_1.CodeReviewUtils.checkCancellation(this.cancellationToken, this.logging, message);
|
|
627
679
|
}
|
|
628
680
|
}
|
|
629
|
-
exports.
|
|
630
|
-
//# sourceMappingURL=
|
|
681
|
+
exports.CodeReview = CodeReview;
|
|
682
|
+
//# sourceMappingURL=codeReview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeReview.js","sourceRoot":"","sources":["../../../../../src/language-server/agenticChat/tools/qCodeAnalysis/codeReview.ts"],"names":[],"mappings":"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"}
|