-
Notifications
You must be signed in to change notification settings - Fork 273
feat(amazonq): implement TextDocumentService message handler #5380
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
Changes from 9 commits
4da2951
334feda
12a5484
878b06e
79b1f38
19478d9
9794098
41c225b
6cda596
1f2de8b
cac22b9
bd0bd10
8961b5d
1de97ce
43774b2
22071e6
b6af245
482a6ff
e4a9b9e
0d26dfe
83f7d12
a026102
c842495
370ecc5
b69d6c6
175b13a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,128 @@ | ||
| // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
| // SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| package software.aws.toolkits.jetbrains.services.amazonq.lsp.textdocument | ||
|
|
||
| import com.intellij.openapi.Disposable | ||
| import com.intellij.openapi.editor.Document | ||
| import com.intellij.openapi.fileEditor.FileDocumentManager | ||
| import com.intellij.openapi.fileEditor.FileDocumentManagerListener | ||
| import com.intellij.openapi.fileEditor.FileEditorManager | ||
| import com.intellij.openapi.fileEditor.FileEditorManagerListener | ||
| import com.intellij.openapi.project.Project | ||
| import com.intellij.openapi.vfs.VirtualFile | ||
| import com.intellij.openapi.vfs.VirtualFileManager | ||
| import com.intellij.openapi.vfs.newvfs.BulkFileListener | ||
| import com.intellij.openapi.vfs.newvfs.events.VFileContentChangeEvent | ||
| import com.intellij.openapi.vfs.newvfs.events.VFileEvent | ||
| import org.eclipse.lsp4j.DidChangeTextDocumentParams | ||
| import org.eclipse.lsp4j.DidCloseTextDocumentParams | ||
| import org.eclipse.lsp4j.DidOpenTextDocumentParams | ||
| import org.eclipse.lsp4j.DidSaveTextDocumentParams | ||
| import org.eclipse.lsp4j.TextDocumentContentChangeEvent | ||
| import org.eclipse.lsp4j.TextDocumentIdentifier | ||
| import org.eclipse.lsp4j.TextDocumentItem | ||
| import org.eclipse.lsp4j.VersionedTextDocumentIdentifier | ||
| import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer | ||
| import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService | ||
| import software.aws.toolkits.jetbrains.utils.pluginAwareExecuteOnPooledThread | ||
|
|
||
| class TextDocumentServiceHandler( | ||
| private val project: Project, | ||
| private val serverInstance: Disposable, | ||
|
Check warning on line 32 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
|
||
| ) : FileDocumentManagerListener, | ||
| FileEditorManagerListener, | ||
| BulkFileListener { | ||
|
|
||
| init { | ||
|
Check warning on line 37 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
| // didOpen & didClose events | ||
| project.messageBus.connect(serverInstance).subscribe( | ||
| FileEditorManagerListener.FILE_EDITOR_MANAGER, | ||
| this | ||
|
Check warning on line 41 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
| ) | ||
|
|
||
| // didChange events | ||
| project.messageBus.connect(serverInstance).subscribe( | ||
| VirtualFileManager.VFS_CHANGES, | ||
| this | ||
|
Check warning on line 47 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
| ) | ||
|
|
||
| // didSave events | ||
| project.messageBus.connect(serverInstance).subscribe( | ||
| FileDocumentManagerListener.TOPIC, | ||
| this | ||
|
Check warning on line 53 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
| ) | ||
| } | ||
|
Check warning on line 55 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
|
|
||
| private fun executeIfRunning(project: Project, runnable: (AmazonQLanguageServer) -> Unit) = | ||
| AmazonQLspService.getInstance(project).instance?.languageServer?.let { runnable(it) } | ||
|
|
||
| override fun beforeDocumentSaving(document: Document) { | ||
| val file = FileDocumentManager.getInstance().getFile(document) ?: return | ||
| executeIfRunning(project) { | ||
| it.textDocumentService.didSave( | ||
| DidSaveTextDocumentParams().apply { | ||
| textDocument = TextDocumentIdentifier().apply { | ||
| uri = file.url | ||
| } | ||
| text = document.text | ||
| } | ||
|
Check warning on line 69 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
| ) | ||
| } | ||
| } | ||
|
Check warning on line 72 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
|
|
||
| override fun after(events: MutableList<out VFileEvent>) { | ||
| pluginAwareExecuteOnPooledThread { | ||
| events.filterIsInstance<VFileContentChangeEvent>().forEach { event -> | ||
|
Check warning on line 76 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
|
|
||
| val document = FileDocumentManager.getInstance().getCachedDocument(event.file) ?: return@forEach | ||
| executeIfRunning(project) { | ||
| it.textDocumentService.didChange( | ||
| DidChangeTextDocumentParams().apply { | ||
| textDocument = VersionedTextDocumentIdentifier().apply { | ||
| uri = event.file.url | ||
| version = document.modificationStamp.toInt() | ||
| } | ||
| contentChanges = listOf( | ||
| TextDocumentContentChangeEvent().apply { | ||
| text = document.text | ||
| } | ||
|
Check warning on line 89 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
| ) | ||
| } | ||
|
Check warning on line 91 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
| ) | ||
| } | ||
| } | ||
| } | ||
| } | ||
|
Check warning on line 96 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
|
|
||
| override fun fileOpened( | ||
| source: FileEditorManager, | ||
| file: VirtualFile, | ||
| ) { | ||
| executeIfRunning(project) { | ||
| it.textDocumentService.didOpen( | ||
| DidOpenTextDocumentParams().apply { | ||
| textDocument = TextDocumentItem().apply { | ||
| uri = file.url | ||
| text = file.inputStream.readAllBytes().decodeToString() | ||
| } | ||
| } | ||
|
Check warning on line 109 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
| ) | ||
| } | ||
| } | ||
|
Check warning on line 112 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
|
|
||
| override fun fileClosed( | ||
| source: FileEditorManager, | ||
| file: VirtualFile, | ||
| ) { | ||
| executeIfRunning(project) { | ||
| it.textDocumentService.didClose( | ||
| DidCloseTextDocumentParams().apply { | ||
| textDocument = TextDocumentIdentifier().apply { | ||
| uri = file.url | ||
| } | ||
| } | ||
|
Check warning on line 124 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
| ) | ||
| } | ||
| } | ||
|
Check warning on line 127 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt
|
||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.