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:
@@ -31,8 +31,8 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
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.JetType;
|
||||||
|
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
|
||||||
import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
|
import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
|
||||||
import org.jetbrains.jet.plugin.quickfix.ImportClassHelper;
|
import org.jetbrains.jet.plugin.quickfix.ImportClassHelper;
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
|||||||
else {
|
else {
|
||||||
bodyBuilder.append("val ");
|
bodyBuilder.append("val ");
|
||||||
}
|
}
|
||||||
bodyBuilder.append(descriptor.getName()).append(" : ").append(descriptor.getType());
|
bodyBuilder.append(descriptor.getName()).append(":").append(descriptor.getType());
|
||||||
ImportClassHelper.addImportDirectiveIfNeeded(descriptor.getType(), file);
|
ImportClassHelper.addImportDirectiveIfNeeded(descriptor.getType(), file);
|
||||||
String initializer = defaultInitializer(descriptor.getType(), JetStandardLibrary.getInstance());
|
String initializer = defaultInitializer(descriptor.getType(), JetStandardLibrary.getInstance());
|
||||||
if (initializer != null) {
|
if (initializer != null) {
|
||||||
@@ -115,7 +115,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
|||||||
}
|
}
|
||||||
first = false;
|
first = false;
|
||||||
bodyBuilder.append(parameterDescriptor.getName());
|
bodyBuilder.append(parameterDescriptor.getName());
|
||||||
bodyBuilder.append(" : ");
|
bodyBuilder.append(":");
|
||||||
bodyBuilder.append(parameterDescriptor.getType().toString());
|
bodyBuilder.append(parameterDescriptor.getType().toString());
|
||||||
|
|
||||||
ImportClassHelper.addImportDirectiveIfNeeded(parameterDescriptor.getType(), file);
|
ImportClassHelper.addImportDirectiveIfNeeded(parameterDescriptor.getType(), file);
|
||||||
@@ -124,7 +124,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
|||||||
final JetType returnType = descriptor.getReturnType();
|
final JetType returnType = descriptor.getReturnType();
|
||||||
final JetStandardLibrary stdlib = JetStandardLibrary.getInstance();
|
final JetStandardLibrary stdlib = JetStandardLibrary.getInstance();
|
||||||
if (!returnType.equals(stdlib.getTuple0Type())) {
|
if (!returnType.equals(stdlib.getTuple0Type())) {
|
||||||
bodyBuilder.append(" : ").append(returnType.toString());
|
bodyBuilder.append(":").append(returnType.toString());
|
||||||
ImportClassHelper.addImportDirectiveIfNeeded(returnType, file);
|
ImportClassHelper.addImportDirectiveIfNeeded(returnType, file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
|||||||
import com.intellij.psi.codeStyle.CustomCodeStyleSettings;
|
import com.intellij.psi.codeStyle.CustomCodeStyleSettings;
|
||||||
|
|
||||||
public class JetCodeStyleSettings extends 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) {
|
public static JetCodeStyleSettings getInstance(Project project) {
|
||||||
return CodeStyleSettingsManager.getSettings(project).getCustomSettings(JetCodeStyleSettings.class);
|
return CodeStyleSettingsManager.getSettings(project).getCustomSettings(JetCodeStyleSettings.class);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ public class JetCodeStyleSettingsProvider extends CodeStyleSettingsProvider {
|
|||||||
return new JetCodeStyleSettings(settings);
|
return new JetCodeStyleSettings(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public Configurable createSettingsPage(CodeStyleSettings settings, CodeStyleSettings originalSettings) {
|
public Configurable createSettingsPage(CodeStyleSettings settings, CodeStyleSettings originalSettings) {
|
||||||
@@ -55,6 +57,7 @@ public class JetCodeStyleSettingsProvider extends CodeStyleSettingsProvider {
|
|||||||
protected void initTabs(CodeStyleSettings settings) {
|
protected void initTabs(CodeStyleSettings settings) {
|
||||||
// TODO: activate all parent tabs
|
// TODO: activate all parent tabs
|
||||||
addIndentOptionsTab(settings);
|
addIndentOptionsTab(settings);
|
||||||
|
addSpacesTab(settings);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,11 @@ public class JetFormattingModelBuilder implements FormattingModelBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static SpacingBuilder createSpacingBuilder(CodeStyleSettings settings) {
|
private static SpacingBuilder createSpacingBuilder(CodeStyleSettings settings) {
|
||||||
|
JetCodeStyleSettings jetSettings = settings.getCustomSettings(JetCodeStyleSettings.class);
|
||||||
|
|
||||||
return new SpacingBuilder(settings)
|
return new SpacingBuilder(settings)
|
||||||
|
|
||||||
|
// ============ Line breaks ==============
|
||||||
.after(NAMESPACE_HEADER).blankLines(1)
|
.after(NAMESPACE_HEADER).blankLines(1)
|
||||||
|
|
||||||
.before(IMPORT_DIRECTIVE).lineBreakInCode()
|
.before(IMPORT_DIRECTIVE).lineBreakInCode()
|
||||||
@@ -57,13 +61,27 @@ public class JetFormattingModelBuilder implements FormattingModelBuilder {
|
|||||||
.between(FUN, FUN).blankLines(1)
|
.between(FUN, FUN).blankLines(1)
|
||||||
.between(FUN, PROPERTY).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)
|
.before(COMMA).spaceIf(settings.SPACE_BEFORE_COMMA)
|
||||||
.after(COMMA).spaceIf(settings.SPACE_AFTER_COMMA)
|
.after(COMMA).spaceIf(settings.SPACE_AFTER_COMMA)
|
||||||
.around(EQ).spaceIf(settings.SPACE_AROUND_ASSIGNMENT_OPERATORS)
|
.around(EQ).spaceIf(settings.SPACE_AROUND_ASSIGNMENT_OPERATORS)
|
||||||
.beforeInside(BLOCK, FUN).spaceIf(settings.SPACE_BEFORE_METHOD_LBRACE)
|
.beforeInside(BLOCK, FUN).spaceIf(settings.SPACE_BEFORE_METHOD_LBRACE)
|
||||||
.afterInside(LBRACE, BLOCK).lineBreakInCode()
|
|
||||||
.beforeInside(RBRACE, CLASS_BODY).lineBreakInCode()
|
// TODO: Ask for better API
|
||||||
.beforeInside(RBRACE, BLOCK).lineBreakInCode();
|
.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
|
@Override
|
||||||
|
|||||||
+83
-6
@@ -38,11 +38,12 @@ public class JetLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSetti
|
|||||||
@Override
|
@Override
|
||||||
public String getCodeSample(@NotNull SettingsType settingsType) {
|
public String getCodeSample(@NotNull SettingsType settingsType) {
|
||||||
return
|
return
|
||||||
"class Some {\n" +
|
"class Some {\n" +
|
||||||
"fun foo() : Int {\n" +
|
" fun foo() : Int {\n" +
|
||||||
"return 0\n" +
|
" val test : Int = 12\n" +
|
||||||
"}\n" +
|
" return test\n" +
|
||||||
"}";
|
" }\n" +
|
||||||
|
"}";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -52,7 +53,83 @@ public class JetLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSetti
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void customizeSettings(@NotNull CodeStyleSettingsCustomizable consumer, @NotNull SettingsType settingsType) {
|
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
|
@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"
|
// "Make variable mutable" "true"
|
||||||
class A() {
|
class A() {
|
||||||
var a: Int = 0
|
var a : Int = 0
|
||||||
set(v: Int) {
|
set(v : Int) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.formatter;
|
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
|
* Based on com.intellij.psi.formatter.java.JavaFormatterTest
|
||||||
*/
|
*/
|
||||||
@@ -45,6 +49,14 @@ public class JetFormatterTest extends AbstractJetFormatterTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testParameters() throws Exception {
|
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();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,4 +67,12 @@ public class JetFormatterTest extends AbstractJetFormatterTest {
|
|||||||
public void testWhenEntryExpr() throws Exception {
|
public void testWhenEntryExpr() throws Exception {
|
||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static JetCodeStyleSettings getJetSettings() {
|
||||||
|
return getSettings().getCustomSettings(JetCodeStyleSettings.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CodeStyleSettings getSettings() {
|
||||||
|
return CodeStyleSettingsManager.getSettings(getProject());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user