From 56690eddee7b06b6066de22053a500e42647dde9 Mon Sep 17 00:00:00 2001 From: Alexander Doroshko Date: Fri, 19 Apr 2013 17:54:42 +0400 Subject: [PATCH] Do not check spelling for HTML colors + IDEA-53780 Wrong typo warning in a color value --- .../tokenizer/SpellcheckingStrategy.java | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java b/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java index 0d5a48e3c5bb..19cee092f55b 100644 --- a/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java +++ b/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java @@ -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 myCommentTokenizer = new CommentTokenizer(); - protected final Tokenizer myXmlAttributeTokenizer = TokenizerBase.create(TextSplitter.getInstance()); + protected final Tokenizer myXmlAttributeTokenizer = new XmlAttributeValueTokenizer(); protected final Tokenizer myXmlTextTokenizer = new XmlTextTokenizer(); public static final ExtensionPointName 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 { + 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; + } + } }