[xml] WEB-72084 Use information from InjectedLanguageManager to adjust the inspection severity level.

GitOrigin-RevId: 5bc575f71bf20511808ab1227927a71accd9a084
This commit is contained in:
Piotr Tomiak
2025-04-23 10:53:44 +00:00
committed by intellij-monorepo-bot
parent be17cfb09e
commit 06eca8a8a0
5 changed files with 22 additions and 30 deletions
@@ -43,6 +43,7 @@ internal open class CodeFenceInjector : MultiHostInjector {
}
registrar.startInjecting(language)
injectAsOnePlace(host, registrar, language)
registrar.makeInspectionsLenient(true)
registrar.doneInjecting()
}
@@ -253,11 +253,6 @@ public class XmlHighlightVisitor extends XmlElementVisitor implements HighlightV
}
HighlightInfoType type = getTagProblemInfoType(tag);
if (InjectedLanguageManager.getInstance(tag.getProject()).getInjectionHost(tag) != null) {
// disabled in injected fragments
return;
}
addElementsForTagWithManyQuickFixes(tag, XmlAnalysisBundle.message("xml.inspections.element.is.not.allowed.here", name), type);
return;
}
@@ -296,7 +291,9 @@ public class XmlHighlightVisitor extends XmlElementVisitor implements HighlightV
}
public static boolean isInjectedWithoutValidation(PsiElement element) {
return InjectedLanguageManager.getInstance(element.getProject()).isFrankensteinInjection(element);
InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(element.getProject());
return injectedLanguageManager.isFrankensteinInjection(element)
|| injectedLanguageManager.shouldInspectionsBeLenient(element);
}
public static boolean skipValidation(PsiElement context) {
@@ -2,6 +2,7 @@
package com.intellij.codeInspection.htmlInspections;
import com.intellij.codeInsight.daemon.impl.analysis.RemoveAttributeIntentionFix;
import com.intellij.codeInsight.daemon.impl.analysis.XmlHighlightVisitor;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.codeInspection.ProblemsHolder;
@@ -115,6 +116,10 @@ public class HtmlUnknownAttributeInspectionBase extends HtmlUnknownElementInspec
highlightType = providerHighlightType;
}
}
if (XmlHighlightVisitor.isInjectedWithoutValidation(tag)
&& ProblemHighlightType.WEAK_WARNING.ordinal() < highlightType.ordinal()) {
highlightType = ProblemHighlightType.WEAK_WARNING;
}
return highlightType;
}
}
@@ -5,7 +5,6 @@ import com.intellij.codeInsight.daemon.impl.analysis.XmlHighlightingAwareElement
import com.intellij.codeInspection.*;
import com.intellij.codeInspection.util.InspectionMessage;
import com.intellij.html.impl.providers.HtmlAttributeValueProvider;
import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.NlsSafe;
@@ -99,21 +98,17 @@ public class RequiredAttributesInspectionBase extends HtmlLocalInspectionTool im
if (!hasAttribute(tag, attrName) &&
!XmlExtension.getExtension(tag.getContainingFile()).isRequiredAttributeImplicitlyPresent(tag, attrName)) {
if (InjectedLanguageManager.getInstance(tag.getProject()).getInjectionHost(tag) == null) {
// disabled in injected fragments
LocalQuickFix insertRequiredAttributeIntention =
isOnTheFly ? XmlQuickFixFactory.getInstance().insertRequiredAttributeFix(tag, attrName) : null;
reportOneTagProblem(
tag,
attrName,
XmlAnalysisBundle.message("xml.inspections.element.doesnt.have.required.attribute", name, attrName),
insertRequiredAttributeIntention,
holder,
getIntentionAction(attrName),
isOnTheFly
);
}
LocalQuickFix insertRequiredAttributeIntention =
isOnTheFly ? XmlQuickFixFactory.getInstance().insertRequiredAttributeFix(tag, attrName) : null;
reportOneTagProblem(
tag,
attrName,
XmlAnalysisBundle.message("xml.inspections.element.doesnt.have.required.attribute", name, attrName),
insertRequiredAttributeIntention,
holder,
getIntentionAction(attrName),
isOnTheFly
);
}
}
}
@@ -2,11 +2,11 @@
package com.intellij.xml.util;
import com.intellij.codeInsight.daemon.impl.analysis.XmlHighlightVisitor;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.codeInspection.XmlSuppressableInspectionTool;
import com.intellij.lang.ASTNode;
import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElementVisitor;
@@ -21,19 +21,13 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
public final class CheckTagEmptyBodyInspection extends XmlSuppressableInspectionTool {
private final boolean enableInInjectedCode;
public CheckTagEmptyBodyInspection() {
this(false);
}
public CheckTagEmptyBodyInspection(boolean enableInInjectedCode) {
this.enableInInjectedCode = enableInInjectedCode;
}
@Override
public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
if (!enableInInjectedCode && InjectedLanguageManager.getInstance(holder.getProject()).isInjectedFragment(holder.getFile())) {
if (XmlHighlightVisitor.isInjectedWithoutValidation(holder.getFile())) {
// not inside injected code
return PsiElementVisitor.EMPTY_VISITOR;
}