Move statement: do not move when function last parameter is on same line as right parenthesis
#KT-14757 Fixed
This commit is contained in:
committed by
klunnii
parent
615636ed55
commit
1d39ac1d3e
+18
-6
@@ -36,6 +36,13 @@ class KotlinExpressionMover : AbstractKotlinUpDownMover() {
|
||||
sibling
|
||||
}
|
||||
|
||||
if (next != null) {
|
||||
val afterNext = firstNonWhiteSibling(next, true)
|
||||
if (afterNext?.node?.elementType == KtTokens.RPAR &&
|
||||
getElementLine(afterNext, editor, true) == getElementLine(next, editor, false)
|
||||
) return null
|
||||
}
|
||||
|
||||
return next?.takeIf { it is KtParameter || it is KtValueArgument }?.let { LineRange(it, it, editor.document) }?.also {
|
||||
parametersOrArgsToMove = elementToCheck to next
|
||||
}
|
||||
@@ -91,7 +98,7 @@ class KotlinExpressionMover : AbstractKotlinUpDownMover() {
|
||||
val psiRange = StatementUpDownMover.getElementRange(editor, file, oldRange) ?: return false
|
||||
val firstElement = getMovableElement(psiRange.getFirst(), false) ?: return false
|
||||
var lastElement = getMovableElement(psiRange.getSecond(), true) ?: return false
|
||||
if (isForbiddenMove(firstElement, down) || isForbiddenMove(lastElement, down)) {
|
||||
if (isForbiddenMove(editor, firstElement, down) || isForbiddenMove(editor, lastElement, down)) {
|
||||
info.toMove2 = null
|
||||
return true
|
||||
}
|
||||
@@ -512,11 +519,16 @@ class KotlinExpressionMover : AbstractKotlinUpDownMover() {
|
||||
private fun isLastOfItsKind(element: PsiElement, down: Boolean): Boolean =
|
||||
getSiblingOfType(element, down, element.javaClass) == null
|
||||
|
||||
private fun isForbiddenMove(element: PsiElement, down: Boolean): Boolean =
|
||||
if (element is KtParameter || element is KtValueArgument)
|
||||
isLastOfItsKind(element, down)
|
||||
else
|
||||
false
|
||||
private fun isForbiddenMove(editor: Editor, element: PsiElement, down: Boolean): Boolean {
|
||||
if (element is KtParameter || element is KtValueArgument) {
|
||||
val next = firstNonWhiteSibling(element, true)
|
||||
if (next?.node?.elementType == KtTokens.RPAR &&
|
||||
getElementLine(next, editor, true) == getElementLine(element, editor, false)
|
||||
) return true
|
||||
return isLastOfItsKind(element, down)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
private fun isBracelessBlock(element: PsiElement): Boolean =
|
||||
if (element !is KtBlockExpression)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
// MOVE: down
|
||||
// IS_APPLICABLE: false
|
||||
fun test(
|
||||
<caret>x: String,
|
||||
y: Int) {
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// MOVE: up
|
||||
// IS_APPLICABLE: false
|
||||
fun test(
|
||||
x: String,
|
||||
<caret>y: Int) {
|
||||
}
|
||||
Generated
+10
@@ -1436,6 +1436,11 @@ public class MoveStatementTestGenerated extends AbstractMoveStatementTest {
|
||||
runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams1.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("funParams10.kt")
|
||||
public void testFunParams10() throws Exception {
|
||||
runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams10.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("funParams2.kt")
|
||||
public void testFunParams2() throws Exception {
|
||||
runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams2.kt");
|
||||
@@ -1470,6 +1475,11 @@ public class MoveStatementTestGenerated extends AbstractMoveStatementTest {
|
||||
public void testFunParams8() throws Exception {
|
||||
runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams8.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("funParams9.kt")
|
||||
public void testFunParams9() throws Exception {
|
||||
runTest("idea/testData/codeInsight/moveUpDown/parametersAndArguments/funParams9.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/codeInsight/moveUpDown/trailingComma")
|
||||
|
||||
Reference in New Issue
Block a user