Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"type" : "bugfix",
"description" : "- Fixed \"Insert to Cursor\" button to correctly insert code blocks at the current cursor position in the active file"
}
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,18 @@
}

CHAT_INSERT_TO_CURSOR -> {
handleChat(AmazonQChatServer.insertToCursorPosition, node)
val editor = FileEditorManager.getInstance(project).selectedTextEditor

Check warning on line 356 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L356

Added line #L356 was not covered by tests
val textDocument = editor?.let { TextDocumentIdentifier(toUriString(it.virtualFile)) }
val cursorPosition = editor?.let { LspEditorUtil.getCursorPosition(it) }
val enrichedParams = (node.params as? ObjectNode)?.apply {
set<JsonNode>("cursorPosition", serializer.objectMapper.valueToTree(cursorPosition))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see SEND_CHAT_COMMAND_PROMPT to see how we can reduce number of serializer calls

set<JsonNode>("textDocument", serializer.objectMapper.valueToTree(textDocument))
} ?: node.params

Check warning on line 362 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L360-L362

Added lines #L360 - L362 were not covered by tests

val enrichedNode = (node as ObjectNode).apply {
set<JsonNode>("params", enrichedParams)

Check warning on line 365 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L364-L365

Added lines #L364 - L365 were not covered by tests
}
handleChat(AmazonQChatServer.insertToCursorPosition, enrichedNode)

Check warning on line 367 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L367

Added line #L367 was not covered by tests
}

CHAT_LINK_CLICK -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.vfs.VirtualFileManager
import migration.software.aws.toolkits.jetbrains.settings.AwsSettings
import org.eclipse.lsp4j.ApplyWorkspaceEditParams
import org.eclipse.lsp4j.ApplyWorkspaceEditResponse
import org.eclipse.lsp4j.ConfigurationParams
import org.eclipse.lsp4j.MessageActionItem
import org.eclipse.lsp4j.MessageParams
Expand Down Expand Up @@ -62,6 +64,7 @@
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogResult
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.LspEditorUtil
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.TelemetryParsingUtil
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator
import software.aws.toolkits.jetbrains.services.telemetry.TelemetryService
Expand Down Expand Up @@ -567,6 +570,20 @@
)
}

override fun applyEdit(params: ApplyWorkspaceEditParams): CompletableFuture<ApplyWorkspaceEditResponse> =
CompletableFuture.supplyAsync(

Check warning on line 574 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt#L574

Added line #L574 was not covered by tests
{
try {
LspEditorUtil.applyWorkspaceEdit(project, params.edit)
ApplyWorkspaceEditResponse(true)
} catch (e: Exception) {
LOG.warn(e) { "Failed to apply workspace edit" }
ApplyWorkspaceEditResponse(false)
}

Check warning on line 582 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt#L576-L582

Added lines #L576 - L582 were not covered by tests
},
ApplicationManager.getApplication()::invokeLater
)

Check warning on line 585 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt#L584-L585

Added lines #L584 - L585 were not covered by tests

private fun refreshVfs(path: String) {
val currPath = Paths.get(path)
if (currPath.startsWith(localHistoryPath)) return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,20 @@
package software.aws.toolkits.jetbrains.services.amazonq.lsp.util

import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.editor.Document
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.LogicalPosition
import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileManager
import org.eclipse.lsp4j.Position
import org.eclipse.lsp4j.Range
import org.eclipse.lsp4j.TextEdit
import org.eclipse.lsp4j.WorkspaceEdit
import software.aws.toolkits.core.utils.getLogger
import software.aws.toolkits.core.utils.warn
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CursorPosition
Expand Down Expand Up @@ -63,13 +72,54 @@
)
} else {
return@runReadAction CursorPosition(
Position(
editor.caretModel.primaryCaret.logicalPosition.line,
editor.caretModel.primaryCaret.logicalPosition.column
)
getCursorPosition(editor)

Check warning on line 75 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt#L75

Added line #L75 was not covered by tests
)
}
}

fun getCursorPosition(editor: Editor): Position =
runReadAction {
Position(
editor.caretModel.primaryCaret.logicalPosition.line,
editor.caretModel.primaryCaret.logicalPosition.column
)
}

Check warning on line 86 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt#L81-L86

Added lines #L81 - L86 were not covered by tests

fun applyWorkspaceEdit(project: Project, edit: WorkspaceEdit) {
Copy link
Contributor

@rli rli Jul 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

follow up later with tests for at least this method

WriteCommandAction.runWriteCommandAction(project) {

Check warning on line 89 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt#L89

Added line #L89 was not covered by tests
edit.documentChanges?.forEach { change ->
if (change.isLeft) {
val textDocumentEdit = change.left
applyEditsToFile(project, textDocumentEdit.textDocument.uri, textDocumentEdit.edits)

Check warning on line 93 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt#L92-L93

Added lines #L92 - L93 were not covered by tests
}
}

Check warning on line 95 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt#L95

Added line #L95 was not covered by tests

edit.changes?.forEach { (uri, textEdits) ->
applyEditsToFile(project, uri, textEdits)
}
}
}

Check warning on line 101 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt#L98-L101

Added lines #L98 - L101 were not covered by tests

private fun applyEditsToFile(project: Project, uri: String, textEdits: List<TextEdit>) {
val file = VirtualFileManager.getInstance().findFileByUrl(uri) ?: return
val document = FileDocumentManager.getInstance().getDocument(file) ?: return
val editor = FileEditorManager.getInstance(project).getSelectedEditor(file)?.let {
if (it is com.intellij.openapi.fileEditor.TextEditor) it.editor else null
}

textEdits.forEach { textEdit ->
val startOffset = calculateOffset(editor, document, textEdit.range.start)
val endOffset = calculateOffset(editor, document, textEdit.range.end)
document.replaceString(startOffset, endOffset, textEdit.newText)
}
}

Check warning on line 115 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt#L110-L115

Added lines #L110 - L115 were not covered by tests

private fun calculateOffset(editor: Editor?, document: Document, position: Position): Int =
if (editor != null) {

Check notice on line 118 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

If-Then foldable to '?:'

If-Then foldable to '?:'
editor.logicalPositionToOffset(LogicalPosition(position.line, position.character))

Check warning on line 119 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt#L119

Added line #L119 was not covered by tests
} else {
document.getLineStartOffset(position.line) + position.character
}

Check warning on line 122 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/LspEditorUtil.kt#L121-L122

Added lines #L121 - L122 were not covered by tests

private val LOG = getLogger<LspEditorUtil>()
}
Loading