add camelCase and spaceSeparated live template macros (IDEA-145479, IDEA-135255)

This commit is contained in:
peter
2016-02-08 19:19:55 +01:00
parent aebe440492
commit cd09bd12ef
4 changed files with 55 additions and 21 deletions
@@ -39,17 +39,28 @@ class NamingConventionMacrosTest extends TestCase {
assert "_foo_bar_" == snakeCase("-FOO-BAR-")
assert "a_b_c_d_e_f_g" == snakeCase("a-b.c/d|e*f+g")
assert "a_b" == snakeCase("a--b")
assert "foo_bar" == snakeCase("FOO BAR")
}
public void "test lowercase and dash"() {
assert "foo-bar" == new SplitWordsMacro.LowercaseAndDash().convertString("FOO_BAR")
}
public void "test dashes to camel case"() {
assert "fooBar" == new ConvertToCamelCaseMacro.ReplaceDashesToCamelCaseMacro().convertString("foo-bar")?.toString()
assert "fooBar" == new ConvertToCamelCaseMacro.ReplaceDashesToCamelCaseMacro().convertString("FOO-BAR")?.toString()
public void "test to camel case"() {
assert "fooBar" == new ConvertToCamelCaseMacro().convertString("foo-bar")?.toString()
assert "fooBar" == new ConvertToCamelCaseMacro().convertString("FOO-BAR")?.toString()
assert "fooBar" == new ConvertToCamelCaseMacro().convertString("foo bar")?.toString()
}
public void "test space separated"() {
assert "foo Bar" == new SplitWordsMacro.SpaceSeparated().convertString("fooBar")
assert "foo bar" == new SplitWordsMacro.SpaceSeparated().convertString("foo-bar")
}
public void "test underscoresToCamelCase"() {
assert "fooBar-goo" == new ConvertToCamelCaseMacro.ReplaceUnderscoresToCamelCaseMacro().convertString("foo_bar-goo")?.toString()
}
private static def snakeCase(String s) {
return new SplitWordsMacro.SnakeCaseMacro().convertString(s)
}
@@ -22,21 +22,21 @@ import com.intellij.codeInsight.template.ExpressionContext;
import com.intellij.codeInsight.template.Result;
import com.intellij.codeInsight.template.TextResult;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.codeStyle.NameUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
/**
* @author Konstantin Bulenkov
*/
public abstract class ConvertToCamelCaseMacro extends MacroBase {
public class ConvertToCamelCaseMacro extends MacroBase {
private final String mySeparator;
public ConvertToCamelCaseMacro() {
super("camelCase", "camelCase(String)");
}
private ConvertToCamelCaseMacro(String name, String description, String separator) {
private ConvertToCamelCaseMacro(String name, String description) {
super(name, description);
mySeparator = separator;
}
@Nullable
@@ -53,26 +53,35 @@ public abstract class ConvertToCamelCaseMacro extends MacroBase {
@Nullable
@VisibleForTesting
public Result convertString(String text) {
final List<String> strings = StringUtil.split(text, mySeparator);
if (strings.size() > 0) {
final String[] strings = splitWords(text);
if (strings.length > 0) {
final StringBuilder buf = new StringBuilder();
buf.append(strings.get(0).toLowerCase());
for (int i = 1; i < strings.size(); i++) {
buf.append(StringUtil.capitalize(strings.get(i).toLowerCase()));
buf.append(strings[0].toLowerCase());
for (int i = 1; i < strings.length; i++) {
String string = strings[i];
if (Character.isLetterOrDigit(string.charAt(0))) {
buf.append(StringUtil.capitalize(string.toLowerCase()));
}
}
return new TextResult(buf.toString());
}
return null;
}
@NotNull
protected String[] splitWords(String text) {
return NameUtil.nameToWords(text);
}
public static class ReplaceUnderscoresToCamelCaseMacro extends ConvertToCamelCaseMacro {
public ReplaceUnderscoresToCamelCaseMacro() {
super("underscoresToCamelCase", CodeInsightBundle.message("macro.undescoresToCamelCase.string"), "_");
super("underscoresToCamelCase", CodeInsightBundle.message("macro.undescoresToCamelCase.string"));
}
}
public static class ReplaceDashesToCamelCaseMacro extends ConvertToCamelCaseMacro {
public ReplaceDashesToCamelCaseMacro() {
super("dashesToCamelCase", "dashesToCamelCase(String)", "-");
@NotNull
@Override
protected String[] splitWords(String text) {
return text.split("_");
}
}
}
@@ -105,4 +105,17 @@ public abstract class SplitWordsMacro extends MacroBase {
return word.toLowerCase();
}
}
public static class SpaceSeparated extends SplitWordsMacro {
public SpaceSeparated() {
super("spaceSeparated", "spaceSeparated(String)", ' ');
}
@NotNull
@Override
protected String convertCase(@NotNull String word) {
//noinspection StringToUpperCaseOrToLowerCaseWithoutLocale
return word;
}
}
}
@@ -471,10 +471,11 @@
<liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.FileNameMacro"/>
<liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.FileNameWithoutExtensionMacro"/>
<liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.ConvertToCamelCaseMacro$ReplaceUnderscoresToCamelCaseMacro"/>
<liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.ConvertToCamelCaseMacro$ReplaceDashesToCamelCaseMacro"/>
<liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.ConvertToCamelCaseMacro"/>
<liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.SplitWordsMacro$CapitalizeAndUnderscoreMacro"/>
<liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.SplitWordsMacro$SnakeCaseMacro"/>
<liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.SplitWordsMacro$LowercaseAndDash"/>
<liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.SplitWordsMacro$SpaceSeparated"/>
<liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.CompleteMacro"/>
<liveTemplateMacro implementation="com.intellij.codeInsight.template.macro.CompleteSmartMacro"/>