TextMate: add support for language injection (IntelliLang inspection)

This commit is contained in:
Gregory.Shrago
2015-10-27 20:35:34 +03:00
parent 7e682ec832
commit 472fff60b8
2 changed files with 10 additions and 5 deletions
@@ -19,11 +19,11 @@ import com.intellij.codeHighlighting.HighlightDisplayLevel;
import com.intellij.codeInspection.LocalInspectionTool;
import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.lang.Language;
import com.intellij.psi.*;
import com.intellij.psi.injection.ReferenceInjector;
import com.intellij.psi.util.PsiTreeUtil;
import org.intellij.plugins.intelliLang.Configuration;
import org.intellij.plugins.intelliLang.inject.InjectedLanguage;
import org.intellij.plugins.intelliLang.inject.InjectorUtils;
import org.intellij.plugins.intelliLang.pattern.PatternValidator;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -68,7 +68,8 @@ public class UnknownLanguageID extends LocalInspectionTool {
final Object id = JavaPsiFacade.getInstance(expression.getProject()).
getConstantEvaluationHelper().computeConstantExpression(expression);
if (id instanceof String) {
if (InjectedLanguage.findLanguageById((String)id) == null && ReferenceInjector.findById((String)id) == null) {
Language language = InjectorUtils.getLanguageByString((String)id);
if (language == null) {
holder.registerProblem(expression, "Unknown language '" + id + "'", ProblemHighlightType.LIKE_UNKNOWN_SYMBOL);
}
}
@@ -67,13 +67,17 @@ public class InjectorUtils {
@Nullable
public static Language getLanguage(@NotNull BaseInjection injection) {
String languageId = injection.getInjectedLanguageId();
return getLanguageByString(injection.getInjectedLanguageId());
}
@Nullable
public static Language getLanguageByString(String languageId) {
Language language = InjectedLanguage.findLanguageById(languageId);
if (language != null) return language;
ReferenceInjector injector = ReferenceInjector.findById(languageId);
if (injector != null) return injector.toLanguage();
FileType fileType = FileTypeManager.getInstance().getFileTypeByExtension(languageId);
return fileType instanceof LanguageFileType? ((LanguageFileType)fileType).getLanguage() : null;
return fileType instanceof LanguageFileType ? ((LanguageFileType)fileType).getLanguage() : null;
}
public static boolean registerInjectionSimple(@NotNull PsiLanguageInjectionHost host,