diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/CodeWhispererLanguageManager.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/CodeWhispererLanguageManager.kt index 1ef98cf119d..aae1ac995e6 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/CodeWhispererLanguageManager.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/CodeWhispererLanguageManager.kt @@ -10,24 +10,31 @@ import com.intellij.psi.PsiFile import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererC import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererCpp import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererCsharp +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererDart import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererGo import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererJava import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererJavaScript import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererJson import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererJsx import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererKotlin +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererLua import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererPhp import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererPlainText +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererPowershell import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererPython +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererR import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererRuby import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererRust import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererScala import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererShell import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererSql +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererSwift +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererSystemVerilog import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererTf import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererTsx import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererTypeScript import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererUnknownLanguage +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererVue import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererYaml @Service @@ -73,8 +80,15 @@ class CodeWhispererLanguageManager { fileTypeName.contains("php") -> CodeWhispererPhp.INSTANCE fileTypeName.contains("sql") -> CodeWhispererSql.INSTANCE fileTypeName.contains("go") -> CodeWhispererGo.INSTANCE - fileTypeName.contains("shell") -> CodeWhispererShell.INSTANCE fileTypeName.contains("rust") -> CodeWhispererRust.INSTANCE + fileTypeName.contains("swift") -> CodeWhispererSwift.INSTANCE + fileTypeName.contains("lua") -> CodeWhispererLua.INSTANCE + fileTypeName.contains("dart") -> CodeWhispererDart.INSTANCE + fileTypeName.contains("vue") -> CodeWhispererVue.INSTANCE + fileTypeName.contains("systemverilog") -> CodeWhispererSystemVerilog.INSTANCE + fileTypeName.contains("powershell") -> CodeWhispererPowershell.INSTANCE + fileTypeName.contains("shell") -> CodeWhispererShell.INSTANCE + fileTypeName == "r" -> CodeWhispererR.INSTANCE // fileTypeName.contains("plain_text") -> CodeWhispererPlainText.INSTANCE // This needs to be removed because Hcl files are recognised as plain_text by JB else -> null } @@ -125,7 +139,14 @@ class CodeWhispererLanguageManager { listOf("go") to CodeWhispererGo.INSTANCE, listOf("php") to CodeWhispererPhp.INSTANCE, listOf("sql") to CodeWhispererSql.INSTANCE, - listOf("txt") to CodeWhispererPlainText.INSTANCE + listOf("txt") to CodeWhispererPlainText.INSTANCE, + listOf("sv", "svh", "vh") to CodeWhispererSystemVerilog.INSTANCE, + listOf("dart") to CodeWhispererDart.INSTANCE, + listOf("lua", "wlua") to CodeWhispererLua.INSTANCE, + listOf("swift") to CodeWhispererSwift.INSTANCE, + listOf("vue") to CodeWhispererVue.INSTANCE, + listOf("ps1", "psm1") to CodeWhispererPowershell.INSTANCE, + listOf("r") to CodeWhispererR.INSTANCE, ).map { val exts = it.first val lang = it.second diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererDart.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererDart.kt new file mode 100644 index 00000000000..7ba4d022cb3 --- /dev/null +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererDart.kt @@ -0,0 +1,22 @@ +// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.codewhisperer.language.languages + +import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage +import software.aws.toolkits.telemetry.CodewhispererLanguage + +class CodeWhispererDart private constructor() : CodeWhispererProgrammingLanguage() { + override val languageId: String = ID + + override fun toTelemetryType(): CodewhispererLanguage = CodewhispererLanguage.Dart + + override fun isCodeCompletionSupported(): Boolean = true + + companion object { + // TODO: confirm with service team language id + const val ID = "dart" + + val INSTANCE = CodeWhispererDart() + } +} diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererLua.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererLua.kt new file mode 100644 index 00000000000..5b2f39d73e7 --- /dev/null +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererLua.kt @@ -0,0 +1,22 @@ +// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.codewhisperer.language.languages + +import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage +import software.aws.toolkits.telemetry.CodewhispererLanguage + +class CodeWhispererLua private constructor() : CodeWhispererProgrammingLanguage() { + override val languageId: String = ID + + override fun toTelemetryType(): CodewhispererLanguage = CodewhispererLanguage.Lua + + override fun isCodeCompletionSupported(): Boolean = true + + companion object { + // TODO: confirm with service team language id + const val ID = "lua" + + val INSTANCE = CodeWhispererLua() + } +} diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererPowershell.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererPowershell.kt new file mode 100644 index 00000000000..e74e7153c45 --- /dev/null +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererPowershell.kt @@ -0,0 +1,22 @@ +// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.codewhisperer.language.languages + +import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage +import software.aws.toolkits.telemetry.CodewhispererLanguage + +class CodeWhispererPowershell private constructor() : CodeWhispererProgrammingLanguage() { + override val languageId: String = ID + + override fun toTelemetryType(): CodewhispererLanguage = CodewhispererLanguage.Powershell + + override fun isCodeCompletionSupported(): Boolean = true + + companion object { + // TODO: confirm with service team language id + const val ID = "powershell" + + val INSTANCE = CodeWhispererPowershell() + } +} diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererR.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererR.kt new file mode 100644 index 00000000000..370abe8d84a --- /dev/null +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererR.kt @@ -0,0 +1,22 @@ +// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.codewhisperer.language.languages + +import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage +import software.aws.toolkits.telemetry.CodewhispererLanguage + +class CodeWhispererR private constructor() : CodeWhispererProgrammingLanguage() { + override val languageId: String = ID + + override fun toTelemetryType(): CodewhispererLanguage = CodewhispererLanguage.R + + override fun isCodeCompletionSupported(): Boolean = true + + companion object { + // TODO: confirm with service team language id + const val ID = "r" + + val INSTANCE = CodeWhispererR() + } +} diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererSwift.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererSwift.kt new file mode 100644 index 00000000000..36513f8908e --- /dev/null +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererSwift.kt @@ -0,0 +1,22 @@ +// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.codewhisperer.language.languages + +import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage +import software.aws.toolkits.telemetry.CodewhispererLanguage + +class CodeWhispererSwift private constructor() : CodeWhispererProgrammingLanguage() { + override val languageId: String = ID + + override fun toTelemetryType(): CodewhispererLanguage = CodewhispererLanguage.Swift + + override fun isCodeCompletionSupported(): Boolean = true + + companion object { + // TODO: confirm with service team language id + const val ID = "swift" + + val INSTANCE = CodeWhispererSwift() + } +} diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererSystemVerilog.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererSystemVerilog.kt new file mode 100644 index 00000000000..4f445ebffad --- /dev/null +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererSystemVerilog.kt @@ -0,0 +1,22 @@ +// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.codewhisperer.language.languages + +import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage +import software.aws.toolkits.telemetry.CodewhispererLanguage + +class CodeWhispererSystemVerilog private constructor() : CodeWhispererProgrammingLanguage() { + override val languageId: String = ID + + override fun toTelemetryType(): CodewhispererLanguage = CodewhispererLanguage.SystemVerilog + + override fun isCodeCompletionSupported(): Boolean = true + + companion object { + // TODO: confirm with service team language id + const val ID = "systemverilog" + + val INSTANCE = CodeWhispererSystemVerilog() + } +} diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererVue.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererVue.kt new file mode 100644 index 00000000000..a2345178fe2 --- /dev/null +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/language/languages/CodeWhispererVue.kt @@ -0,0 +1,22 @@ +// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.codewhisperer.language.languages + +import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage +import software.aws.toolkits.telemetry.CodewhispererLanguage + +class CodeWhispererVue private constructor() : CodeWhispererProgrammingLanguage() { + override val languageId: String = ID + + override fun toTelemetryType(): CodewhispererLanguage = CodewhispererLanguage.Vue + + override fun isCodeCompletionSupported(): Boolean = true + + companion object { + // TODO: confirm with service team language id + const val ID = "vue" + + val INSTANCE = CodeWhispererVue() + } +} diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererLanguageManagerTest.kt b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererLanguageManagerTest.kt index 333d30bd0d8..f03c31e3f55 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererLanguageManagerTest.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererLanguageManagerTest.kt @@ -19,21 +19,32 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhisp import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererC import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererCpp import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererCsharp +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererDart import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererGo import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererJava import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererJavaScript +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererJson import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererJsx import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererKotlin +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererLua import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererPhp import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererPlainText +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererPowershell import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererPython +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererR import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererRuby import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererRust import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererScala import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererShell import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererSql +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererSwift +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererSystemVerilog +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererTf import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererTsx import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererTypeScript +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererUnknownLanguage +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererVue +import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererYaml import software.aws.toolkits.jetbrains.utils.rules.PythonCodeInsightTestFixtureRule import software.aws.toolkits.telemetry.CodewhispererLanguage import kotlin.reflect.full.createInstance @@ -70,26 +81,97 @@ class CodeWhispererLanguageManagerTest { assertThat(lang1).isSameAs(lang2) } + @Test + fun `test getProgrammingLanguage(virtualFile) by fileType`() { + testGetProgrammingLanguageUtil(fileTypeNames = listOf("java", "Java", "JAVA"), fileExtensions = listOf("")) + testGetProgrammingLanguageUtil(listOf("python", "Python"), listOf("")) + testGetProgrammingLanguageUtil(listOf("javascript", "JavaScript"), listOf("")) + testGetProgrammingLanguageUtil(listOf("jsx harmony"), listOf("")) + testGetProgrammingLanguageUtil(listOf("typescript jsx"), listOf("tsx")) + testGetProgrammingLanguageUtil(listOf("typescript", "TypeScript"), listOf("")) + testGetProgrammingLanguageUtil(listOf("c#", "C#"), listOf("")) + testGetProgrammingLanguageUtil(listOf("go", "Go"), listOf("")) + testGetProgrammingLanguageUtil(listOf("kotlin", "Kotlin"), listOf("")) + testGetProgrammingLanguageUtil(listOf("php", "Php"), listOf("")) + testGetProgrammingLanguageUtil(listOf("ruby", "Ruby"), listOf("")) + testGetProgrammingLanguageUtil(listOf("scala", "Scala"), listOf("")) + testGetProgrammingLanguageUtil(listOf("sql", "Sql"), listOf("")) +// testGetProgrammingLanguageUtil(listOf("c++"), listOf("")) +// testGetProgrammingLanguageUtil(listOf("c"), listOf("")) + testGetProgrammingLanguageUtil(listOf("Shell"), listOf("")) + testGetProgrammingLanguageUtil(listOf("Rust"), listOf("")) + testGetProgrammingLanguageUtil(listOf("Dart"), listOf("")) + testGetProgrammingLanguageUtil(listOf("Lua"), listOf("")) + testGetProgrammingLanguageUtil(listOf("Powershell"), listOf("")) + testGetProgrammingLanguageUtil(listOf("R"), listOf("")) + testGetProgrammingLanguageUtil(listOf("Swift"), listOf("")) + testGetProgrammingLanguageUtil(listOf("SystemVerilog"), listOf("")) + testGetProgrammingLanguageUtil(listOf("Vue"), listOf("")) + } + + @Test + fun `test getProgrammingLanguage(virtualFile) by fileExtensions`() { + testGetProgrammingLanguageUtil(fileTypeNames = listOf("foo"), fileExtensions = listOf("java")) + testGetProgrammingLanguageUtil(listOf("bar"), listOf("py")) + testGetProgrammingLanguageUtil(listOf("baz"), listOf("js")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("jsx")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("tsx")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("ts")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("cs")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("go")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("kt")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("php")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("rb")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("scala")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("sql")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("txt")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("cpp", "c++", "cc")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("c", "h")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("sh")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("rs")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("dart")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("lua", "wlua")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("ps1", "psm1")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("r")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("swift")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("sv", "svh", "vh")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("vue")) + } + + @Test + fun `test getProgrammingLanguage(virtualFile) will fallback to unknown if either byFileType or byFileExtension works`() { + testGetProgrammingLanguageUtil(listOf("foo"), listOf("foo")) + testGetProgrammingLanguageUtil(listOf("foo"), listOf("")) + testGetProgrammingLanguageUtil(listOf(""), listOf("foo")) + } + @Test fun `test getProgrammingLanguage(virtualFile)`() { - testGetProgrammingLanguageUtil(listOf("java", "Java", "JAVA"), listOf("java"), CodeWhispererJava::class.java) - testGetProgrammingLanguageUtil(listOf("python", "Python"), listOf("py"), CodeWhispererPython::class.java) - testGetProgrammingLanguageUtil(listOf("javascript", "JavaScript"), listOf("js"), CodeWhispererJavaScript::class.java) - testGetProgrammingLanguageUtil(listOf("jsx harmony"), listOf("jsx"), CodeWhispererJsx::class.java) - testGetProgrammingLanguageUtil(listOf("typescript jsx"), listOf("tsx"), CodeWhispererTsx::class.java) - testGetProgrammingLanguageUtil(listOf("typescript", "TypeScript"), listOf("ts"), CodeWhispererTypeScript::class.java) - testGetProgrammingLanguageUtil(listOf("c#", "C#"), listOf("cs"), CodeWhispererCsharp::class.java) - testGetProgrammingLanguageUtil(listOf("go", "Go"), listOf("go"), CodeWhispererGo::class.java) - testGetProgrammingLanguageUtil(listOf("kotlin", "Kotlin"), listOf("kt"), CodeWhispererKotlin::class.java) - testGetProgrammingLanguageUtil(listOf("php", "Php"), listOf("php"), CodeWhispererPhp::class.java) - testGetProgrammingLanguageUtil(listOf("ruby", "Ruby"), listOf("rb"), CodeWhispererRuby::class.java) - testGetProgrammingLanguageUtil(listOf("scala", "Scala"), listOf("scala"), CodeWhispererScala::class.java) - testGetProgrammingLanguageUtil(listOf("sql", "Sql"), listOf("sql"), CodeWhispererSql::class.java) - testGetProgrammingLanguageUtil(listOf("plain_text"), listOf("txt"), CodeWhispererPlainText::class.java) - testGetProgrammingLanguageUtil(listOf("c++"), listOf("cpp", "c++", "cc"), CodeWhispererCpp::class.java) - testGetProgrammingLanguageUtil(listOf("c"), listOf("c", "h"), CodeWhispererC::class.java) - testGetProgrammingLanguageUtil(listOf("Shell Script"), listOf("sh"), CodeWhispererShell::class.java) - testGetProgrammingLanguageUtil(listOf("Rust"), listOf("rs"), CodeWhispererRust::class.java) + testGetProgrammingLanguageUtil(listOf("java", "Java", "JAVA"), listOf("java")) + testGetProgrammingLanguageUtil(listOf("python", "Python"), listOf("py")) + testGetProgrammingLanguageUtil(listOf("javascript", "JavaScript"), listOf("js")) + testGetProgrammingLanguageUtil(listOf("jsx harmony"), listOf("jsx")) + testGetProgrammingLanguageUtil(listOf("typescript jsx"), listOf("tsx")) + testGetProgrammingLanguageUtil(listOf("typescript", "TypeScript"), listOf("ts")) + testGetProgrammingLanguageUtil(listOf("c#", "C#"), listOf("cs")) + testGetProgrammingLanguageUtil(listOf("go", "Go"), listOf("go")) + testGetProgrammingLanguageUtil(listOf("kotlin", "Kotlin"), listOf("kt")) + testGetProgrammingLanguageUtil(listOf("php", "Php"), listOf("php")) + testGetProgrammingLanguageUtil(listOf("ruby", "Ruby"), listOf("rb")) + testGetProgrammingLanguageUtil(listOf("scala", "Scala"), listOf("scala")) + testGetProgrammingLanguageUtil(listOf("sql", "Sql"), listOf("sql")) + testGetProgrammingLanguageUtil(listOf("plain_text"), listOf("txt")) + testGetProgrammingLanguageUtil(listOf("c++"), listOf("cpp", "c++", "cc")) + testGetProgrammingLanguageUtil(listOf("c"), listOf("c", "h")) + testGetProgrammingLanguageUtil(listOf("Shell Script"), listOf("sh")) + testGetProgrammingLanguageUtil(listOf("Rust"), listOf("rs")) + testGetProgrammingLanguageUtil(listOf("Dart"), listOf("dart")) + testGetProgrammingLanguageUtil(listOf("Lua"), listOf("lua", "wlua")) + testGetProgrammingLanguageUtil(listOf("Powershell"), listOf("ps1", "psm1")) + testGetProgrammingLanguageUtil(listOf("R"), listOf("r")) + testGetProgrammingLanguageUtil(listOf("Swift"), listOf("swift")) + testGetProgrammingLanguageUtil(listOf("SystemVerilog"), listOf("sv", "svh", "vh")) + testGetProgrammingLanguageUtil(listOf("Vue"), listOf("vue")) } @Test @@ -102,10 +184,9 @@ class CodeWhispererLanguageManagerTest { assertThat(manager.getLanguage(psiFileMock)).isInstanceOf(CodeWhispererPython::class.java) } - private fun testGetProgrammingLanguageUtil( + private inline fun testGetProgrammingLanguageUtil( fileTypeNames: List, fileExtensions: List?, - expectedLanguage: Class, ) { fileExtensions?.forEach { fileExtension -> fileTypeNames.forEach { fileTypeName -> @@ -116,22 +197,129 @@ class CodeWhispererLanguageManagerTest { on { fileType } doReturn fileTypeMock on { extension } doReturn fileExtension } - assertThat(manager.getLanguage(vFileMock)).isInstanceOf(expectedLanguage) + assertThat(manager.getLanguage(vFileMock)).isInstanceOf(T::class.java) } } } } class CodeWhispererProgrammingLanguageTest { + @Rule + @JvmField + val applicationRule = ApplicationRule() + + val suts = listOf( + CodeWhispererC.INSTANCE, + CodeWhispererCpp.INSTANCE, + CodeWhispererCsharp.INSTANCE, + CodeWhispererDart.INSTANCE, + CodeWhispererGo.INSTANCE, + CodeWhispererJava.INSTANCE, + CodeWhispererJavaScript.INSTANCE, + CodeWhispererJson.INSTANCE, + CodeWhispererJsx.INSTANCE, + CodeWhispererKotlin.INSTANCE, + CodeWhispererLua.INSTANCE, + CodeWhispererPhp.INSTANCE, + CodeWhispererPlainText.INSTANCE, + CodeWhispererPowershell.INSTANCE, + CodeWhispererPython.INSTANCE, + CodeWhispererR.INSTANCE, + CodeWhispererRuby.INSTANCE, + CodeWhispererRust.INSTANCE, + CodeWhispererScala.INSTANCE, + CodeWhispererShell.INSTANCE, + CodeWhispererSql.INSTANCE, + CodeWhispererSwift.INSTANCE, + CodeWhispererSystemVerilog.INSTANCE, + CodeWhispererTf.INSTANCE, + CodeWhispererTsx.INSTANCE, + CodeWhispererTypeScript.INSTANCE, + CodeWhispererUnknownLanguage.INSTANCE, + CodeWhispererVue.INSTANCE, + CodeWhispererYaml.INSTANCE, + ) + class TestLanguage : CodeWhispererProgrammingLanguage() { override val languageId: String = "test-language" override fun toTelemetryType(): CodewhispererLanguage = CodewhispererLanguage.Unknown } @Test - fun `test language isSupport`() { - EP_NAME.extensionList.forEach { language -> - assertThat(language.isCodeCompletionSupported()).isTrue + fun `test language inline completion support`() { + suts.forEach { sut -> + val expected = when (sut) { + // supported + is CodeWhispererC, + is CodeWhispererCpp, + is CodeWhispererCsharp, + is CodeWhispererGo, + is CodeWhispererJava, + is CodeWhispererJavaScript, + is CodeWhispererJson, + is CodeWhispererJsx, + is CodeWhispererKotlin, + is CodeWhispererPhp, + is CodeWhispererPython, + is CodeWhispererRuby, + is CodeWhispererRust, + is CodeWhispererScala, + is CodeWhispererShell, + is CodeWhispererSql, + is CodeWhispererTf, + is CodeWhispererTsx, + is CodeWhispererTypeScript, + is CodeWhispererYaml, + is CodeWhispererDart, + is CodeWhispererLua, + is CodeWhispererPowershell, + is CodeWhispererR, + is CodeWhispererSwift, + is CodeWhispererSystemVerilog, + is CodeWhispererVue, + -> true + + // not supported + is CodeWhispererPlainText, is CodeWhispererUnknownLanguage -> false + + else -> false + } + + assertThat(sut.isCodeCompletionSupported()).isEqualTo(expected) + } + } + + @Test + fun `test language crossfile support`() { + suts.forEach { sut -> + val expected = when (sut) { + is CodeWhispererJava, + is CodeWhispererJavaScript, + is CodeWhispererJsx, + is CodeWhispererPython, + is CodeWhispererTsx, + is CodeWhispererTypeScript, + -> true + + else -> false + } + + assertThat(sut.isSupplementalContextSupported()).isEqualTo(expected) + } + } + + @Test + fun `test language utg support`() { + suts.forEach { sut -> + val expected = when (sut) { + is CodeWhispererJava, + is CodeWhispererPython, + -> true + + else -> false + } + + assertThat(sut.isUTGSupported()).isEqualTo(expected) } } diff --git a/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-dart.xml b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-dart.xml new file mode 100644 index 00000000000..e02e988ac6c --- /dev/null +++ b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-dart.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-lua.xml b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-lua.xml new file mode 100644 index 00000000000..05a202e5829 --- /dev/null +++ b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-lua.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-powershell.xml b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-powershell.xml new file mode 100644 index 00000000000..4fac40f59b6 --- /dev/null +++ b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-powershell.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-r.xml b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-r.xml new file mode 100644 index 00000000000..08a46e5b783 --- /dev/null +++ b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-r.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-swift.xml b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-swift.xml new file mode 100644 index 00000000000..1b8e657c274 --- /dev/null +++ b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-swift.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-systemverfilog.xml b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-systemverfilog.xml new file mode 100644 index 00000000000..d7a94b957ad --- /dev/null +++ b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-systemverfilog.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-vue.xml b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-vue.xml new file mode 100644 index 00000000000..825a9212410 --- /dev/null +++ b/plugins/amazonq/src/main/resources/META-INF/amazonq-ext-vue.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/plugins/amazonq/src/main/resources/META-INF/plugin.xml b/plugins/amazonq/src/main/resources/META-INF/plugin.xml index 243a18dff8a..f4ce6dfac23 100644 --- a/plugins/amazonq/src/main/resources/META-INF/plugin.xml +++ b/plugins/amazonq/src/main/resources/META-INF/plugin.xml @@ -49,19 +49,26 @@ aws.toolkit.core com.intellij.modules.lang + Dart com.intellij.database org.jetbrains.plugins.go com.intellij.java org.jetbrains.kotlin + com.tang JavaScriptDebugger com.jetbrains.php + com.intellij.plugin.adernov.powershell com.intellij.modules.python + R4Intellij com.intellij.modules.rider org.jetbrains.plugins.ruby com.jetbrains.rust org.rust.lang org.intellij.scala + com.intellij.swift com.jetbrains.sh + studio.edaphic.sv + org.jetbrains.plugins.vue com.intellij.cwm.guest com.intellij.jetbrains.client