Skip to content

Commit 4666893

Browse files
committed
fix: add initial K2-backed scope code completions
Signed-off-by: Akash Yadav <akashyadav@appdevforall.org>
1 parent d6defa6 commit 4666893

File tree

7 files changed

+445
-9
lines changed

7 files changed

+445
-9
lines changed

lsp/java/src/main/java/com/itsaky/androidide/lsp/java/edits/BaseJavaEditHandler.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ import io.github.rosemoe.sora.widget.CodeEditor
3030
*/
3131
open class BaseJavaEditHandler : DefaultEditHandler() {
3232

33-
override fun executeCommand(editor: CodeEditor, command: Command?) {
34-
if (editor is ILspEditor) {
35-
editor.executeCommand(command)
36-
return
37-
}
38-
super.executeCommand(editor, command)
39-
}
33+
override fun executeCommand(editor: CodeEditor, command: Command?) {
34+
if (editor is ILspEditor) {
35+
editor.executeCommand(command)
36+
return
37+
}
38+
super.executeCommand(editor, command)
39+
}
4040
}

lsp/kotlin/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ dependencies {
3838

3939
implementation(projects.lsp.api)
4040
implementation(projects.lsp.models)
41+
implementation(projects.editorApi)
4142
implementation(projects.eventbusEvents)
4243
implementation(projects.subprojects.kotlinAnalysisApi)
4344
implementation(projects.shared)

lsp/kotlin/src/main/java/com/itsaky/androidide/lsp/kotlin/KotlinLanguageServer.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.itsaky.androidide.lsp.api.ILanguageServer
2929
import com.itsaky.androidide.lsp.api.IServerSettings
3030
import com.itsaky.androidide.lsp.kotlin.compiler.Compiler
3131
import com.itsaky.androidide.lsp.kotlin.compiler.KotlinProjectModel
32+
import com.itsaky.androidide.lsp.kotlin.completion.complete
3233
import com.itsaky.androidide.lsp.kotlin.diagnostic.collectDiagnosticsFor
3334
import com.itsaky.androidide.lsp.models.CompletionParams
3435
import com.itsaky.androidide.lsp.models.CompletionResult
@@ -160,7 +161,14 @@ class KotlinLanguageServer : ILanguageServer {
160161
}
161162

162163
override fun complete(params: CompletionParams?): CompletionResult {
163-
return CompletionResult.EMPTY
164+
if (params == null) {
165+
logger.warn("Cannot complete for null params")
166+
return CompletionResult.EMPTY
167+
}
168+
169+
logger.debug("complete(position={}, file={})", params.position, params.file)
170+
return compiler?.compilationEnvironmentFor(params.file)?.complete(params)
171+
?: CompletionResult.EMPTY
164172
}
165173

166174
override suspend fun findReferences(params: ReferenceParams): ReferenceResult {
@@ -268,7 +276,6 @@ class KotlinLanguageServer : ILanguageServer {
268276

269277
compiler?.compilationEnvironmentFor(event.changedFile)?.apply {
270278
val content = FileManager.getDocumentContents(event.changedFile)
271-
logger.info("Notifying KtFileManager for file {} with contents {}", event.changedFile, content)
272279
fileManager.onFileContentChanged(event.changedFile, content)
273280
}
274281

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.itsaky.androidide.lsp.kotlin.completion
2+
3+
import com.itsaky.androidide.editor.api.ILspEditor
4+
import com.itsaky.androidide.lsp.edits.DefaultEditHandler
5+
import com.itsaky.androidide.lsp.models.Command
6+
import io.github.rosemoe.sora.widget.CodeEditor
7+
8+
/**
9+
* Implementation of [DefaultEditHandler] which avoids reflection in
10+
* [DefaultEditHandler.executeCommand].
11+
*
12+
* @author Akash Yadav
13+
*/
14+
open class BaseKotlinEditHandler : DefaultEditHandler() {
15+
16+
override fun executeCommand(editor: CodeEditor, command: Command?) {
17+
if (editor is ILspEditor) {
18+
editor.executeCommand(command)
19+
return
20+
}
21+
super.executeCommand(editor, command)
22+
}
23+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.itsaky.androidide.lsp.kotlin.completion
2+
3+
/**
4+
* The context for the providing code completions in a file.
5+
*/
6+
enum class CompletionContext {
7+
8+
/**
9+
* Scope completions (local variables, parameters, etc.)
10+
*/
11+
Scope,
12+
13+
/**
14+
* Member completions (properties, member functions, extension functions, etc.)
15+
*/
16+
Member,
17+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.itsaky.androidide.lsp.kotlin.completion
2+
3+
import com.itsaky.androidide.lsp.edits.IEditHandler
4+
import com.itsaky.androidide.lsp.models.Command
5+
import com.itsaky.androidide.lsp.models.CompletionItem
6+
import com.itsaky.androidide.lsp.models.CompletionItemKind
7+
import com.itsaky.androidide.lsp.models.ICompletionData
8+
import com.itsaky.androidide.lsp.models.InsertTextFormat
9+
import com.itsaky.androidide.lsp.models.MatchLevel
10+
import com.itsaky.androidide.lsp.models.TextEdit
11+
12+
class KotlinCompletionItem(
13+
ideLabel: String,
14+
detail: String,
15+
insertText: String?,
16+
insertTextFormat: InsertTextFormat?,
17+
sortText: String?,
18+
command: Command?,
19+
completionKind: CompletionItemKind,
20+
matchLevel: MatchLevel,
21+
additionalTextEdits: List<TextEdit>?,
22+
data: ICompletionData?,
23+
editHandler: IEditHandler = BaseKotlinEditHandler()
24+
) : CompletionItem(
25+
ideLabel,
26+
detail,
27+
insertText,
28+
insertTextFormat,
29+
sortText,
30+
command,
31+
completionKind,
32+
matchLevel,
33+
additionalTextEdits,
34+
data,
35+
editHandler
36+
) {
37+
38+
constructor() : this(
39+
"", // label
40+
"", // detail
41+
null, // insertText
42+
null, // insertTextFormat
43+
null, // sortText
44+
null, // command
45+
CompletionItemKind.NONE, // kind
46+
MatchLevel.NO_MATCH, // match level
47+
ArrayList(), // additionalEdits
48+
null // data
49+
)
50+
}

0 commit comments

Comments
 (0)