use of com.perl5.lang.pod.parser.psi.PodVisitor in project Perl5-IDEA by Camelcade.
the class PodLegacySectionLinkInspection method buildVisitor.
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
return new PodVisitor() {
@Override
public void visitPodFormatterL(@NotNull PodFormatterL o) {
PodLinkDescriptor descriptor = o.getLinkDescriptor();
if (descriptor != null && !descriptor.isUrl() && descriptor.getSection() != null) {
PsiElement contentBlock = o.getContentBlock();
TextRange sectionRange = descriptor.getSectionTextRangeInLink();
if (contentBlock != null && sectionRange != null) {
if (isSectionLegacy(contentBlock.getText(), sectionRange)) {
holder.registerProblem(o, "Section \"" + descriptor.getSection() + "\" should have a slash before it", ProblemHighlightType.LIKE_DEPRECATED, sectionRange.shiftRight(contentBlock.getStartOffsetInParent()));
}
}
}
super.visitPodFormatterL(o);
}
private boolean isSectionLegacy(String text, TextRange sectionRange) {
if (text == null) {
return false;
}
int sectionStartOffset = sectionRange.getStartOffset();
if (sectionStartOffset == 0) {
return true;
}
char prevChar = text.charAt(sectionStartOffset - 1);
if (sectionStartOffset == 1) {
return prevChar != '/';
}
char prevPrevChar = text.charAt(sectionStartOffset - 2);
return !(prevChar == '/' || prevChar == '"' && prevPrevChar == '/');
}
};
}
use of com.perl5.lang.pod.parser.psi.PodVisitor in project Perl5-IDEA by Camelcade.
the class PodUnresolvableLinkInspection method buildVisitor.
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
return new PodVisitor() {
@Override
public void visitPodFormatLink(@NotNull PsiPodFormatLink o) {
for (PsiReference reference : o.getReferences()) {
if (reference instanceof PsiPolyVariantReference && ((PsiPolyVariantReference) reference).multiResolve(false).length == 0) {
String error;
if (reference instanceof PodLinkToFileReference) {
String fileName = "UNKNONW";
PodLinkDescriptor descriptor = o.getLinkDescriptor();
if (descriptor != null && descriptor.getFileId() != null) {
fileName = descriptor.getFileId();
}
error = "Can't find POD or PM file by: " + fileName;
} else if (reference instanceof PodLinkToSectionReference) {
String fileName = "UNKNONW";
PodLinkDescriptor descriptor = o.getLinkDescriptor();
if (descriptor != null && descriptor.getSection() != null) {
fileName = descriptor.getSection();
}
error = "Can't find POD section: " + fileName;
} else {
error = "Can't find reference target";
}
holder.registerProblem(reference, error, ProblemHighlightType.GENERIC_ERROR_OR_WARNING);
}
}
super.visitPodFormatLink(o);
}
};
}
Aggregations