Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(amazonq): Add language server support for codewhisperer #6462

Open
wants to merge 134 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
d2d9a3a
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 4, 2024
9a353cb
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 4, 2024
5e6b8dc
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 4, 2024
fe709e8
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 4, 2024
8e72b6c
feat(amazonq): setting toggle for using the amazonq language server (…
jpinkney-aws Dec 4, 2024
4d969a6
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 4, 2024
e193d44
feat(amazonq): Create a common langauge server downloader (#6148)
jpinkney-aws Dec 5, 2024
39817f3
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 5, 2024
5d6512f
feat(amazonq): Use codewhisperer language server for completions (#6158)
jpinkney-aws Dec 5, 2024
c7b07e5
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 5, 2024
b615fa4
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 6, 2024
a925e12
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 6, 2024
1d818ae
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 6, 2024
dba5605
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 6, 2024
a861051
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 6, 2024
dc33a16
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 7, 2024
7cbcc81
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 7, 2024
81a12b2
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 7, 2024
ea2cb7f
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 9, 2024
438a132
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 9, 2024
2dcdf25
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 9, 2024
9a02ee3
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 9, 2024
26f71a9
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 9, 2024
5772a4d
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 9, 2024
5f1e679
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 10, 2024
98847ad
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 10, 2024
e9bd27a
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 10, 2024
e8f8a04
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 10, 2024
4a89ddc
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 10, 2024
4105abc
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 10, 2024
4bf91d6
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 10, 2024
fdec468
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 10, 2024
9832cbb
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 11, 2024
dda7a05
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 11, 2024
4b9013f
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 11, 2024
6fd09e7
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 11, 2024
b009f81
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 12, 2024
3b2dc5f
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 12, 2024
86a6e6e
Merge master into feature/amazonqLSP
aws-toolkit-automation Dec 12, 2024
20efa94
feat(amazonq): Auto update language servers when new versions are ava…
jpinkney-aws Jan 8, 2025
8dbb71c
Merge remote-tracking branch 'origin/master' into feature/amazonqLSP
jpinkney-aws Jan 8, 2025
b3f2e82
Merge pull request #6223 from aws/autoMerge/feature/amazonqLSP
jpinkney-aws Jan 9, 2025
3d2ffd8
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 9, 2025
c49265b
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 9, 2025
14b1385
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 9, 2025
8d4b8a5
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 9, 2025
702e444
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 10, 2025
35b679c
revert(amazonq): Remove loading mynah ui from language server (#6331)
jpinkney-aws Jan 10, 2025
750145d
ci(amazonq): fix linting issue on language server child process (#6332)
jpinkney-aws Jan 10, 2025
f4f022f
fix(amazonq): Language server overrides should reference assets direc…
jpinkney-aws Jan 10, 2025
e7b1c6d
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 13, 2025
7c1ddf7
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 13, 2025
5e3c12c
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 13, 2025
0a597bd
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 13, 2025
ec5d5af
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 14, 2025
7ba424d
test(amazonq): Add e2e tests for lsp auto updating (#6326)
jpinkney-aws Jan 14, 2025
dd32e09
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 14, 2025
40386bd
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 14, 2025
d5f284d
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 14, 2025
240d05c
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 14, 2025
43a5862
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 14, 2025
d5ac25f
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 14, 2025
c1c2a65
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 14, 2025
5a564c9
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 15, 2025
c110675
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 15, 2025
206b8a5
refactor(amazonq): Improve robustness of lsp installation process (#6…
jpinkney-aws Jan 15, 2025
c47782a
refactor(core): Move shared/languageServer -> shared/lsp
jpinkney-aws Jan 15, 2025
27e757b
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 15, 2025
4ea658d
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 15, 2025
8cae01a
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 15, 2025
f8c2557
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 15, 2025
4b32936
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 15, 2025
c4d28cc
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 15, 2025
c627a0d
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 16, 2025
58e2b96
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 16, 2025
2989b5e
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 16, 2025
d812279
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 16, 2025
acaf264
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 16, 2025
7cd91a6
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 17, 2025
1a889fe
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 17, 2025
b8e6c55
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 17, 2025
d5a8327
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 17, 2025
df611ea
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 17, 2025
af447e8
Merge remote-tracking branch 'origin/master' into HEAD
jpinkney-aws Jan 17, 2025
ff53d2c
Merge pull request #6389 from aws/autoMerge/feature/amazonqLSP
jpinkney-aws Jan 17, 2025
45a1ab9
refactor(lsp): Use internal ChildProcess module for launching languag…
jpinkney-aws Jan 17, 2025
f69a889
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 17, 2025
9a0cf8f
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 17, 2025
debb1fb
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 20, 2025
f4bb479
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 20, 2025
2f21092
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 21, 2025
16d318e
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 21, 2025
8148c9a
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 21, 2025
58ebe21
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 21, 2025
46b3954
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 22, 2025
ecc5c6a
refactor(lint): migrate use of .forEach to for...of #6406
Hweinstock Jan 22, 2025
17d8422
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 22, 2025
bad001a
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 22, 2025
40d72d7
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 23, 2025
e705f92
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 23, 2025
74eabe9
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 23, 2025
ef7cd4e
refactor(fetcher): migrate withRetries to waitUntil (#6429)
Hweinstock Jan 24, 2025
16d2bc2
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 24, 2025
41e35ff
refactor(core): Manifest/LSP fetching should use httpResourceFetcher …
jpinkney-aws Jan 24, 2025
37c3c77
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 26, 2025
7488e0a
feat(lsp): older and delisted versions of lsp are automatically remov…
Hweinstock Jan 28, 2025
de684e0
Merge remote-tracking branch 'origin/master' into HEAD
jpinkney-aws Jan 28, 2025
b17b3fa
Merge pull request #6437 from aws/autoMerge/feature/amazonqLSP
jpinkney-aws Jan 28, 2025
bdc49eb
fix(amazonq): Seperate inline completion from regular codewhisperer a…
jpinkney-aws Jan 28, 2025
f93a6bf
refactor(amazonq): Move codewhisperer activation from core to amazonq
jpinkney-aws Jan 28, 2025
b4b7d17
fix(amazonq): Register invokeInlineCompletion and rejectCodeSuggestio…
jpinkney-aws Jan 28, 2025
2fe8109
Merge remote-tracking branch 'origin/master' into HEAD
jpinkney-aws Jan 28, 2025
beed965
Merge pull request #6447 from aws/autoMerge/feature/amazonqLSP
jpinkney-aws Jan 28, 2025
d9c90ea
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 28, 2025
6e330e7
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 28, 2025
37d1b1c
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 28, 2025
21c7af9
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 28, 2025
fb3151b
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 29, 2025
6a0f4ab
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 29, 2025
df5a240
refactor(amazonq): move src/inline -> src/app/inline
jpinkney-aws Jan 29, 2025
b87bd0d
Merge pull request #6446 from jpinkney-aws/codewhisperer-activation
jpinkney-aws Jan 29, 2025
9d4f971
docs(amazonq): Add instructions for debugging flare lsps (#6455)
jpinkney-aws Jan 29, 2025
e22d8ca
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 29, 2025
dfff38c
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 29, 2025
366cf47
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 30, 2025
1335661
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 30, 2025
1ddb1ac
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 30, 2025
9b5ec0d
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 31, 2025
c209f4c
Merge master into feature/amazonqLSP
aws-toolkit-automation Jan 31, 2025
522354a
Merge master into feature/amazonqLSP
aws-toolkit-automation Feb 1, 2025
caca411
Merge master into feature/amazonqLSP
aws-toolkit-automation Feb 3, 2025
30cc909
Merge master into feature/amazonqLSP
aws-toolkit-automation Feb 3, 2025
dbbe414
Merge master into feature/amazonqLSP
aws-toolkit-automation Feb 3, 2025
6063959
Merge master into feature/amazonqLSP
aws-toolkit-automation Feb 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions docs/lsp-debugging.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
## Language Server Debugging

1. Clone https://github.com/aws/language-servers.git and set it up in the same workspace as this project

e.g.

```
/aws-toolkit-vscode
/toolkit
/core
/amazonq
/language-servers
```

2. Inside of the language-servers project run:
```
npm install
npm run compile
npm run package
```
to get the project setup
3. Uncomment the `AWS_LANGUAGE_SERVER_OVERRIDE` variable in `amazonq/.vscode/launch.json` Extension configuration
4. Use the `Launch LSP with Debugging` configuration and set breakpoints in VSCode or the language server
103 changes: 101 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 26 additions & 0 deletions packages/amazonq/.vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"env": {
"SSMDOCUMENT_LANGUAGESERVER_PORT": "6010",
"WEBPACK_DEVELOPER_SERVER": "http://localhost:8080"
// "AWS_LANGUAGE_SERVER_OVERRIDE": "${workspaceFolder}/../../../language-servers/app/aws-lsp-codewhisperer-runtimes/out/token-standalone.js",
},
"envFile": "${workspaceFolder}/.local.env",
"outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"],
Expand Down Expand Up @@ -140,6 +141,31 @@
"group": "4_E2ETestCurrentFile",
"order": 2
}
},
{
"name": "Attach to Language Server",
"type": "node",
"request": "attach",
"port": 6080, // Hard defined in core/src/shared/lsp/platform.ts
"outFiles": ["${workspaceFolder}/../../../language-servers/**/out/**/*.js"],
"skipFiles": [
"<node_internals>/**",
"${workspaceFolder}/../../../language-servers/**/node_modules/**/*.js"
],
"restart": {
"maxAttempts": 10,
"delay": 1000
}
}
],
"compounds": [
{
"name": "Launch LSP with Debugging",
"configurations": ["Extension", "Attach to Language Server"],
"presentation": {
"group": "1_Extension",
"order": 5
}
}
]
}
124 changes: 124 additions & 0 deletions packages/amazonq/src/app/inline/activation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
/*!
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/

import vscode from 'vscode'
import {
AuthUtil,
CodeSuggestionsState,
CodeWhispererCodeCoverageTracker,
CodeWhispererConstants,
CodeWhispererSettings,
ConfigurationEntry,
DefaultCodeWhispererClient,
invokeRecommendation,
isInlineCompletionEnabled,
KeyStrokeHandler,
RecommendationHandler,
runtimeLanguageContext,
TelemetryHelper,
UserWrittenCodeTracker,
vsCodeState,
} from 'aws-core-vscode/codewhisperer'
import { Commands, getLogger, globals, sleep } from 'aws-core-vscode/shared'

export async function activate() {
const codewhispererSettings = CodeWhispererSettings.instance
const client = new DefaultCodeWhispererClient()

if (isInlineCompletionEnabled()) {
await setSubscriptionsforInlineCompletion()
await AuthUtil.instance.setVscodeContextProps()
}

function getAutoTriggerStatus(): boolean {
return CodeSuggestionsState.instance.isSuggestionsEnabled()
}

async function getConfigEntry(): Promise<ConfigurationEntry> {
const isShowMethodsEnabled: boolean =
vscode.workspace.getConfiguration('editor').get('suggest.showMethods') || false
const isAutomatedTriggerEnabled: boolean = getAutoTriggerStatus()
const isManualTriggerEnabled: boolean = true
const isSuggestionsWithCodeReferencesEnabled = codewhispererSettings.isSuggestionsWithCodeReferencesEnabled()

// TODO:remove isManualTriggerEnabled
return {
isShowMethodsEnabled,
isManualTriggerEnabled,
isAutomatedTriggerEnabled,
isSuggestionsWithCodeReferencesEnabled,
}
}

async function setSubscriptionsforInlineCompletion() {
RecommendationHandler.instance.subscribeSuggestionCommands()

/**
* Automated trigger
*/
globals.context.subscriptions.push(
vscode.window.onDidChangeActiveTextEditor(async (editor) => {
await RecommendationHandler.instance.onEditorChange()
}),
vscode.window.onDidChangeWindowState(async (e) => {
await RecommendationHandler.instance.onFocusChange()
}),
vscode.window.onDidChangeTextEditorSelection(async (e) => {
await RecommendationHandler.instance.onCursorChange(e)
}),
vscode.workspace.onDidChangeTextDocument(async (e) => {
const editor = vscode.window.activeTextEditor
if (!editor) {
return
}
if (e.document !== editor.document) {
return
}
if (!runtimeLanguageContext.isLanguageSupported(e.document)) {
return
}

CodeWhispererCodeCoverageTracker.getTracker(e.document.languageId)?.countTotalTokens(e)
UserWrittenCodeTracker.instance.onTextDocumentChange(e)
/**
* Handle this keystroke event only when
* 1. It is not a backspace
* 2. It is not caused by CodeWhisperer editing
* 3. It is not from undo/redo.
*/
if (e.contentChanges.length === 0 || vsCodeState.isCodeWhispererEditing) {
return
}

if (vsCodeState.lastUserModificationTime) {
TelemetryHelper.instance.setTimeSinceLastModification(
performance.now() - vsCodeState.lastUserModificationTime
)
}
vsCodeState.lastUserModificationTime = performance.now()
/**
* Important: Doing this sleep(10) is to make sure
* 1. this event is processed by vs code first
* 2. editor.selection.active has been successfully updated by VS Code
* Then this event can be processed by our code.
*/
await sleep(CodeWhispererConstants.vsCodeCursorUpdateDelay)
if (!RecommendationHandler.instance.isSuggestionVisible()) {
await KeyStrokeHandler.instance.processKeyStroke(e, editor, client, await getConfigEntry())
}
}),
// manual trigger
Commands.register({ id: 'aws.amazonq.invokeInlineCompletion', autoconnect: true }, async () => {
invokeRecommendation(
vscode.window.activeTextEditor as vscode.TextEditor,
client,
await getConfigEntry()
).catch((e) => {
getLogger().error('invokeRecommendation failed: %s', (e as Error).message)
})
})
)
}
}
Loading
Loading