RUST-13858 API for disabling toml plugin completion

GitOrigin-RevId: c77dbdbf35773550050a06d6c72f9b5ff1bec1a9
This commit is contained in:
konrad.sztenderski
2024-03-27 23:09:34 +00:00
committed by intellij-monorepo-bot
parent 6b131342f8
commit ddb26ed347
6 changed files with 70 additions and 0 deletions
@@ -39,6 +39,7 @@ import org.toml.lang.psi.ext.kind
class TomlJsonSchemaCompletionContributor : CompletionContributor() {
override fun fillCompletionVariants(parameters: CompletionParameters, result: CompletionResultSet) {
if (!TomlExperiments.isJsonSchemaEnabled) return
if (!TomlJsonSchemaCompletionFileFilter.shouldCompleteInFile(parameters.originalFile)) return
val position = parameters.position
val jsonSchemaService = JsonSchemaService.Impl.get(position.project)
@@ -0,0 +1,14 @@
package org.toml.ide.json
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.psi.PsiFile
interface TomlJsonSchemaCompletionFileFilter {
companion object {
val EP_NAME = ExtensionPointName.create<TomlJsonSchemaCompletionFileFilter>("org.toml.ide.json.tomlJsonSchemaCompletionFileFilter")
fun shouldCompleteInFile(file: PsiFile): Boolean = EP_NAME.extensionsIfPointIsRegistered.all { it.shouldCompleteInFile(file) }
}
fun shouldCompleteInFile(file: PsiFile): Boolean
}
@@ -3,6 +3,13 @@
<plugin id="com.intellij.modules.json"/>
</dependencies>
<extensionPoints>
<extensionPoint
qualifiedName="org.toml.ide.json.tomlJsonSchemaCompletionFileFilter"
interface="org.toml.ide.json.TomlJsonSchemaCompletionFileFilter"
dynamic="true"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<completion.contributor order="last" language="TOML" id="TomlJsonSchema"
implementationClass="org.toml.ide.json.TomlJsonSchemaCompletionContributor"/>
@@ -34,6 +34,16 @@ class TomlCompletionFixture(
doNotContainsCompletion(variants, render)
}
fun checkNotContainsCompletions(
code: String,
) = withNoAutoCompletion {
myFixture.configureByText(defaultFileName, code.trimIndent())
val lookups = myFixture.completeBasic()
if (lookups.isNotEmpty()) {
error("Expected completions to be empty")
}
}
fun checkCompletionList(
variants: List<String>,
code: String,
@@ -0,0 +1,34 @@
package org.toml.ide.json
import com.intellij.psi.PsiFile
import com.intellij.testFramework.ExtensionTestUtil
class TomlJsonSchemaCompletionFileFilterTest : TomlJsonSchemaCompletionTestBase() {
fun `test no completion for file when filtered out`() {
ExtensionTestUtil.maskExtensions(TomlJsonSchemaCompletionFileFilter.EP_NAME, listOf(TestFileFilterExclude()), testRootDisposable)
checkNotContainsCompletions("""
<caret>
""")
}
fun `test complete if filter is not valid for this file`() {
ExtensionTestUtil.maskExtensions(TomlJsonSchemaCompletionFileFilter.EP_NAME, listOf(TestFileFilterDoNotExclude()), testRootDisposable)
checkContainsCompletion(setOf("dependencies"), """
dep<caret>
""")
}
}
private class TestFileFilterExclude: TomlJsonSchemaCompletionFileFilter {
override fun shouldCompleteInFile(file: PsiFile): Boolean {
return file.name != "Cargo.toml"
}
}
private class TestFileFilterDoNotExclude: TomlJsonSchemaCompletionFileFilter {
override fun shouldCompleteInFile(file: PsiFile): Boolean {
return file.name != "Foo.toml"
}
}
@@ -30,6 +30,10 @@ abstract class TomlJsonSchemaCompletionTestBase : TomlJsonSchemaTestBase() {
render: LookupElement.() -> String = { lookupString }
) = completionFixture.checkNotContainsCompletion(variants, code, render)
fun checkNotContainsCompletions(
@Language("TOML") code: String,
) = completionFixture.checkNotContainsCompletions(code)
fun doSingleCompletion(
@Language("TOML") before: String,
@Language("TOML") after: String