From 9a4a5e4a74a0dc34a2b21e638c8d8fd3b94030ae Mon Sep 17 00:00:00 2001 From: Valery Bugakov Date: Wed, 13 Mar 2024 22:54:46 -0700 Subject: [PATCH] Autocomplete: add `kotlin` multiline support (#3404) --- vscode/src/completions/detect-multiline.ts | 1 + .../languages.test.ts | 39 ++++++++++++++++++- vscode/src/tree-sitter/language.ts | 1 + 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/vscode/src/completions/detect-multiline.ts b/vscode/src/completions/detect-multiline.ts index 61e903345d..8cc9095768 100644 --- a/vscode/src/completions/detect-multiline.ts +++ b/vscode/src/completions/detect-multiline.ts @@ -45,6 +45,7 @@ const LANGUAGES_WITH_MULTILINE_SUPPORT = [ 'java', 'javascript', 'javascriptreact', + 'kotlin', 'php', 'python', 'rust', diff --git a/vscode/src/completions/get-inline-completions-tests/languages.test.ts b/vscode/src/completions/get-inline-completions-tests/languages.test.ts index 28244f0144..c1b1595f65 100644 --- a/vscode/src/completions/get-inline-completions-tests/languages.test.ts +++ b/vscode/src/completions/get-inline-completions-tests/languages.test.ts @@ -5,7 +5,7 @@ import type { CompletionParameters } from '@sourcegraph/cody-shared' import { completion } from '../test-helpers' -import { getInlineCompletionsInsertText, params } from './helpers' +import { getInlineCompletionsInsertText, getInlineCompletionsWithInlinedChunks, params } from './helpers' describe('[getInlineCompletions] languages', () => { it('works with python', async () => { @@ -304,4 +304,41 @@ describe('[getInlineCompletions] languages', () => { }" `) }) + + it('works with kotlin', async () => { + const requests: CompletionParameters[] = [] + const result = await getInlineCompletionsWithInlinedChunks( + `fun main() { + for (i in 0..10) { + if (i % 2 == 0) { + █println(i) + } else if (i % 3 == 0) { + println("Multiple of 3: $i") + } else { + println("ODD $i") + } + } + + for (i in 0..11) { + println("unrelated") + } + }█`, + { + languageId: 'kotlin', + onNetworkRequest(params) { + requests.push(params) + }, + } + ) + + expect(requests).toBeMultiLine() + expect(result.items[0].insertText).toMatchInlineSnapshot(` + "println(i) + } else if (i % 3 == 0) { + println("Multiple of 3: $i") + } else { + println("ODD $i") + }" + `) + }) }) diff --git a/vscode/src/tree-sitter/language.ts b/vscode/src/tree-sitter/language.ts index a01268a7c5..7e057c0627 100644 --- a/vscode/src/tree-sitter/language.ts +++ b/vscode/src/tree-sitter/language.ts @@ -16,6 +16,7 @@ export function getLanguageConfig(languageId: string): LanguageConfig | null { case 'java': case 'javascript': case 'javascriptreact': + case 'kotlin': case 'php': case 'rust': case 'svelte':