Start working with spaces:

KT-1532 IDEA should remove extra whitespaces when reformmating code
KT-1378 Code formatting: spaces around ':'

#KT-1532 fixed
#KT-1378 fixed
This commit is contained in:
Nikolay Krasko
2012-03-11 22:11:13 +04:00
parent 1080756a7a
commit c21cdaf413
9 changed files with 155 additions and 15 deletions
@@ -31,8 +31,8 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
import org.jetbrains.jet.plugin.quickfix.ImportClassHelper;
@@ -92,7 +92,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
else {
bodyBuilder.append("val ");
}
bodyBuilder.append(descriptor.getName()).append(" : ").append(descriptor.getType());
bodyBuilder.append(descriptor.getName()).append(":").append(descriptor.getType());
ImportClassHelper.addImportDirectiveIfNeeded(descriptor.getType(), file);
String initializer = defaultInitializer(descriptor.getType(), JetStandardLibrary.getInstance());
if (initializer != null) {
@@ -115,7 +115,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
}
first = false;
bodyBuilder.append(parameterDescriptor.getName());
bodyBuilder.append(" : ");
bodyBuilder.append(":");
bodyBuilder.append(parameterDescriptor.getType().toString());
ImportClassHelper.addImportDirectiveIfNeeded(parameterDescriptor.getType(), file);
@@ -124,7 +124,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
final JetType returnType = descriptor.getReturnType();
final JetStandardLibrary stdlib = JetStandardLibrary.getInstance();
if (!returnType.equals(stdlib.getTuple0Type())) {
bodyBuilder.append(" : ").append(returnType.toString());
bodyBuilder.append(":").append(returnType.toString());
ImportClassHelper.addImportDirectiveIfNeeded(returnType, file);
}
@@ -22,6 +22,10 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.codeStyle.CustomCodeStyleSettings;
public class JetCodeStyleSettings extends CustomCodeStyleSettings {
public boolean SPACE_BEFORE_TYPE_COLON = true;
public boolean SPACE_AFTER_TYPE_COLON = true;
public static JetCodeStyleSettings getInstance(Project project) {
return CodeStyleSettingsManager.getSettings(project).getCustomSettings(JetCodeStyleSettings.class);
}
@@ -44,6 +44,8 @@ public class JetCodeStyleSettingsProvider extends CodeStyleSettingsProvider {
return new JetCodeStyleSettings(settings);
}
@NotNull
@Override
public Configurable createSettingsPage(CodeStyleSettings settings, CodeStyleSettings originalSettings) {
@@ -55,6 +57,7 @@ public class JetCodeStyleSettingsProvider extends CodeStyleSettingsProvider {
protected void initTabs(CodeStyleSettings settings) {
// TODO: activate all parent tabs
addIndentOptionsTab(settings);
addSpacesTab(settings);
}
};
}
@@ -43,7 +43,11 @@ public class JetFormattingModelBuilder implements FormattingModelBuilder {
}
private static SpacingBuilder createSpacingBuilder(CodeStyleSettings settings) {
JetCodeStyleSettings jetSettings = settings.getCustomSettings(JetCodeStyleSettings.class);
return new SpacingBuilder(settings)
// ============ Line breaks ==============
.after(NAMESPACE_HEADER).blankLines(1)
.before(IMPORT_DIRECTIVE).lineBreakInCode()
@@ -57,13 +61,27 @@ public class JetFormattingModelBuilder implements FormattingModelBuilder {
.between(FUN, FUN).blankLines(1)
.between(FUN, PROPERTY).blankLines(1)
.afterInside(LBRACE, BLOCK).lineBreakInCode()
.beforeInside(RBRACE, CLASS_BODY).lineBreakInCode()
.beforeInside(RBRACE, BLOCK).lineBreakInCode()
// =============== Spacing ================
.before(COMMA).spaceIf(settings.SPACE_BEFORE_COMMA)
.after(COMMA).spaceIf(settings.SPACE_AFTER_COMMA)
.around(EQ).spaceIf(settings.SPACE_AROUND_ASSIGNMENT_OPERATORS)
.beforeInside(BLOCK, FUN).spaceIf(settings.SPACE_BEFORE_METHOD_LBRACE)
.afterInside(LBRACE, BLOCK).lineBreakInCode()
.beforeInside(RBRACE, CLASS_BODY).lineBreakInCode()
.beforeInside(RBRACE, BLOCK).lineBreakInCode();
// TODO: Ask for better API
.beforeInside(COLON, PROPERTY).spaceIf(jetSettings.SPACE_BEFORE_TYPE_COLON)
.afterInside(COLON, PROPERTY).spaceIf(jetSettings.SPACE_AFTER_TYPE_COLON)
.beforeInside(COLON, CLASS).spaceIf(jetSettings.SPACE_BEFORE_TYPE_COLON)
.afterInside(COLON, CLASS).spaceIf(jetSettings.SPACE_AFTER_TYPE_COLON)
.beforeInside(COLON, FUN).spaceIf(jetSettings.SPACE_BEFORE_TYPE_COLON)
.afterInside(COLON, FUN).spaceIf(jetSettings.SPACE_AFTER_TYPE_COLON)
.beforeInside(COLON, TYPE_PARAMETER).spaceIf(jetSettings.SPACE_BEFORE_TYPE_COLON)
.afterInside(COLON, TYPE_PARAMETER).spaceIf(jetSettings.SPACE_AFTER_TYPE_COLON)
.beforeInside(COLON, VALUE_PARAMETER).spaceIf(jetSettings.SPACE_BEFORE_TYPE_COLON)
.afterInside(COLON, VALUE_PARAMETER).spaceIf(jetSettings.SPACE_AFTER_TYPE_COLON);
}
@Override
@@ -38,11 +38,12 @@ public class JetLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSetti
@Override
public String getCodeSample(@NotNull SettingsType settingsType) {
return
"class Some {\n" +
"fun foo() : Int {\n" +
"return 0\n" +
"}\n" +
"}";
"class Some {\n" +
" fun foo() : Int {\n" +
" val test : Int = 12\n" +
" return test\n" +
" }\n" +
"}";
}
@Override
@@ -52,7 +53,83 @@ public class JetLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSetti
@Override
public void customizeSettings(@NotNull CodeStyleSettingsCustomizable consumer, @NotNull SettingsType settingsType) {
consumer.showAllStandardOptions();
if (settingsType == SettingsType.SPACING_SETTINGS) {
consumer.showStandardOptions(
"SPACE_AROUND_ASSIGNMENT_OPERATORS",
"SPACE_AROUND_LOGICAL_OPERATORS",
"SPACE_AROUND_EQUALITY_OPERATORS",
"SPACE_AROUND_RELATIONAL_OPERATORS",
"SPACE_AROUND_BITWISE_OPERATORS",
"SPACE_AROUND_ADDITIVE_OPERATORS",
"SPACE_AROUND_MULTIPLICATIVE_OPERATORS",
"SPACE_AROUND_SHIFT_OPERATORS",
"SPACE_AROUND_UNARY_OPERATOR",
"SPACE_AFTER_COMMA",
"SPACE_AFTER_COMMA_IN_TYPE_ARGUMENTS",
"SPACE_BEFORE_COMMA",
"SPACE_AFTER_SEMICOLON",
"SPACE_BEFORE_SEMICOLON",
"SPACE_WITHIN_PARENTHESES",
"SPACE_WITHIN_METHOD_CALL_PARENTHESES",
"SPACE_WITHIN_EMPTY_METHOD_CALL_PARENTHESES",
"SPACE_WITHIN_METHOD_PARENTHESES",
"SPACE_WITHIN_EMPTY_METHOD_PARENTHESES",
"SPACE_WITHIN_IF_PARENTHESES",
"SPACE_WITHIN_WHILE_PARENTHESES",
"SPACE_WITHIN_FOR_PARENTHESES",
"SPACE_WITHIN_TRY_PARENTHESES",
"SPACE_WITHIN_CATCH_PARENTHESES",
"SPACE_WITHIN_SWITCH_PARENTHESES",
// "SPACE_WITHIN_SYNCHRONIZED_PARENTHESES",
"SPACE_WITHIN_CAST_PARENTHESES",
"SPACE_WITHIN_BRACKETS",
"SPACE_WITHIN_BRACES",
// "SPACE_WITHIN_ARRAY_INITIALIZER_BRACES",
"SPACE_AFTER_TYPE_CAST",
"SPACE_BEFORE_METHOD_CALL_PARENTHESES",
"SPACE_BEFORE_METHOD_PARENTHESES",
"SPACE_BEFORE_IF_PARENTHESES",
"SPACE_BEFORE_WHILE_PARENTHESES",
"SPACE_BEFORE_FOR_PARENTHESES",
"SPACE_BEFORE_TRY_PARENTHESES",
"SPACE_BEFORE_CATCH_PARENTHESES",
"SPACE_BEFORE_SWITCH_PARENTHESES",
"SPACE_BEFORE_SYNCHRONIZED_PARENTHESES",
"SPACE_BEFORE_CLASS_LBRACE",
"SPACE_BEFORE_METHOD_LBRACE",
"SPACE_BEFORE_IF_LBRACE",
"SPACE_BEFORE_ELSE_LBRACE",
"SPACE_BEFORE_WHILE_LBRACE",
"SPACE_BEFORE_FOR_LBRACE",
"SPACE_BEFORE_DO_LBRACE",
"SPACE_BEFORE_SWITCH_LBRACE",
"SPACE_BEFORE_TRY_LBRACE",
"SPACE_BEFORE_CATCH_LBRACE",
"SPACE_BEFORE_FINALLY_LBRACE",
"SPACE_BEFORE_SYNCHRONIZED_LBRACE",
"SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE",
"SPACE_BEFORE_ANNOTATION_ARRAY_INITIALIZER_LBRACE",
"SPACE_BEFORE_ELSE_KEYWORD",
"SPACE_BEFORE_WHILE_KEYWORD",
"SPACE_BEFORE_CATCH_KEYWORD",
"SPACE_BEFORE_FINALLY_KEYWORD",
"SPACE_BEFORE_QUEST",
"SPACE_AFTER_QUEST",
"SPACE_BEFORE_COLON",
"SPACE_AFTER_COLON",
"SPACE_BEFORE_TYPE_PARAMETER_LIST"
);
consumer.showCustomOption(JetCodeStyleSettings.class, "SPACE_AFTER_TYPE_COLON", "Space after colon, before declarations' type",
CodeStyleSettingsCustomizable.SPACES_OTHER);
consumer.showCustomOption(JetCodeStyleSettings.class, "SPACE_BEFORE_TYPE_COLON", "Space before colon, after declarations' name",
CodeStyleSettingsCustomizable.SPACES_OTHER);
} else {
consumer.showAllStandardOptions();
}
}
@Override
@@ -0,0 +1,9 @@
import java.util.ArrayList
import java.lang.Iterable
class Some :java.util.ArrayList<Int>() {
fun some<T : Iterable<Int>>(array: Array<String>) : Int {
val test:Int = 12
return test
}
}
@@ -0,0 +1,9 @@
import java.util.ArrayList
import java.lang.Iterable
class Some :java.util.ArrayList<Int>() {
fun some<T :Iterable<Int>>(array :Array<String>) :Int {
val test :Int = 12
return test
}
}
@@ -1,6 +1,6 @@
// "Make variable mutable" "true"
class A() {
var a: Int = 0
set(v: Int) {
var a : Int = 0
set(v : Int) {
}
}
@@ -16,6 +16,10 @@
package org.jetbrains.jet.formatter;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import org.jetbrains.jet.plugin.formatter.JetCodeStyleSettings;
/**
* Based on com.intellij.psi.formatter.java.JavaFormatterTest
*/
@@ -45,6 +49,14 @@ public class JetFormatterTest extends AbstractJetFormatterTest {
}
public void testParameters() throws Exception {
getJetSettings().SPACE_AFTER_TYPE_COLON = true;
getJetSettings().SPACE_BEFORE_TYPE_COLON = false;
doTest();
}
public void testSpaceAroundTypeColon() throws Exception {
getJetSettings().SPACE_AFTER_TYPE_COLON = false;
getJetSettings().SPACE_BEFORE_TYPE_COLON = true;
doTest();
}
@@ -55,4 +67,12 @@ public class JetFormatterTest extends AbstractJetFormatterTest {
public void testWhenEntryExpr() throws Exception {
doTest();
}
public static JetCodeStyleSettings getJetSettings() {
return getSettings().getCustomSettings(JetCodeStyleSettings.class);
}
public static CodeStyleSettings getSettings() {
return CodeStyleSettingsManager.getSettings(getProject());
}
}