@aws/lsp-codewhisperer 0.0.11 → 0.0.12
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 +3 -0
- package/out/language-server/chat/contexts/documentContext.test.js +0 -25
- package/out/language-server/chat/contexts/documentContext.test.js.map +1 -1
- package/out/language-server/chat/contexts/triggerContext.d.ts +2 -0
- package/out/language-server/chat/contexts/triggerContext.js +9 -4
- package/out/language-server/chat/contexts/triggerContext.js.map +1 -1
- package/out/language-server/chat/contexts/triggerContexts.test.d.ts +1 -0
- package/out/language-server/chat/contexts/triggerContexts.test.js +82 -0
- package/out/language-server/chat/contexts/triggerContexts.test.js.map +1 -0
- package/out/language-server/chat/contexts/utils.js +0 -3
- package/out/language-server/chat/contexts/utils.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -91,31 +91,6 @@ describe('DocumentContext', () => {
|
|
|
91
91
|
});
|
|
92
92
|
assert.deepStrictEqual(result, expected);
|
|
93
93
|
});
|
|
94
|
-
it('returns undefined cursorState if the end position was collapsed', async () => {
|
|
95
|
-
const documentContextExtractor = new documentContext_1.DocumentContextExtractor({ characterLimits: 0 });
|
|
96
|
-
const expected = {
|
|
97
|
-
programmingLanguage: { languageName: 'typescript' },
|
|
98
|
-
relativeFilePath: 'file://test.ts',
|
|
99
|
-
documentSymbols: [],
|
|
100
|
-
text: '',
|
|
101
|
-
hasCodeSnippet: false,
|
|
102
|
-
totalEditorCharacters: mockTypescriptCodeBlock.length,
|
|
103
|
-
cursorState: undefined,
|
|
104
|
-
};
|
|
105
|
-
const result = await documentContextExtractor.extractDocumentContext(mockTSDocument, {
|
|
106
|
-
range: {
|
|
107
|
-
start: {
|
|
108
|
-
line: 1,
|
|
109
|
-
character: 13,
|
|
110
|
-
},
|
|
111
|
-
end: {
|
|
112
|
-
line: 1,
|
|
113
|
-
character: 13,
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
});
|
|
117
|
-
assert.deepStrictEqual(result, expected);
|
|
118
|
-
});
|
|
119
94
|
});
|
|
120
95
|
it('handles other languages correctly', async () => {
|
|
121
96
|
const documentContextExtractor = new documentContext_1.DocumentContextExtractor({ characterLimits: 19 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documentContext.test.js","sourceRoot":"","sources":["../../../../src/language-server/chat/contexts/documentContext.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"documentContext.test.js","sourceRoot":"","sources":["../../../../src/language-server/chat/contexts/documentContext.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,10 @@ export interface TriggerContext extends Partial<DocumentContext> {
|
|
|
9
9
|
}
|
|
10
10
|
export declare class QChatTriggerContext {
|
|
11
11
|
#private;
|
|
12
|
+
private static readonly DEFAULT_CURSOR_STATE;
|
|
12
13
|
constructor(workspace: Features['workspace'], logger: Features['logging']);
|
|
13
14
|
getNewTriggerContext(params: ChatParams): Promise<TriggerContext>;
|
|
14
15
|
getChatParamsFromTrigger(params: ChatParams, triggerContext: TriggerContext): GenerateAssistantResponseCommandInput;
|
|
15
16
|
dispose(): void;
|
|
17
|
+
extractDocumentContext(input: Pick<ChatParams, 'cursorState' | 'textDocument'>): Promise<DocumentContext | undefined>;
|
|
16
18
|
}
|
|
@@ -4,6 +4,7 @@ exports.QChatTriggerContext = void 0;
|
|
|
4
4
|
const codewhisperer_streaming_1 = require("@amzn/codewhisperer-streaming");
|
|
5
5
|
const documentContext_1 = require("./documentContext");
|
|
6
6
|
class QChatTriggerContext {
|
|
7
|
+
static DEFAULT_CURSOR_STATE = { position: { line: 0, character: 0 } };
|
|
7
8
|
#workspace;
|
|
8
9
|
#documentContextExtractor;
|
|
9
10
|
constructor(workspace, logger) {
|
|
@@ -11,7 +12,7 @@ class QChatTriggerContext {
|
|
|
11
12
|
this.#documentContextExtractor = new documentContext_1.DocumentContextExtractor({ logger });
|
|
12
13
|
}
|
|
13
14
|
async getNewTriggerContext(params) {
|
|
14
|
-
const documentContext = await this
|
|
15
|
+
const documentContext = await this.extractDocumentContext(params);
|
|
15
16
|
return {
|
|
16
17
|
...documentContext,
|
|
17
18
|
userIntent: this.#guessIntentFromPrompt(params.prompt.prompt),
|
|
@@ -48,11 +49,15 @@ class QChatTriggerContext {
|
|
|
48
49
|
dispose() {
|
|
49
50
|
this.#documentContextExtractor.dispose();
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
// public for testing
|
|
53
|
+
async extractDocumentContext(input) {
|
|
54
|
+
const { textDocument: textDocumentIdentifier, cursorState } = input;
|
|
53
55
|
const textDocument = textDocumentIdentifier?.uri && (await this.#workspace.getTextDocument(textDocumentIdentifier.uri));
|
|
54
56
|
return textDocument
|
|
55
|
-
? this.#documentContextExtractor.extractDocumentContext(textDocument,
|
|
57
|
+
? this.#documentContextExtractor.extractDocumentContext(textDocument,
|
|
58
|
+
// we want to include a default position if a text document is found so users can still ask questions about the opened file
|
|
59
|
+
// the range will be expanded up to the max characters downstream
|
|
60
|
+
cursorState?.[0] ?? QChatTriggerContext.DEFAULT_CURSOR_STATE)
|
|
56
61
|
: undefined;
|
|
57
62
|
}
|
|
58
63
|
#guessIntentFromPrompt(prompt) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triggerContext.js","sourceRoot":"","sources":["../../../../src/language-server/chat/contexts/triggerContext.ts"],"names":[],"mappings":";;;AACA,2EAAkH;AAGlH,uDAA6E;AAO7E,MAAa,mBAAmB;
|
|
1
|
+
{"version":3,"file":"triggerContext.js","sourceRoot":"","sources":["../../../../src/language-server/chat/contexts/triggerContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const testing_1 = require("@aws/language-server-runtimes/testing");
|
|
4
|
+
const triggerContext_1 = require("./triggerContext");
|
|
5
|
+
const assert = require("assert");
|
|
6
|
+
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
|
|
7
|
+
const documentContext_1 = require("./documentContext");
|
|
8
|
+
const sinon = require("sinon");
|
|
9
|
+
describe('QChatTriggerContext', () => {
|
|
10
|
+
let testFeatures;
|
|
11
|
+
const filePath = 'file://test.ts';
|
|
12
|
+
const mockTSDocument = vscode_languageserver_textdocument_1.TextDocument.create(filePath, 'typescript', 1, '');
|
|
13
|
+
const mockDocumentContext = {
|
|
14
|
+
text: '',
|
|
15
|
+
programmingLanguage: { languageName: 'typescript' },
|
|
16
|
+
relativeFilePath: 'file://test.ts',
|
|
17
|
+
documentSymbols: [],
|
|
18
|
+
hasCodeSnippet: false,
|
|
19
|
+
totalEditorCharacters: 0,
|
|
20
|
+
};
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
testFeatures = new testing_1.TestFeatures();
|
|
23
|
+
sinon.stub(documentContext_1.DocumentContextExtractor.prototype, 'extractDocumentContext').resolves(mockDocumentContext);
|
|
24
|
+
});
|
|
25
|
+
afterEach(() => {
|
|
26
|
+
sinon.restore();
|
|
27
|
+
});
|
|
28
|
+
it('returns null if text document is not defined in params', async () => {
|
|
29
|
+
const triggerContext = new triggerContext_1.QChatTriggerContext(testFeatures.workspace, testFeatures.logging);
|
|
30
|
+
const documentContext = await triggerContext.extractDocumentContext({
|
|
31
|
+
cursorState: [
|
|
32
|
+
{
|
|
33
|
+
position: {
|
|
34
|
+
line: 5,
|
|
35
|
+
character: 0,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
textDocument: undefined,
|
|
40
|
+
});
|
|
41
|
+
assert.deepStrictEqual(documentContext, undefined);
|
|
42
|
+
});
|
|
43
|
+
it('returns null if text document is not found', async () => {
|
|
44
|
+
const triggerContext = new triggerContext_1.QChatTriggerContext(testFeatures.workspace, testFeatures.logging);
|
|
45
|
+
const documentContext = await triggerContext.extractDocumentContext({
|
|
46
|
+
cursorState: [
|
|
47
|
+
{
|
|
48
|
+
position: {
|
|
49
|
+
line: 5,
|
|
50
|
+
character: 0,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
textDocument: {
|
|
55
|
+
uri: filePath,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
assert.deepStrictEqual(documentContext, undefined);
|
|
59
|
+
});
|
|
60
|
+
it('passes default cursor state if no cursor is found', async () => {
|
|
61
|
+
const triggerContext = new triggerContext_1.QChatTriggerContext(testFeatures.workspace, testFeatures.logging);
|
|
62
|
+
const documentContext = await triggerContext.extractDocumentContext({
|
|
63
|
+
cursorState: [],
|
|
64
|
+
textDocument: {
|
|
65
|
+
uri: filePath,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
assert.deepStrictEqual(documentContext, undefined);
|
|
69
|
+
});
|
|
70
|
+
it('includes cursor state from the parameters and text document if found', async () => {
|
|
71
|
+
const triggerContext = new triggerContext_1.QChatTriggerContext(testFeatures.workspace, testFeatures.logging);
|
|
72
|
+
testFeatures.openDocument(mockTSDocument);
|
|
73
|
+
const documentContext = await triggerContext.extractDocumentContext({
|
|
74
|
+
cursorState: [],
|
|
75
|
+
textDocument: {
|
|
76
|
+
uri: filePath,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
assert.deepStrictEqual(documentContext, mockDocumentContext);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=triggerContexts.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triggerContexts.test.js","sourceRoot":"","sources":["../../../../src/language-server/chat/contexts/triggerContexts.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,9 +49,6 @@ exports.getExtendedCodeBlockRange = getExtendedCodeBlockRange;
|
|
|
49
49
|
* reflects the position in the entire document needs to be adjusted.
|
|
50
50
|
*/
|
|
51
51
|
function getSelectionWithinExtendedRange(selection, extendedRange) {
|
|
52
|
-
if (selection.start.line === selection.end.line && selection.start.character === selection.end.character) {
|
|
53
|
-
return undefined;
|
|
54
|
-
}
|
|
55
52
|
return {
|
|
56
53
|
start: {
|
|
57
54
|
line: selection.start.line - extendedRange.start.line,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/language-server/chat/contexts/utils.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AAEH,SAAgB,yBAAyB,CACrC,QAAsB,EACtB,aAAoB,EACpB,eAAuB;IAEvB,IAAI,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACxD,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IAEpD,MAAM,uBAAuB,GAAG,SAAS,GAAG,WAAW,CAAA;IAEvD,8FAA8F;IAC9F,IAAI,uBAAuB,IAAI,eAAe,EAAE;QAC5C,OAAO;YACH,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;YACvC,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,GAAG,eAAe,CAAC;SAC1D,CAAA;KACJ;IAED,gFAAgF;IAChF,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAChC,IAAI,EAAE,QAAQ,CAAC,SAAS,GAAG,CAAC;QAC5B,SAAS,EAAE,CAAC;KACf,CAAC,CAAA;IAEF,MAAM,sBAAsB,GAAG,eAAe,GAAG,uBAAuB,CAAA;IAExE,yEAAyE;IACzE,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAA;IACnE,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAA;IAEnE,oEAAoE;IACpE,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,qBAAqB,CAAC,CAAA;IAC9D,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,oBAAoB,EAAE,SAAS,CAAC,CAAA;IAEjE,kGAAkG;IAClG,MAAM,mBAAmB,GAAG,eAAe,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,CAAA;IAEvE,IAAI,mBAAmB,GAAG,CAAC,EAAE;QACzB,iHAAiH;QACjH,IAAI,WAAW,KAAK,CAAC,EAAE;YACnB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,mBAAmB,EAAE,SAAS,CAAC,CAAA;SACnE;aAAM;YACH,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,mBAAmB,EAAE,CAAC,CAAC,CAAA;SAC/D;KACJ;IAED,OAAO;QACH,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;QACvC,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;KACtC,CAAA;AACL,CAAC;AAlDD,8DAkDC;AAED;;;GAGG;AACH,SAAgB,+BAA+B,CAAC,SAAgB,EAAE,aAAoB;IAClF,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/language-server/chat/contexts/utils.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AAEH,SAAgB,yBAAyB,CACrC,QAAsB,EACtB,aAAoB,EACpB,eAAuB;IAEvB,IAAI,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACxD,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IAEpD,MAAM,uBAAuB,GAAG,SAAS,GAAG,WAAW,CAAA;IAEvD,8FAA8F;IAC9F,IAAI,uBAAuB,IAAI,eAAe,EAAE;QAC5C,OAAO;YACH,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;YACvC,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,GAAG,eAAe,CAAC;SAC1D,CAAA;KACJ;IAED,gFAAgF;IAChF,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAChC,IAAI,EAAE,QAAQ,CAAC,SAAS,GAAG,CAAC;QAC5B,SAAS,EAAE,CAAC;KACf,CAAC,CAAA;IAEF,MAAM,sBAAsB,GAAG,eAAe,GAAG,uBAAuB,CAAA;IAExE,yEAAyE;IACzE,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAA;IACnE,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAA;IAEnE,oEAAoE;IACpE,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,qBAAqB,CAAC,CAAA;IAC9D,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,oBAAoB,EAAE,SAAS,CAAC,CAAA;IAEjE,kGAAkG;IAClG,MAAM,mBAAmB,GAAG,eAAe,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,CAAA;IAEvE,IAAI,mBAAmB,GAAG,CAAC,EAAE;QACzB,iHAAiH;QACjH,IAAI,WAAW,KAAK,CAAC,EAAE;YACnB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,mBAAmB,EAAE,SAAS,CAAC,CAAA;SACnE;aAAM;YACH,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,mBAAmB,EAAE,CAAC,CAAC,CAAA;SAC/D;KACJ;IAED,OAAO;QACH,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;QACvC,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;KACtC,CAAA;AACL,CAAC;AAlDD,8DAkDC;AAED;;;GAGG;AACH,SAAgB,+BAA+B,CAAC,SAAgB,EAAE,aAAoB;IAClF,OAAO;QACH,KAAK,EAAE;YACH,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI;YACrD,SAAS,EACL,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC,IAAI;gBAC7C,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS;gBAC3D,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS;SACtC;QACD,GAAG,EAAE;YACD,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI;YACnD,SAAS,EACL,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,GAAG,CAAC,IAAI;gBACzC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS;gBACzD,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS;SACpC;KACJ,CAAA;AACL,CAAC;AAjBD,0EAiBC"}
|