@aws/lsp-codewhisperer 0.0.3 → 0.0.5
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 +13 -0
- package/out/client/sigv4/service.json +1 -1
- package/out/client/token/bearer-token-service.json +1 -1
- package/out/index.d.ts +1 -0
- package/out/index.js +1 -0
- package/out/index.js.map +1 -1
- package/out/language-server/chat/chatController.d.ts +25 -0
- package/out/language-server/chat/chatController.js +117 -0
- package/out/language-server/chat/chatController.js.map +1 -0
- package/out/language-server/chat/chatController.test.d.ts +1 -0
- package/out/language-server/chat/chatController.test.js +240 -0
- package/out/language-server/chat/chatController.test.js.map +1 -0
- package/out/language-server/chat/chatEventParser.d.ts +24 -0
- package/out/language-server/chat/chatEventParser.js +84 -0
- package/out/language-server/chat/chatEventParser.js.map +1 -0
- package/out/language-server/chat/chatEventParser.test.d.ts +1 -0
- package/out/language-server/chat/chatEventParser.test.js +189 -0
- package/out/language-server/chat/chatEventParser.test.js.map +1 -0
- package/out/language-server/chat/chatSessionManagementService.d.ts +16 -0
- package/out/language-server/chat/chatSessionManagementService.js +92 -0
- package/out/language-server/chat/chatSessionManagementService.js.map +1 -0
- package/out/language-server/chat/chatSessionManagementService.test.d.ts +1 -0
- package/out/language-server/chat/chatSessionManagementService.test.js +73 -0
- package/out/language-server/chat/chatSessionManagementService.test.js.map +1 -0
- package/out/language-server/chat/chatSessionService.d.ts +13 -0
- package/out/language-server/chat/chatSessionService.js +63 -0
- package/out/language-server/chat/chatSessionService.js.map +1 -0
- package/out/language-server/chat/chatSessionService.test.d.ts +1 -0
- package/out/language-server/chat/chatSessionService.test.js +80 -0
- package/out/language-server/chat/chatSessionService.test.js.map +1 -0
- package/out/language-server/chat/contexts/documentContext.d.ts +17 -0
- package/out/language-server/chat/contexts/documentContext.js +59 -0
- package/out/language-server/chat/contexts/documentContext.js.map +1 -0
- package/out/language-server/chat/contexts/documentContext.test.d.ts +1 -0
- package/out/language-server/chat/contexts/documentContext.test.js +147 -0
- package/out/language-server/chat/contexts/documentContext.test.js.map +1 -0
- package/out/language-server/chat/contexts/utils.d.ts +10 -0
- package/out/language-server/chat/contexts/utils.js +71 -0
- package/out/language-server/chat/contexts/utils.js.map +1 -0
- package/out/language-server/chat/contexts/utils.test.d.ts +1 -0
- package/out/language-server/chat/contexts/utils.test.js +72 -0
- package/out/language-server/chat/contexts/utils.test.js.map +1 -0
- package/out/language-server/chat/utils.d.ts +4 -0
- package/out/language-server/chat/utils.js +34 -0
- package/out/language-server/chat/utils.js.map +1 -0
- package/out/language-server/codeWhispererSecurityScanServer.d.ts +1 -2
- package/out/language-server/codeWhispererSecurityScanServer.js +152 -25
- package/out/language-server/codeWhispererSecurityScanServer.js.map +1 -1
- package/out/language-server/codeWhispererServer.d.ts +1 -2
- package/out/language-server/codeWhispererServer.js +3 -3
- package/out/language-server/codeWhispererServer.js.map +1 -1
- package/out/language-server/codeWhispererServer.test.js +100 -101
- package/out/language-server/codeWhispererServer.test.js.map +1 -1
- package/out/language-server/codeWhispererService.d.ts +1 -1
- package/out/language-server/codeWhispererService.js.map +1 -1
- package/out/language-server/dependencyGraph/csharpDependencyGraph.d.ts +3 -3
- package/out/language-server/dependencyGraph/csharpDependencyGraph.js +40 -37
- package/out/language-server/dependencyGraph/csharpDependencyGraph.js.map +1 -1
- package/out/language-server/dependencyGraph/csharpDependencyGraph.test.js +106 -78
- package/out/language-server/dependencyGraph/csharpDependencyGraph.test.js.map +1 -1
- package/out/language-server/dependencyGraph/dependencyGraph.d.ts +12 -4
- package/out/language-server/dependencyGraph/dependencyGraph.js +24 -6
- package/out/language-server/dependencyGraph/dependencyGraph.js.map +1 -1
- package/out/language-server/dependencyGraph/dependencyGraphFactory.d.ts +2 -3
- package/out/language-server/dependencyGraph/dependencyGraphFactory.js +2 -2
- package/out/language-server/dependencyGraph/dependencyGraphFactory.js.map +1 -1
- package/out/language-server/languageDetection.d.ts +11 -3
- package/out/language-server/languageDetection.js +85 -20
- package/out/language-server/languageDetection.js.map +1 -1
- package/out/language-server/languageDetection.test.d.ts +1 -0
- package/out/language-server/languageDetection.test.js +31 -0
- package/out/language-server/languageDetection.test.js.map +1 -0
- package/out/language-server/netTransformServer.d.ts +12 -0
- package/out/language-server/netTransformServer.js +27 -0
- package/out/language-server/netTransformServer.js.map +1 -0
- package/out/language-server/proxy-server.d.ts +3 -2
- package/out/language-server/proxy-server.js +35 -1
- package/out/language-server/proxy-server.js.map +1 -1
- package/out/language-server/qChatServer.d.ts +3 -0
- package/out/language-server/qChatServer.js +31 -0
- package/out/language-server/qChatServer.js.map +1 -0
- package/out/language-server/qChatServer.test.d.ts +1 -0
- package/out/language-server/qChatServer.test.js +51 -0
- package/out/language-server/qChatServer.test.js.map +1 -0
- package/out/language-server/securityScan/securityScanDiagnosticsProvider.d.ts +28 -0
- package/out/language-server/securityScan/securityScanDiagnosticsProvider.js +111 -0
- package/out/language-server/securityScan/securityScanDiagnosticsProvider.js.map +1 -0
- package/out/language-server/securityScan/securityScanHandler.d.ts +12 -5
- package/out/language-server/securityScan/securityScanHandler.js +69 -19
- package/out/language-server/securityScan/securityScanHandler.js.map +1 -1
- package/out/language-server/securityScan/securityScanHandler.test.js +3 -2
- package/out/language-server/securityScan/securityScanHandler.test.js.map +1 -1
- package/out/language-server/securityScan/types.d.ts +15 -0
- package/out/language-server/session/sessionManager.d.ts +1 -2
- package/out/language-server/session/sessionManager.js.map +1 -1
- package/out/language-server/telemetry/codePercentage.d.ts +1 -1
- package/out/language-server/telemetry/types.d.ts +20 -0
- package/out/language-server/telemetry/userTriggerDecision.test.js +8 -8
- package/out/language-server/telemetry/userTriggerDecision.test.js.map +1 -1
- package/out/language-server/telemetry.test.js +4 -4
- package/out/language-server/telemetry.test.js.map +1 -1
- package/out/language-server/testUtils.d.ts +1 -0
- package/out/language-server/testUtils.js +17 -1
- package/out/language-server/testUtils.js.map +1 -1
- package/out/language-server/types.d.ts +13 -0
- package/out/language-server/types.js +3 -0
- package/out/language-server/types.js.map +1 -0
- package/out/language-server/utils.d.ts +3 -0
- package/out/language-server/utils.js +19 -1
- package/out/language-server/utils.js.map +1 -1
- package/out/language-server/utils.test.d.ts +1 -0
- package/out/language-server/utils.test.js +33 -0
- package/out/language-server/utils.test.js.map +1 -0
- package/package.json +16 -7
- package/src.gen/@amzn/codewhisperer-streaming/LICENSE +201 -0
- package/src.gen/@amzn/codewhisperer-streaming/README.md +464 -0
- package/src.gen/@amzn/codewhisperer-streaming/api-extractor.json +4 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/CodeWhispererStreaming.js +17 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/CodeWhispererStreamingClient.js +42 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/commands/ExportResultArchiveCommand.js +42 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/commands/GenerateAssistantResponseCommand.js +42 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/commands/GenerateTaskAssistPlanCommand.js +42 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/commands/index.js +6 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/endpoints.js +165 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/extensionConfiguration.js +2 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/index.js +10 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/models/CodeWhispererStreamingServiceException.js +12 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/models/index.js +4 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/models/models_0.js +361 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/protocols/Aws_restJson1.js +458 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/runtimeConfig.browser.js +38 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/runtimeConfig.js +46 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/runtimeConfig.native.js +15 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/runtimeConfig.shared.js +22 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/runtimeExtensions.js +22 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/CodeWhispererStreaming.js +13 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/CodeWhispererStreamingClient.js +38 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/commands/ExportResultArchiveCommand.js +38 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/commands/GenerateAssistantResponseCommand.js +38 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/commands/GenerateTaskAssistPlanCommand.js +38 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/commands/index.js +3 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/endpoints.js +161 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/extensionConfiguration.js +1 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/index.js +5 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/models/CodeWhispererStreamingServiceException.js +8 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/models/index.js +1 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/models/models_0.js +328 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/protocols/Aws_restJson1.js +449 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/runtimeConfig.browser.js +33 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/runtimeConfig.js +41 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/runtimeConfig.native.js +11 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/runtimeConfig.shared.js +18 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-es/runtimeExtensions.js +18 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/CodeWhispererStreaming.d.ts +30 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/CodeWhispererStreamingClient.d.ts +169 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/commands/ExportResultArchiveCommand.d.ts +103 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/commands/GenerateAssistantResponseCommand.d.ts +294 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/commands/GenerateTaskAssistPlanCommand.d.ts +304 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/commands/index.d.ts +3 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/endpoints.d.ts +2 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/extensionConfiguration.d.ts +8 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/index.d.ts +5 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/models/CodeWhispererStreamingServiceException.d.ts +13 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/models/index.d.ts +1 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/models/models_0.d.ts +1173 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/protocols/Aws_restJson1.d.ts +29 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/runtimeConfig.browser.d.ts +39 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/runtimeConfig.d.ts +39 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/runtimeConfig.native.d.ts +38 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/runtimeConfig.shared.d.ts +17 -0
- package/src.gen/@amzn/codewhisperer-streaming/dist-types/runtimeExtensions.d.ts +17 -0
- package/src.gen/@amzn/codewhisperer-streaming/package.json +87 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/CodeWhispererStreaming.ts +84 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/CodeWhispererStreamingClient.ts +304 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/commands/ExportResultArchiveCommand.ts +177 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/commands/GenerateAssistantResponseCommand.ts +369 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/commands/GenerateTaskAssistPlanCommand.ts +379 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/commands/index.ts +4 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/endpoints.ts +170 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/extensionConfiguration.ts +12 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/index.ts +8 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/models/CodeWhispererStreamingServiceException.ts +22 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/models/index.ts +2 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/models/models_0.ts +1518 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/protocols/Aws_restJson1.ts +740 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/runtimeConfig.browser.ts +42 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/runtimeConfig.native.ts +17 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/runtimeConfig.shared.ts +24 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/runtimeConfig.ts +55 -0
- package/src.gen/@amzn/codewhisperer-streaming/src/runtimeExtensions.ts +44 -0
- package/src.gen/@amzn/codewhisperer-streaming/typedoc.json +5 -0
- package/script/generateServiceClient.ts +0 -242
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _DocumentContextExtractor_characterLimits;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.DocumentContextExtractor = void 0;
|
|
16
|
+
const languageDetection_1 = require("../../languageDetection");
|
|
17
|
+
const utils_1 = require("./utils");
|
|
18
|
+
class DocumentContextExtractor {
|
|
19
|
+
constructor(characterLimits = DocumentContextExtractor.DEFAULT_CHARACTER_LIMIT) {
|
|
20
|
+
_DocumentContextExtractor_characterLimits.set(this, void 0);
|
|
21
|
+
__classPrivateFieldSet(this, _DocumentContextExtractor_characterLimits, characterLimits, "f");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* From the given the cursor state, we want to give Q context up to the characters limit
|
|
25
|
+
* on both sides of the cursor.
|
|
26
|
+
*/
|
|
27
|
+
async extractEditorState(document, cursorState) {
|
|
28
|
+
const targetRange = 'position' in cursorState
|
|
29
|
+
? {
|
|
30
|
+
start: cursorState.position,
|
|
31
|
+
end: cursorState.position,
|
|
32
|
+
}
|
|
33
|
+
: cursorState.range;
|
|
34
|
+
const codeBlockRange = (0, utils_1.getExtendedCodeBlockRange)(document, targetRange, __classPrivateFieldGet(this, _DocumentContextExtractor_characterLimits, "f"));
|
|
35
|
+
const rangeWithinCodeBlock = (0, utils_1.getSelectionWithinExtendedRange)(targetRange, codeBlockRange);
|
|
36
|
+
return {
|
|
37
|
+
document: await this.extractDocumentContext(document, codeBlockRange),
|
|
38
|
+
cursorState: rangeWithinCodeBlock ? { range: rangeWithinCodeBlock } : undefined,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Extract document context from the given range inside a document
|
|
43
|
+
*/
|
|
44
|
+
async extractDocumentContext(document, codeBlockRange) {
|
|
45
|
+
const text = document.getText(codeBlockRange);
|
|
46
|
+
const languageId = (0, languageDetection_1.getLanguageId)(document);
|
|
47
|
+
const relativeFilePath = document.uri;
|
|
48
|
+
return {
|
|
49
|
+
text,
|
|
50
|
+
programmingLanguage: languageId ? { languageName: languageId } : undefined,
|
|
51
|
+
relativeFilePath,
|
|
52
|
+
documentSymbols: [],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.DocumentContextExtractor = DocumentContextExtractor;
|
|
57
|
+
_DocumentContextExtractor_characterLimits = new WeakMap();
|
|
58
|
+
DocumentContextExtractor.DEFAULT_CHARACTER_LIMIT = 9000;
|
|
59
|
+
//# sourceMappingURL=documentContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentContext.js","sourceRoot":"","sources":["../../../../src/language-server/chat/contexts/documentContext.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,+DAAuD;AACvD,mCAAoF;AAEpF,MAAa,wBAAwB;IAKjC,YAAY,kBAA0B,wBAAwB,CAAC,uBAAuB;QAFtF,4DAAwB;QAGpB,uBAAA,IAAI,6CAAoB,eAAe,MAAA,CAAA;IAC3C,CAAC;IACD;;;OAGG;IACI,KAAK,CAAC,kBAAkB,CAAC,QAAsB,EAAE,WAAwB;QAC5E,MAAM,WAAW,GACb,UAAU,IAAI,WAAW;YACrB,CAAC,CAAC;gBACI,KAAK,EAAE,WAAW,CAAC,QAAQ;gBAC3B,GAAG,EAAE,WAAW,CAAC,QAAQ;aAC5B;YACH,CAAC,CAAC,WAAW,CAAC,KAAK,CAAA;QAE3B,MAAM,cAAc,GAAG,IAAA,iCAAyB,EAAC,QAAQ,EAAE,WAAW,EAAE,uBAAA,IAAI,iDAAiB,CAAC,CAAA;QAE9F,MAAM,oBAAoB,GAAG,IAAA,uCAA+B,EAAC,WAAW,EAAE,cAAc,CAAC,CAAA;QAEzF,OAAO;YACH,QAAQ,EAAE,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,cAAc,CAAC;YACrE,WAAW,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,SAAS;SAClF,CAAA;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,sBAAsB,CAC/B,QAAsB,EACtB,cAAqB;QAErB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAC7C,MAAM,UAAU,GAAG,IAAA,iCAAa,EAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAA;QAErC,OAAO;YACH,IAAI;YACJ,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;YAC1E,gBAAgB;YAChB,eAAe,EAAE,EAAE;SACtB,CAAA;IACL,CAAC;;AAhDL,4DAiDC;;AAhD2B,gDAAuB,GAAG,IAAI,AAAP,CAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
|
|
5
|
+
const documentContext_1 = require("./documentContext");
|
|
6
|
+
describe('DocumentContext', () => {
|
|
7
|
+
const mockTypescriptCodeBlock = `function test() {
|
|
8
|
+
console.log('test')
|
|
9
|
+
}`;
|
|
10
|
+
const mockTSDocument = vscode_languageserver_textdocument_1.TextDocument.create('file://test.ts', 'typescript', 1, mockTypescriptCodeBlock);
|
|
11
|
+
describe('documentContextExtractor.extractEditorState', () => {
|
|
12
|
+
it('extracts editor state for range selection', async () => {
|
|
13
|
+
const documentContextExtractor = new documentContext_1.DocumentContextExtractor(19);
|
|
14
|
+
const expected = {
|
|
15
|
+
document: {
|
|
16
|
+
programmingLanguage: { languageName: 'typescript' },
|
|
17
|
+
relativeFilePath: 'file://test.ts',
|
|
18
|
+
documentSymbols: [],
|
|
19
|
+
text: "console.log('test')",
|
|
20
|
+
},
|
|
21
|
+
cursorState: {
|
|
22
|
+
range: {
|
|
23
|
+
start: {
|
|
24
|
+
line: 0,
|
|
25
|
+
character: 8,
|
|
26
|
+
},
|
|
27
|
+
end: {
|
|
28
|
+
line: 0,
|
|
29
|
+
character: 11,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const result = await documentContextExtractor.extractEditorState(mockTSDocument, {
|
|
35
|
+
// highlighting "log"
|
|
36
|
+
range: {
|
|
37
|
+
start: {
|
|
38
|
+
line: 1,
|
|
39
|
+
character: 12,
|
|
40
|
+
},
|
|
41
|
+
end: {
|
|
42
|
+
line: 1,
|
|
43
|
+
character: 15,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
assert.deepStrictEqual(result, expected);
|
|
48
|
+
});
|
|
49
|
+
it('extracts editor state for collapsed position', async () => {
|
|
50
|
+
const documentContextExtractor = new documentContext_1.DocumentContextExtractor(19);
|
|
51
|
+
const expected = {
|
|
52
|
+
document: {
|
|
53
|
+
programmingLanguage: { languageName: 'typescript' },
|
|
54
|
+
relativeFilePath: 'file://test.ts',
|
|
55
|
+
documentSymbols: [],
|
|
56
|
+
text: "console.log('test')",
|
|
57
|
+
},
|
|
58
|
+
cursorState: {
|
|
59
|
+
range: {
|
|
60
|
+
start: {
|
|
61
|
+
line: 0,
|
|
62
|
+
character: 9,
|
|
63
|
+
},
|
|
64
|
+
end: {
|
|
65
|
+
line: 0,
|
|
66
|
+
character: 10,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
const result = await documentContextExtractor.extractEditorState(mockTSDocument, {
|
|
72
|
+
// highlighting "o" in "log"
|
|
73
|
+
range: {
|
|
74
|
+
start: {
|
|
75
|
+
line: 1,
|
|
76
|
+
character: 13,
|
|
77
|
+
},
|
|
78
|
+
end: {
|
|
79
|
+
line: 1,
|
|
80
|
+
character: 14,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
assert.deepStrictEqual(result, expected);
|
|
85
|
+
});
|
|
86
|
+
it('returns undefined cursorState if the end position was collapsed', async () => {
|
|
87
|
+
const documentContextExtractor = new documentContext_1.DocumentContextExtractor(0);
|
|
88
|
+
const expected = {
|
|
89
|
+
document: {
|
|
90
|
+
programmingLanguage: { languageName: 'typescript' },
|
|
91
|
+
relativeFilePath: 'file://test.ts',
|
|
92
|
+
documentSymbols: [],
|
|
93
|
+
text: '',
|
|
94
|
+
},
|
|
95
|
+
cursorState: undefined,
|
|
96
|
+
};
|
|
97
|
+
const result = await documentContextExtractor.extractEditorState(mockTSDocument, {
|
|
98
|
+
range: {
|
|
99
|
+
start: {
|
|
100
|
+
line: 1,
|
|
101
|
+
character: 13,
|
|
102
|
+
},
|
|
103
|
+
end: {
|
|
104
|
+
line: 1,
|
|
105
|
+
character: 13,
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
assert.deepStrictEqual(result, expected);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe('extractDocumentContext', () => {
|
|
113
|
+
it('extract document context with the code block range correctly', async () => {
|
|
114
|
+
const documentContextExtractor = new documentContext_1.DocumentContextExtractor();
|
|
115
|
+
const expectedResult = {
|
|
116
|
+
programmingLanguage: { languageName: 'typescript' },
|
|
117
|
+
relativeFilePath: 'file://test.ts',
|
|
118
|
+
documentSymbols: [],
|
|
119
|
+
text: "console.log('test')",
|
|
120
|
+
};
|
|
121
|
+
const result = await documentContextExtractor.extractDocumentContext(mockTSDocument, {
|
|
122
|
+
start: { line: 1, character: 4 },
|
|
123
|
+
end: { line: 1, character: 23 },
|
|
124
|
+
});
|
|
125
|
+
assert.deepStrictEqual(result, expectedResult);
|
|
126
|
+
});
|
|
127
|
+
it('handles other languages correctly', async () => {
|
|
128
|
+
const documentContextExtractor = new documentContext_1.DocumentContextExtractor();
|
|
129
|
+
const mockGoCodeBLock = `func main() {
|
|
130
|
+
fmt.Println("test")
|
|
131
|
+
}`;
|
|
132
|
+
const mockDocument = vscode_languageserver_textdocument_1.TextDocument.create('file://test.go', 'go', 1, mockGoCodeBLock);
|
|
133
|
+
const expectedResult = {
|
|
134
|
+
programmingLanguage: { languageName: 'go' },
|
|
135
|
+
relativeFilePath: 'file://test.go',
|
|
136
|
+
documentSymbols: [],
|
|
137
|
+
text: 'fmt.Println("test")',
|
|
138
|
+
};
|
|
139
|
+
const result = await documentContextExtractor.extractDocumentContext(mockDocument, {
|
|
140
|
+
start: { line: 1, character: 4 },
|
|
141
|
+
end: { line: 1, character: 23 },
|
|
142
|
+
});
|
|
143
|
+
assert.deepStrictEqual(result, expectedResult);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
//# sourceMappingURL=documentContext.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentContext.test.js","sourceRoot":"","sources":["../../../../src/language-server/chat/contexts/documentContext.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Range, TextDocument } from 'vscode-languageserver-textdocument';
|
|
2
|
+
/**
|
|
3
|
+
* Extend the cursor range on both ends up to charactersLimit for context (if applicable)
|
|
4
|
+
*/
|
|
5
|
+
export declare function getExtendedCodeBlockRange(document: TextDocument, originalRange: Range, charactersLimit: number): Range;
|
|
6
|
+
/**
|
|
7
|
+
* Since we are only sending over the code block, the selection that
|
|
8
|
+
* reflects the position in the entire document needs to be adjusted.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getSelectionWithinExtendedRange(selection: Range, extendedRange: Range): Range | undefined;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSelectionWithinExtendedRange = exports.getExtendedCodeBlockRange = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Extend the cursor range on both ends up to charactersLimit for context (if applicable)
|
|
6
|
+
*/
|
|
7
|
+
function getExtendedCodeBlockRange(document, originalRange, charactersLimit) {
|
|
8
|
+
let startOffset = document.offsetAt(originalRange.start);
|
|
9
|
+
let endOffset = document.offsetAt(originalRange.end);
|
|
10
|
+
const totalSelectedCharacters = endOffset - startOffset;
|
|
11
|
+
// if the total selected characters are greater than the character limit, trims the characters
|
|
12
|
+
if (totalSelectedCharacters >= charactersLimit) {
|
|
13
|
+
return {
|
|
14
|
+
start: document.positionAt(startOffset),
|
|
15
|
+
end: document.positionAt(startOffset + charactersLimit),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
// lineCount + 1 puts us outside the bound so `.offsetAt` returns the max offset
|
|
19
|
+
const maxOffset = document.offsetAt({
|
|
20
|
+
line: document.lineCount + 1,
|
|
21
|
+
character: 0,
|
|
22
|
+
});
|
|
23
|
+
const extraCharactersAllowed = charactersLimit - totalSelectedCharacters;
|
|
24
|
+
// Accounting for the edge case when there is an odd number of characters
|
|
25
|
+
const prependCharacterCount = Math.ceil(extraCharactersAllowed / 2);
|
|
26
|
+
const appendCharacterCount = Math.floor(extraCharactersAllowed / 2);
|
|
27
|
+
// Try adding number of extra characters "equally" on both end first
|
|
28
|
+
startOffset = Math.max(0, startOffset - prependCharacterCount);
|
|
29
|
+
endOffset = Math.min(endOffset + appendCharacterCount, maxOffset);
|
|
30
|
+
// If there are remaining characters, which means that we reached at least one end of the document
|
|
31
|
+
const remainingCharacters = charactersLimit - (endOffset - startOffset);
|
|
32
|
+
if (remainingCharacters > 0) {
|
|
33
|
+
// Since we are at the beginning on the document, try adding the remaining characters to the end, and vice versa.
|
|
34
|
+
if (startOffset === 0) {
|
|
35
|
+
endOffset = Math.min(endOffset + remainingCharacters, maxOffset);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
startOffset = Math.max(startOffset - remainingCharacters, 0);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
start: document.positionAt(startOffset),
|
|
43
|
+
end: document.positionAt(endOffset),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
exports.getExtendedCodeBlockRange = getExtendedCodeBlockRange;
|
|
47
|
+
/**
|
|
48
|
+
* Since we are only sending over the code block, the selection that
|
|
49
|
+
* reflects the position in the entire document needs to be adjusted.
|
|
50
|
+
*/
|
|
51
|
+
function getSelectionWithinExtendedRange(selection, extendedRange) {
|
|
52
|
+
if (selection.start.line === selection.end.line && selection.start.character === selection.end.character) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
start: {
|
|
57
|
+
line: selection.start.line - extendedRange.start.line,
|
|
58
|
+
character: selection.start.line === extendedRange.start.line
|
|
59
|
+
? selection.start.character - extendedRange.start.character
|
|
60
|
+
: selection.start.character,
|
|
61
|
+
},
|
|
62
|
+
end: {
|
|
63
|
+
line: selection.end.line - extendedRange.start.line,
|
|
64
|
+
character: selection.end.line === extendedRange.end.line
|
|
65
|
+
? selection.end.character - extendedRange.start.character
|
|
66
|
+
: selection.end.character,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
exports.getSelectionWithinExtendedRange = getSelectionWithinExtendedRange;
|
|
71
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/language-server/chat/contexts/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
describe('getExtendedCodeBlockRange', () => {
|
|
7
|
+
const mockDocument = vscode_languageserver_textdocument_1.TextDocument.create('file://test.ts', 'typescript', 1, `const fs = require('node:fs/promises');
|
|
8
|
+
async function example(file: string) {
|
|
9
|
+
try {
|
|
10
|
+
const data = await fs.readFile(file, { encoding: 'utf8' });
|
|
11
|
+
console.log(data);
|
|
12
|
+
} catch (err) {
|
|
13
|
+
console.error(err);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
example('/Users/user1/test.txt');`);
|
|
17
|
+
it('able to extend a code block range up to the character limit', () => {
|
|
18
|
+
const result = (0, utils_1.getExtendedCodeBlockRange)(mockDocument, {
|
|
19
|
+
// highlightling "console"
|
|
20
|
+
start: { line: 4, character: 8 },
|
|
21
|
+
end: { line: 4, character: 14 },
|
|
22
|
+
}, 10);
|
|
23
|
+
assert.deepStrictEqual(result, {
|
|
24
|
+
start: { line: 4, character: 6 },
|
|
25
|
+
end: { line: 4, character: 16 },
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
it('able to extend a code block range correctly if character limit is an odd number', () => {
|
|
29
|
+
const result = (0, utils_1.getExtendedCodeBlockRange)(mockDocument, {
|
|
30
|
+
// highlightling "console"
|
|
31
|
+
start: { line: 4, character: 8 },
|
|
32
|
+
end: { line: 4, character: 14 },
|
|
33
|
+
}, 9);
|
|
34
|
+
assert.deepStrictEqual(result, {
|
|
35
|
+
start: { line: 4, character: 6 },
|
|
36
|
+
end: { line: 4, character: 15 },
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
it('does not extend beyond the lower document bound', () => {
|
|
40
|
+
const result = (0, utils_1.getExtendedCodeBlockRange)(mockDocument, {
|
|
41
|
+
// highlighting "fs" in document
|
|
42
|
+
start: { line: 0, character: 6 },
|
|
43
|
+
end: { line: 0, character: 8 },
|
|
44
|
+
}, 20);
|
|
45
|
+
assert.deepStrictEqual(result, {
|
|
46
|
+
start: { line: 0, character: 0 },
|
|
47
|
+
end: { line: 0, character: 20 },
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
it('does not extend beyond the upper document bound', () => {
|
|
51
|
+
const result = (0, utils_1.getExtendedCodeBlockRange)(mockDocument, {
|
|
52
|
+
// highlighting "test" on the last line in document
|
|
53
|
+
start: { line: 9, character: 26 },
|
|
54
|
+
end: { line: 9, character: 30 },
|
|
55
|
+
}, 20);
|
|
56
|
+
assert.deepStrictEqual(result, {
|
|
57
|
+
start: { line: 9, character: 17 },
|
|
58
|
+
end: { line: 9, character: 37 },
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
it('trims text if already exceeds character limit', () => {
|
|
62
|
+
const result = (0, utils_1.getExtendedCodeBlockRange)(mockDocument, {
|
|
63
|
+
start: { line: 3, character: 8 },
|
|
64
|
+
end: { line: 3, character: 60 },
|
|
65
|
+
}, 40);
|
|
66
|
+
assert.deepStrictEqual(result, {
|
|
67
|
+
start: { line: 3, character: 8 },
|
|
68
|
+
end: { line: 3, character: 48 },
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../../src/language-server/chat/contexts/utils.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EditorState, GenerateAssistantResponseCommandInput } from '@amzn/codewhisperer-streaming';
|
|
2
|
+
import { ChatParams } from '@aws/language-server-runtimes/server-interface';
|
|
3
|
+
import { Result } from '../types';
|
|
4
|
+
export declare function convertChatParamsToRequestInput(params: ChatParams, editorState?: EditorState): Result<GenerateAssistantResponseCommandInput, string>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertChatParamsToRequestInput = void 0;
|
|
4
|
+
const codewhisperer_streaming_1 = require("@amzn/codewhisperer-streaming");
|
|
5
|
+
function convertChatParamsToRequestInput(params, editorState) {
|
|
6
|
+
const { prompt } = params;
|
|
7
|
+
if (prompt.prompt || prompt.escapedPrompt) {
|
|
8
|
+
// TODO: implement userInputMessageContext state when that is available, and diagnostic trigger type
|
|
9
|
+
return {
|
|
10
|
+
success: true,
|
|
11
|
+
data: {
|
|
12
|
+
conversationState: {
|
|
13
|
+
chatTriggerType: codewhisperer_streaming_1.ChatTriggerType.MANUAL,
|
|
14
|
+
currentMessage: {
|
|
15
|
+
userInputMessage: {
|
|
16
|
+
content: prompt.escapedPrompt ?? prompt.prompt,
|
|
17
|
+
userInputMessageContext: editorState
|
|
18
|
+
? {
|
|
19
|
+
editorState,
|
|
20
|
+
}
|
|
21
|
+
: undefined,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
success: false,
|
|
30
|
+
error: 'Invalid request input',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
exports.convertChatParamsToRequestInput = convertChatParamsToRequestInput;
|
|
34
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/language-server/chat/utils.ts"],"names":[],"mappings":";;;AAAA,2EAAmH;AAInH,SAAgB,+BAA+B,CAC3C,MAAkB,EAClB,WAAyB;IAEzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAEzB,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACxC,oGAAoG;QACpG,OAAO;YACH,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACF,iBAAiB,EAAE;oBACf,eAAe,EAAE,yCAAe,CAAC,MAAM;oBACvC,cAAc,EAAE;wBACZ,gBAAgB,EAAE;4BACd,OAAO,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM;4BAC9C,uBAAuB,EAAE,WAAW;gCAChC,CAAC,CAAC;oCACI,WAAW;iCACd;gCACH,CAAC,CAAC,SAAS;yBAClB;qBACJ;iBACJ;aACJ;SACJ,CAAA;IACL,CAAC;IAED,OAAO;QACH,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,uBAAuB;KACjC,CAAA;AACL,CAAC;AAhCD,0EAgCC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Server } from '@aws/language-server-runtimes';
|
|
2
|
-
import { CredentialsProvider } from '@aws/language-server-runtimes/out/features';
|
|
1
|
+
import { CredentialsProvider, Server } from '@aws/language-server-runtimes/server-interface';
|
|
3
2
|
import { CodeWhispererServiceToken } from './codeWhispererService';
|
|
4
3
|
export declare const SecurityScanServerToken: (service: (credentialsProvider: CredentialsProvider) => CodeWhispererServiceToken) => Server;
|