mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
WEB-9563 There is a bug with Emmet and BEM namings
This commit is contained in:
@@ -29,6 +29,8 @@ import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
@@ -36,6 +38,7 @@ import java.util.regex.Pattern;
|
||||
import static com.google.common.base.Strings.isNullOrEmpty;
|
||||
import static com.google.common.base.Strings.nullToEmpty;
|
||||
import static com.google.common.collect.Iterables.*;
|
||||
import static com.google.common.collect.Lists.newArrayList;
|
||||
import static com.google.common.collect.Lists.newLinkedList;
|
||||
|
||||
/**
|
||||
@@ -53,15 +56,17 @@ public class BemEmmetFilter extends ZenCodingFilter {
|
||||
private static final String MODIFIER_SEPARATOR = "_";
|
||||
private static final String SHORT_ELEMENT_PREFIX = "-";
|
||||
|
||||
private static final Joiner ELEMENTS_JOINER = Joiner.on(ELEMENT_SEPARATOR).skipNulls();
|
||||
private static final Splitter ELEMENTS_SPLITTER = Splitter.on(ELEMENT_SEPARATOR);
|
||||
private static final Splitter MODIFIERS_SPLITTER = Splitter.on(MODIFIER_SEPARATOR).limit(2);
|
||||
private static final Splitter CLASS_NAME_SPLITTER = Splitter.on(' ').trimResults().omitEmptyStrings();
|
||||
private static final Joiner CLASS_NAME_JOINER = Joiner.on(' ');
|
||||
|
||||
private static final Function<String, String> CLASS_NAME_NORMALIZER = new Function<String, String>() {
|
||||
@NotNull
|
||||
@Override
|
||||
public String apply(@NotNull String input) {
|
||||
if(!input.startsWith(SHORT_ELEMENT_PREFIX)) {
|
||||
if (!input.startsWith(SHORT_ELEMENT_PREFIX)) {
|
||||
return input;
|
||||
}
|
||||
|
||||
@@ -122,7 +127,7 @@ public class BemEmmetFilter extends ZenCodingFilter {
|
||||
return node;
|
||||
}
|
||||
|
||||
private static Iterable<String> processClassName(String className, GenerationNode node) {
|
||||
private static Iterable<String> processClassName(String className, @NotNull GenerationNode node) {
|
||||
className = fillWithBemElements(className, node);
|
||||
className = fillWithBemModifiers(className, node);
|
||||
|
||||
@@ -155,20 +160,29 @@ public class BemEmmetFilter extends ZenCodingFilter {
|
||||
|
||||
@NotNull
|
||||
private static BemState extractBemStateFromClassName(@NotNull String className) {
|
||||
BemState result = new BemState();
|
||||
final BemState result = new BemState();
|
||||
if (className.contains(ELEMENT_SEPARATOR)) {
|
||||
List<String> blockElements = newLinkedList(ELEMENTS_SPLITTER.split(className));
|
||||
result.setBlock(getFirst(blockElements, ""));
|
||||
if (blockElements.size() > 1) {
|
||||
List<String> elementModifiers = newLinkedList(MODIFIERS_SPLITTER.split(blockElements.get(1)));
|
||||
result.setElement(getFirst(elementModifiers, ""));
|
||||
if (elementModifiers.size() > 1) {
|
||||
result.setModifier(getLast(elementModifiers, ""));
|
||||
final Iterator<String> elementsIterator = ELEMENTS_SPLITTER.split(className).iterator();
|
||||
result.setBlock(elementsIterator.next());
|
||||
|
||||
final Collection<String> elementParts = newLinkedList();
|
||||
while (elementsIterator.hasNext()) {
|
||||
final String elementPart = elementsIterator.next();
|
||||
if (!elementsIterator.hasNext()) {
|
||||
final List<String> elementModifiers = newArrayList(MODIFIERS_SPLITTER.split(elementPart));
|
||||
elementParts.add(getFirst(elementModifiers, null));
|
||||
if (elementModifiers.size() > 1) {
|
||||
result.setModifier(getLast(elementModifiers, ""));
|
||||
}
|
||||
}
|
||||
else {
|
||||
elementParts.add(elementPart);
|
||||
}
|
||||
}
|
||||
result.setElement(ELEMENTS_JOINER.join(elementParts));
|
||||
}
|
||||
else if (className.contains(MODIFIER_SEPARATOR)) {
|
||||
Iterable<String> blockModifiers = MODIFIERS_SPLITTER.split(className);
|
||||
final Iterable<String> blockModifiers = MODIFIERS_SPLITTER.split(className);
|
||||
result.setBlock(getFirst(blockModifiers, ""));
|
||||
result.setModifier(getLast(blockModifiers, ""));
|
||||
}
|
||||
@@ -322,6 +336,7 @@ public class BemEmmetFilter extends ZenCodingFilter {
|
||||
return isNullOrEmpty(block) && isNullOrEmpty(element) && isNullOrEmpty(modifier);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public BemState copy() {
|
||||
return new BemState(block, element, modifier);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user