Ident elvis with normal ident in Kotlin code style (KT-25008)

#KT-25008 Fixed
This commit is contained in:
Nikolay Krasko
2018-06-21 20:47:06 +03:00
parent 341e7746a2
commit 8e31113a4f
9 changed files with 61 additions and 1 deletions
@@ -53,6 +53,7 @@ public class KotlinCodeStyleSettings extends CustomCodeStyleSettings {
public boolean CONTINUATION_INDENT_FOR_CHAINED_CALLS = true;
public boolean CONTINUATION_INDENT_IN_SUPERTYPE_LISTS = true;
public boolean CONTINUATION_INDENT_IN_IF_CONDITIONS = true;
public boolean CONTINUATION_INDENT_IN_ELVIS = true;
public int BLANK_LINES_AROUND_BLOCK_WHEN_BRANCHES = 0;
public int WRAP_EXPRESSION_BODY_FUNCTIONS = 0;
public int WRAP_ELVIS_EXPRESSIONS = 1;
@@ -193,9 +193,15 @@ abstract class KotlinCommonBlock(
private fun splitSubBlocksOnElvis(nodeSubBlocks: List<ASTBlock>): List<ASTBlock> {
val elvisIndex = nodeSubBlocks.indexOfBlockWithType(ELVIS_SET)
if (elvisIndex >= 0) {
val indent = if (settings.kotlinCustomSettings.CONTINUATION_INDENT_IN_ELVIS) {
Indent.getContinuationIndent()
} else {
Indent.getNormalIndent()
}
return nodeSubBlocks.splitAtIndex(
elvisIndex,
Indent.getContinuationIndent(),
indent,
null
)
}
@@ -48,6 +48,7 @@ class KotlinStyleGuideCodeStyle : PredefinedCodeStyle("Kotlin style guide", Kotl
CONTINUATION_INDENT_FOR_CHAINED_CALLS = false
CONTINUATION_INDENT_IN_SUPERTYPE_LISTS = false
CONTINUATION_INDENT_IN_IF_CONDITIONS = false
CONTINUATION_INDENT_IN_ELVIS = false
WRAP_EXPRESSION_BODY_FUNCTIONS = CodeStyleSettings.WRAP_AS_NEEDED
IF_RPAREN_ON_NEW_LINE = true
}
@@ -339,6 +339,11 @@ class KotlinLanguageCodeStyleSettingsProvider : LanguageCodeStyleSettingsProvide
CodeStyleSettingsCustomizable.WRAP_VALUES_FOR_SINGLETON
)
)
showCustomOption(
KotlinCodeStyleSettings::CONTINUATION_INDENT_IN_ELVIS,
title = "Use continuation indent",
groupName = "Elvis expressions"
)
@Suppress("InvalidBundleOrProperty")
showCustomOption(
KotlinCodeStyleSettings::IF_RPAREN_ON_NEW_LINE,
@@ -0,0 +1,6 @@
fun test(some: Any?, error: Int) {
val test = some
?: error
}
// SET_FALSE: CONTINUATION_INDENT_IN_ELVIS
@@ -0,0 +1,6 @@
fun test(some: Any?, error: Int) {
val test = some
?: error
}
// SET_FALSE: CONTINUATION_INDENT_IN_ELVIS
@@ -0,0 +1,6 @@
fun test(some: Any?, error: Int) {
val test = some
?: error
}
// SET_FALSE: CONTINUATION_INDENT_IN_ELVIS
+14
View File
@@ -0,0 +1,14 @@
fun foo() {
val topLevelDeclaration =
DescriptorUtils.getParentOfType(referencedDescriptor, PropertyDescriptor::class.java, false) as DeclarationDescriptor?
?: DescriptorUtils.getParentOfType(
referencedDescriptor,
TypeAliasConstructorDescriptor::class.java,
false
)?.typeAliasDescriptor
?: DescriptorUtils.getParentOfType(referencedDescriptor, FunctionDescriptor::class.java, false)
?: return emptyList()
}
// SET_FALSE: CONTINUATION_INDENT_IN_ARGUMENT_LISTS
// SET_FALSE: CONTINUATION_INDENT_FOR_EXPRESSION_BODIES
@@ -216,6 +216,11 @@ public class FormatterTestGenerated extends AbstractFormatterTest {
runTest("idea/testData/formatter/Elvis.after.kt");
}
@TestMetadata("ElvisContinuationIndentOptions.after.kt")
public void testElvisContinuationIndentOptions() throws Exception {
runTest("idea/testData/formatter/ElvisContinuationIndentOptions.after.kt");
}
@TestMetadata("ElvisIndent.after.kt")
public void testElvisIndent() throws Exception {
runTest("idea/testData/formatter/ElvisIndent.after.kt");
@@ -1136,6 +1141,16 @@ public class FormatterTestGenerated extends AbstractFormatterTest {
runTest("idea/testData/formatter/Elvis.after.inv.kt");
}
@TestMetadata("ElvisContinuationIndentOptions.after.inv.kt")
public void testElvisContinuationIndentOptions() throws Exception {
runTest("idea/testData/formatter/ElvisContinuationIndentOptions.after.inv.kt");
}
@TestMetadata("ElvisIndent.after.inv.kt")
public void testElvisIndent() throws Exception {
runTest("idea/testData/formatter/ElvisIndent.after.inv.kt");
}
@TestMetadata("EmptyBlocks.after.inv.kt")
public void testEmptyBlocks() throws Exception {
runTest("idea/testData/formatter/EmptyBlocks.after.inv.kt");