Do not check spelling for HTML colors + IDEA-53780 Wrong typo warning in a color value

This commit is contained in:
Alexander Doroshko
2013-04-19 17:59:22 +04:00
parent c1bbd7678f
commit 56690eddee
@@ -18,10 +18,9 @@ package com.intellij.spellchecker.tokenizer;
import com.intellij.codeInsight.daemon.impl.actions.AbstractSuppressByNoInspectionCommentFix;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiComment;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiNameIdentifierOwner;
import com.intellij.psi.PsiPlainText;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.psi.xml.XmlText;
import com.intellij.spellchecker.inspections.PlainTextSplitter;
@@ -34,7 +33,7 @@ import org.jetbrains.annotations.NotNull;
public class SpellcheckingStrategy {
protected final Tokenizer<PsiComment> myCommentTokenizer = new CommentTokenizer();
protected final Tokenizer<XmlAttributeValue> myXmlAttributeTokenizer = TokenizerBase.create(TextSplitter.getInstance());
protected final Tokenizer<XmlAttributeValue> myXmlAttributeTokenizer = new XmlAttributeValueTokenizer();
protected final Tokenizer<XmlText> myXmlTextTokenizer = new XmlTextTokenizer();
public static final ExtensionPointName<SpellcheckingStrategy> EP_NAME = ExtensionPointName.create("com.intellij.spellchecker.support");
@@ -85,4 +84,27 @@ public class SpellcheckingStrategy {
public static SpellCheckerQuickFix[] getDefaultBatchFixes() {
return BATCH_FIXES;
}
private static class XmlAttributeValueTokenizer extends Tokenizer<XmlAttributeValue> {
public void tokenize(@NotNull final XmlAttributeValue element, final TokenConsumer consumer) {
if (element instanceof PsiLanguageInjectionHost && InjectedLanguageUtil.hasInjections((PsiLanguageInjectionHost)element)) return;
final String valueTextTrimmed = element.getValue().trim();
// do not inspect colors like #00aaFF
if (valueTextTrimmed.startsWith("#") && valueTextTrimmed.length() <= 7 && isHexString(valueTextTrimmed.substring(1))) {
return;
}
consumer.consumeToken(element, TextSplitter.getInstance());
}
private static boolean isHexString(final String s) {
for (int i = 0; i < s.length(); i++) {
if (!StringUtil.isHexDigit(s.charAt(i))) {
return false;
}
}
return true;
}
}
}