package org.intellij.plugins.markdown.injection;
import com.intellij.codeInsight.completion.CompletionParameters;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.lang.Language;
import com.intellij.openapi.extensions.ExtensionPointName;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public interface CodeFenceLanguageProvider {
ExtensionPointName<CodeFenceLanguageProvider> EP_NAME = ExtensionPointName.create("org.intellij.markdown.fenceLanguageProvider");
/**
* Implement this method to provide custom rule for selecting {@link Language} to inject into the code fences
* @param infoString the string with "info string" of the code fence. Not trimmed nor lowercased.
* @return Language which should be injected into the code fence with the given infoString.
* No custom injection rule is applied if null is returned.
* @see <a href="http://spec.commonmark.org/0.27/#info-string">Info String</a>
* @see <a href="http://spec.commonmark.org/0.27/#code-fence">Code Fence</a>
*/
@Nullable
Language getLanguageByInfoString(@NotNull String infoString);
/**
* Implement this method to provide custom completion variants for info strings in the all fences.
* Note that a special insertHandler for handling code fence opening will be prepended for your lookup.
* That means that the custom insert handlers should be ready for uncommitted documents and rely only on editor and document.
* See {@link LanguageListCompletionContributor#doFillVariants} for the details on implementation.
* @return A list of {@link LookupElement} which will be prepended to the default language list.
*/
@NotNull
List<LookupElement> getCompletionVariantsForInfoString(@NotNull CompletionParameters parameters);
}