From 14d6b5314d26c210fdd1336783cd89b45f3db09f Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Wed, 28 May 2025 22:00:12 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20direct=20apply=20based=20on=20Dice-S?= =?UTF-8?q?=C3=B8rensen=20coefficient?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/editor/header/DefaultHeaderPanel.kt | 13 +++++++++++++ .../kotlin/ee/carlrobert/codegpt/util/StringUtil.kt | 11 +++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/chat/editor/header/DefaultHeaderPanel.kt b/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/chat/editor/header/DefaultHeaderPanel.kt index 3870c850..9d22cd22 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/chat/editor/header/DefaultHeaderPanel.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/chat/editor/header/DefaultHeaderPanel.kt @@ -3,11 +3,14 @@ package ee.carlrobert.codegpt.toolwindow.chat.editor.header import com.intellij.icons.AllIcons import com.intellij.openapi.actionSystem.* import com.intellij.openapi.actionSystem.toolbarLayout.ToolbarLayoutStrategy +import com.intellij.openapi.application.runUndoTransparentWriteAction import com.intellij.openapi.components.service import com.intellij.openapi.editor.ex.EditorEx import com.intellij.openapi.project.Project import com.intellij.openapi.ui.JBMenuItem import com.intellij.openapi.ui.JBPopupMenu +import com.intellij.openapi.vfs.readText +import com.intellij.openapi.vfs.writeText import com.intellij.ui.AnimatedIcon import com.intellij.ui.components.JBLabel import com.intellij.util.ui.JBUI @@ -15,6 +18,7 @@ import ee.carlrobert.codegpt.CodeGPTBundle import ee.carlrobert.codegpt.toolwindow.chat.editor.actions.* import ee.carlrobert.codegpt.toolwindow.chat.editor.state.EditorStateManager import ee.carlrobert.codegpt.util.EditorUtil +import ee.carlrobert.codegpt.util.StringUtil import javax.swing.JPanel class DefaultHeaderPanel(config: HeaderConfig) : HeaderPanel(config) { @@ -69,6 +73,15 @@ class DefaultHeaderPanel(config: HeaderConfig) : HeaderPanel(config) { ?: EditorUtil.getSelectedEditor(project)?.virtualFile ?: throw IllegalStateException("Virtual file is null") + val directApplyThreshold = 0.85 + val coefficient = StringUtil.getDiceCoefficient(editor.document.text, file.readText()) + if (coefficient > directApplyThreshold) { + runUndoTransparentWriteAction { + file.writeText(editor.document.text) + } + return + } + setLoading() project.service() .getCodeEditsAsync(editor.document.text, file, editor) diff --git a/src/main/kotlin/ee/carlrobert/codegpt/util/StringUtil.kt b/src/main/kotlin/ee/carlrobert/codegpt/util/StringUtil.kt index 391b58ac..518345b6 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/util/StringUtil.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/util/StringUtil.kt @@ -23,6 +23,17 @@ object StringUtil { return completionLine } + fun getDiceCoefficient(s1: String, s2: String): Double { + fun bigrams(str: String): Set = + if (str.length < 2) emptySet() + else str.windowed(2).toSet() + + val bigrams1 = bigrams(s1) + val bigrams2 = bigrams(s2) + val intersection = bigrams1.intersect(bigrams2).size + return (2.0 * intersection) / (bigrams1.size + bigrams2.size) + } + fun String.extractUntilNewline(): String { val index = this.indexOf('\n') if (index == -1) {