Skip to content

Commit 26f933a

Browse files
author
Jia Liu
committed
feat: 222 support inlay code complete #109
1 parent e8959a7 commit 26f933a

File tree

19 files changed

+44
-357
lines changed

19 files changed

+44
-357
lines changed

src/222/main/kotlin/com/intellij/temporary/inlay/presentation/LLMInlayRenderer.kt

Lines changed: 0 additions & 81 deletions
This file was deleted.

src/222/main/resources/META-INF/autodev-core.xml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
id="cc.unitmesh.autodevCoder"
2828
bundle="messages.AutoDevBundle" key="settings.autodev.coder"/>
2929
<applicationService
30-
serviceInterface="cc.unitmesh.devti.editor.inlay.LLMInlayManager"
31-
serviceImplementation="cc.unitmesh.devti.editor.inlay.LLMInlayManagerImpl"/>
30+
serviceInterface="com.intellij.temporary.inlay.codecomplete.LLMInlayManager"
31+
serviceImplementation=" com.intellij.temporary.inlay.codecomplete.LLMInlayManagerImpl"/>
3232

3333
<applicationService serviceImplementation="cc.unitmesh.devti.settings.AutoDevSettingsState"/>
3434

@@ -223,6 +223,15 @@
223223
<override-text place="MainMenu" text="Apply Completions to Editor"/>
224224
<override-text place="EditorPopup" text="Accept"/>
225225
</action>
226+
<action id="cc.unitmesh.devti.inlayCompleteCode"
227+
class="cc.unitmesh.devti.actions.InlayCompleteCodeAction"
228+
text="Inlay Complete Code"
229+
description="Inlay complete code!"
230+
>
231+
<keyboard-shortcut keymap="$default" first-keystroke="control PERIOD"/>
232+
233+
<add-to-group group-id="ShowIntentionsGroup" relative-to-action="ShowIntentionActions" anchor="after"/>
234+
</action>
226235

227236
<group id="AutoDevIntentionsActionGroup" class="cc.unitmesh.devti.intentions.IntentionsActionGroup"
228237
icon="cc.unitmesh.devti.AutoDevIcons.AI_COPILOT" searchable="false">

src/main/kotlin/com/intellij/temporary/inlay/presentation/LLMTextInlayPainter.kt renamed to src/233/main/kotlin/com/intellij/temporary/inlay/presentation/LLMTextInlayPainter.kt

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import com.intellij.codeInsight.codeVision.ui.renderers.painters.ICodeVisionEntr
66
import com.intellij.openapi.editor.Editor
77
import com.intellij.openapi.editor.impl.EditorImpl
88
import com.intellij.openapi.editor.markup.TextAttributes
9-
import com.intellij.temporary.inlay.presentation.PresentationUtil.fontMetrics
10-
import com.intellij.temporary.inlay.presentation.PresentationUtil.getFont
11-
import com.intellij.temporary.inlay.presentation.PresentationUtil.getThemeInfoProvider
9+
import com.intellij.temporary.inlay.codecomplete.presentation.PresentationUtil.fontMetrics
10+
import com.intellij.temporary.inlay.codecomplete.presentation.PresentationUtil.getFont
11+
import com.intellij.temporary.inlay.codecomplete.presentation.PresentationUtil.getThemeInfoProvider
1212
import com.intellij.ui.paint.EffectPainter2D
1313
import com.intellij.util.ui.GraphicsUtil
1414
import java.awt.*
@@ -44,24 +44,6 @@ class LLMTextInlayPainter : ICodeVisionEntryBasePainter<String> {
4444
return Dimension(fontMetrics.stringWidth(value), fontMetrics.height)
4545
}
4646

47-
// fun toIcon(
48-
// editor: Editor,
49-
// textAttributes: TextAttributes,
50-
// value: String,
51-
// state: RangeCodeVisionModel.InlayState,
52-
// hovered: Boolean
53-
// ) = object : Icon {
54-
// var size = size(editor, state, value)
55-
//
56-
// override fun getIconHeight(): Int = size.height
57-
//
58-
// override fun paintIcon(c: Component, g: Graphics, x: Int, y: Int) {
59-
// paint(editor, textAttributes, g, value, Point(x, y + (editor as EditorImpl).ascent), state, hovered)
60-
// }
61-
//
62-
// override fun getIconWidth(): Int = size.width
63-
// }
64-
6547
companion object {
6648
fun calculateWidth(editor: Editor, text: String, textLines: List<String>): Int {
6749
val metrics = fontMetrics(editor, getFont(editor, text))

src/233/main/resources/META-INF/autodev-core.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
<applicationService serviceImplementation="cc.unitmesh.devti.settings.AutoDevSettingsState"/>
3131

3232
<applicationService
33-
serviceInterface="cc.unitmesh.devti.editor.inlay.LLMInlayManager"
34-
serviceImplementation="cc.unitmesh.devti.editor.inlay.LLMInlayManagerImpl"/>
33+
serviceInterface=" com.intellij.temporary.inlay.codecomplete.LLMInlayManager"
34+
serviceImplementation=" com.intellij.temporary.inlay.codecomplete.LLMInlayManagerImpl"/>
3535

3636
<typedHandler order="first, before completionAutoPopup"
3737
implementation="cc.unitmesh.devti.editor.inlay.TypeOverHandler"/>

src/main/kotlin/cc/unitmesh/devti/actions/InlayCompleteCodeAction.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package cc.unitmesh.devti.actions
22

3-
import cc.unitmesh.devti.editor.inlay.LLMInlayManager
43
import com.intellij.openapi.actionSystem.AnAction
54
import com.intellij.openapi.actionSystem.AnActionEvent
65
import com.intellij.openapi.actionSystem.CommonDataKeys
76
import com.intellij.openapi.command.CommandProcessor
7+
import com.intellij.temporary.inlay.codecomplete.LLMInlayManager
88

99
/**
1010
* A quick insight action is an action that can be triggered by a user,

src/main/kotlin/cc/unitmesh/devti/actions/LLMApplyInlaysAction.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package cc.unitmesh.devti.actions
22

3-
import cc.unitmesh.devti.editor.inlay.LLMInlayManager
4-
import com.intellij.temporary.inlay.presentation.EditorUtilCopy
3+
import com.intellij.temporary.inlay.codecomplete.presentation.EditorUtilCopy
54
import com.intellij.application.options.CodeStyle
65
import com.intellij.codeInsight.lookup.LookupManager
76
import com.intellij.codeInsight.template.TemplateManager
@@ -15,6 +14,7 @@ import com.intellij.openapi.editor.actionSystem.EditorAction
1514
import com.intellij.openapi.editor.actionSystem.EditorActionHandler
1615
import com.intellij.openapi.project.DumbAware
1716
import com.intellij.openapi.util.TextRange
17+
import com.intellij.temporary.inlay.codecomplete.LLMInlayManager
1818
import java.awt.event.KeyEvent
1919

2020
class LLMApplyInlaysAction : EditorAction(ApplyInlaysHandler()), DumbAware {

src/main/kotlin/cc/unitmesh/devti/intentions/action/CodeCompletionInlayIntention.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package cc.unitmesh.devti.intentions.action
22

33
import cc.unitmesh.devti.AutoDevBundle
4-
import cc.unitmesh.devti.editor.inlay.LLMInlayManager
54
import cc.unitmesh.devti.intentions.action.base.ChatBaseIntention
65
import com.intellij.openapi.editor.Editor
76
import com.intellij.openapi.project.Project
87
import com.intellij.psi.PsiFile
8+
import com.intellij.temporary.inlay.codecomplete.LLMInlayManager
99

1010
class CodeCompletionInlayIntention : ChatBaseIntention() {
1111
override fun priority(): Int = 980

src/main/kotlin/cc/unitmesh/devti/editor/inlay/AutoDevEditorListener.kt renamed to src/main/kotlin/com/intellij/temporary/inlay/codecomplete/AutoDevEditorListener.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cc.unitmesh.devti.editor.inlay
1+
package com.intellij.temporary.inlay.codecomplete
22

33
import com.intellij.openapi.command.CommandProcessor
44
import com.intellij.openapi.editor.Editor
@@ -58,4 +58,4 @@ class AutoDevEditorListener : EditorFactoryListener {
5858
.editorModified(editor, changeOffset)
5959
}
6060
}
61-
}
61+
}

src/main/kotlin/cc/unitmesh/devti/editor/inlay/InlayDisposeContext.kt renamed to src/main/kotlin/com/intellij/temporary/inlay/codecomplete/InlayDisposeContext.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cc.unitmesh.devti.editor.inlay
1+
package com.intellij.temporary.inlay.codecomplete
22

33
enum class InlayDisposeContext {
44
UserAction,
@@ -16,4 +16,4 @@ enum class InlayDisposeContext {
1616
get() = this == SettingsChange || this == Applied
1717
val isSendRejectedTelemetry: Boolean
1818
get() = this == UserAction
19-
}
19+
}

src/main/kotlin/cc/unitmesh/devti/editor/inlay/LLMCommandListener.kt renamed to src/main/kotlin/com/intellij/temporary/inlay/codecomplete/LLMCommandListener.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cc.unitmesh.devti.editor.inlay
1+
package com.intellij.temporary.inlay.codecomplete
22

33
import com.intellij.openapi.command.CommandEvent
44
import com.intellij.openapi.command.CommandListener
@@ -16,7 +16,6 @@ import java.util.concurrent.atomic.AtomicReference
1616

1717
private class UndoTransparentActionState(val editor: Editor, val modificationStamp: Long)
1818
private class CommandEditorState(val modificationStamp: Long, val visualPosition: VisualPosition)
19-
2019
class LLMCommandListener(private val project: Project) : CommandListener {
2120
private val activeCommands = AtomicInteger()
2221
private val startedWithEditor = AtomicBoolean(false)
@@ -112,4 +111,4 @@ class LLMCommandListener(private val project: Project) : CommandListener {
112111
private fun isCaretPositionChange(first: CommandEditorState, second: CommandEditorState): Boolean {
113112
return first.visualPosition != second.visualPosition
114113
}
115-
}
114+
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cc.unitmesh.devti.editor.inlay
1+
package com.intellij.temporary.inlay.codecomplete
22

33
import com.intellij.openapi.editor.Document
44
import com.intellij.openapi.fileEditor.FileDocumentSynchronizationVetoer
@@ -8,4 +8,4 @@ class LLMEditorSaveVetoer : FileDocumentSynchronizationVetoer() {
88
override fun maySaveDocument(document: Document, isSaveExplicit: Boolean): Boolean {
99
return !LLMInlayManagerImpl.KEY_DOCUMENT_SAVE_VETO.isIn(document as UserDataHolder)
1010
}
11-
}
11+
}

src/main/kotlin/cc/unitmesh/devti/editor/inlay/LLMInlayManager.kt renamed to src/main/kotlin/com/intellij/temporary/inlay/codecomplete/LLMInlayManager.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package cc.unitmesh.devti.editor.inlay
1+
package com.intellij.temporary.inlay.codecomplete
22

3-
import com.intellij.temporary.inlay.presentation.LLMInlayRenderer
43
import com.intellij.openapi.Disposable
54
import com.intellij.openapi.application.ApplicationManager
65
import com.intellij.openapi.editor.Editor
76
import com.intellij.openapi.project.Project
87
import com.intellij.openapi.util.TextRange
8+
import com.intellij.temporary.inlay.codecomplete.presentation.LLMInlayRenderer
99
import com.intellij.util.concurrency.annotations.RequiresEdt
1010

1111
interface LLMInlayManager : Disposable {

src/main/kotlin/cc/unitmesh/devti/editor/inlay/LLMInlayManagerImpl.kt renamed to src/main/kotlin/com/intellij/temporary/inlay/codecomplete/LLMInlayManagerImpl.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
package cc.unitmesh.devti.editor.inlay
1+
package com.intellij.temporary.inlay.codecomplete
22

3-
import com.intellij.temporary.inlay.presentation.LLMInlayRenderer
4-
import cc.unitmesh.devti.intentions.action.task.CodeCompletionTask
53
import cc.unitmesh.devti.intentions.action.task.CodeCompletionRequest
4+
import cc.unitmesh.devti.intentions.action.task.CodeCompletionTask
65
import cc.unitmesh.devti.util.parser.Code
76
import cc.unitmesh.devti.util.parser.PostCodeProcessor
87
import com.intellij.injected.editor.EditorWindow
@@ -22,10 +21,10 @@ import com.intellij.openapi.util.Key
2221
import com.intellij.openapi.util.KeyWithDefaultValue
2322
import com.intellij.openapi.util.TextRange
2423
import com.intellij.psi.util.PsiUtilBase
24+
import com.intellij.temporary.inlay.codecomplete.presentation.LLMInlayRenderer
2525
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
2626
import com.intellij.util.concurrency.annotations.RequiresEdt
2727

28-
2928
class LLMInlayManagerImpl : LLMInlayManager {
3029
companion object {
3130
private val logger = logger<LLMInlayManagerImpl>()
@@ -185,4 +184,4 @@ class LLMInlayManagerImpl : LLMInlayManager {
185184
private fun isProcessing(editor: Editor): Boolean {
186185
return KEY_PROCESSING[editor]
187186
}
188-
}
187+
}

src/main/kotlin/cc/unitmesh/devti/editor/inlay/TypeOverHandler.kt renamed to src/main/kotlin/com/intellij/temporary/inlay/codecomplete/TypeOverHandler.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cc.unitmesh.devti.editor.inlay
1+
package com.intellij.temporary.inlay.codecomplete
22

33
import com.intellij.codeInsight.editorActions.TypedHandlerDelegate
44
import com.intellij.openapi.command.CommandProcessor
@@ -28,4 +28,4 @@ class TypeOverHandler : TypedHandlerDelegate() {
2828
return stamp == editor.document.modificationStamp
2929
}
3030
}
31-
}
31+
}

src/222/main/kotlin/com/intellij/temporary/inlay/presentation/EditorUtilCopy.kt renamed to src/main/kotlin/com/intellij/temporary/inlay/codecomplete/presentation/EditorUtilCopy.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.intellij.temporary.inlay.presentation
1+
package com.intellij.temporary.inlay.codecomplete.presentation
22

33
import com.intellij.openapi.editor.Editor
44
import com.intellij.openapi.editor.actions.EditorActionUtil
@@ -104,4 +104,4 @@ object EditorUtilCopy {
104104
}
105105
return result
106106
}
107-
}
107+
}

src/main/kotlin/com/intellij/temporary/inlay/presentation/LLMInlayRenderer.kt renamed to src/main/kotlin/com/intellij/temporary/inlay/codecomplete/presentation/LLMInlayRenderer.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
package com.intellij.temporary.inlay.presentation
1+
package com.intellij.temporary.inlay.codecomplete.presentation
22

3-
import com.intellij.temporary.inlay.presentation.PresentationUtil.getTextAttributes
4-
import com.intellij.temporary.inlay.presentation.PresentationUtil.replaceLeadingTabs
53
import com.intellij.openapi.editor.Editor
64
import com.intellij.openapi.editor.EditorCustomElementRenderer
75
import com.intellij.openapi.editor.Inlay
86
import com.intellij.openapi.editor.markup.TextAttributes
7+
import com.intellij.temporary.inlay.presentation.LLMTextInlayPainter
98
import org.apache.commons.lang.StringUtils
109
import org.jetbrains.annotations.NonNls
1110
import java.awt.Graphics
@@ -36,9 +35,9 @@ class LLMInlayRenderer(editor: Editor, lines: List<String?>) : EditorCustomEleme
3635
private var cachedHeight = -1
3736

3837
init {
39-
this.lines = replaceLeadingTabs(lines, 4)
38+
this.lines = PresentationUtil.replaceLeadingTabs(lines, 4)
4039
content = StringUtils.join(lines, "\n")
41-
textAttributes = getTextAttributes(editor)
40+
textAttributes = PresentationUtil.getTextAttributes(editor)
4241
}
4342

4443
fun getInlay(): Inlay<EditorCustomElementRenderer>? {
@@ -81,4 +80,4 @@ class LLMInlayRenderer(editor: Editor, lines: List<String?>) : EditorCustomEleme
8180

8281
LLMTextInlayPainter.renderCodeBlock(editor, content, lines, g, region, textAttributes)
8382
}
84-
}
83+
}

src/222/main/kotlin/com/intellij/temporary/inlay/presentation/PresentationUtil.kt renamed to src/main/kotlin/com/intellij/temporary/inlay/codecomplete/presentation/PresentationUtil.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.intellij.temporary.inlay.presentation
1+
package com.intellij.temporary.inlay.codecomplete.presentation
22

33
import com.intellij.codeInsight.codeVision.ui.renderers.painters.CodeVisionThemeInfoProvider
44
import com.intellij.codeWithMe.ClientId

0 commit comments

Comments
 (0)