FIR IDE: Always insert additional spaces into lambda brackets

The customization of this with
`INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD` will be supported later
This commit is contained in:
Roman Golyshev
2021-03-19 15:35:30 +03:00
committed by TeamCityServer
parent 415d52fe54
commit 4c0cab4756
21 changed files with 47 additions and 30 deletions
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// ELEMENT: foo
// CHAR: '\t'
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// ELEMENT: foo
// CHAR: '\t'
@@ -1,3 +1,4 @@
// FIR_COMPARISON
class Cn<T>
fun <T, C: Cn<T>> C.some(arg: (T) -> Unit): C {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
class Cn<T>
fun <T, C: Cn<T>> C.some(arg: (T) -> Unit): C {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
class Some
fun <T> Some.filter(predicate : (T) -> Boolean) = throw UnsupportedOperationException()
@@ -1,3 +1,4 @@
// FIR_COMPARISON
class Some
fun <T> Some.filter(predicate : (T) -> Boolean) = throw UnsupportedOperationException()
@@ -1,4 +1,3 @@
// FIR_COMPARISON
// CODE_STYLE_SETTING: INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD = false
fun main(args: Array<String>) {
@@ -1,4 +1,3 @@
// FIR_COMPARISON
// CODE_STYLE_SETTING: INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD = false
fun main(args: Array<String>) {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
fun <T> Array<T>.filter(predicate : (T) -> Boolean) : java.util.List<T> = throw UnsupportedOperationException()
fun main(args: Array<String>) {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
fun <T> Array<T>.filter(predicate : (T) -> Boolean) : java.util.List<T> = throw UnsupportedOperationException()
fun main(args: Array<String>) {
@@ -2,7 +2,7 @@
fun usage() {
fun myLocalFun(action: () -> Unit) {}
myLocalFun {<caret>}
myLocalFun { <caret> }
}
// ELEMENT: myLocalFun
@@ -1,3 +1,4 @@
// FIR_COMPARISON
fun some(f: () -> Unit) { f() }
fun test() {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
fun some(f: () -> Unit) { f() }
fun test() {
@@ -1,4 +1,3 @@
// FIR_COMPARISON
package p
val vvv = 1
@@ -1,4 +1,3 @@
// FIR_COMPARISON
package p
val vvv = 1
@@ -1,3 +1,4 @@
// FIR_COMPARISON
fun f(list: List<String>) {
list.<caret>
}
@@ -1,3 +1,4 @@
// FIR_COMPARISON
fun f(list: List<String>) {
list.map { <caret> }
}
@@ -247,6 +247,7 @@ private object FunctionInsertionHandler : QuotedNamesAwareInsertionHandler() {
var openingBracketOffset = chars.indexOfSkippingSpace(openingBracket, offset)
var closeBracketOffset = openingBracketOffset?.let { chars.indexOfSkippingSpace(closingBracket, it + 1) }
var inBracketsShift = 0
if (openingBracketOffset == null) {
if (lookupObject.insertEmptyLambda) {
@@ -254,7 +255,12 @@ private object FunctionInsertionHandler : QuotedNamesAwareInsertionHandler() {
context.setAddCompletionChar(false)
}
document.insertString(offset, " {}")
if (isInsertSpacesInOneLineFunctionEnabled(context.file)) {
document.insertString(offset, " { }")
inBracketsShift = 1
} else {
document.insertString(offset, " {}")
}
} else {
if (isSmartEnterCompletion) {
document.insertString(offset, "(")
@@ -269,7 +275,7 @@ private object FunctionInsertionHandler : QuotedNamesAwareInsertionHandler() {
}
if (shouldPlaceCaretInBrackets(completionChar, lookupObject) || closeBracketOffset == null) {
editor.caretModel.moveToOffset(openingBracketOffset + 1)
editor.caretModel.moveToOffset(openingBracketOffset + 1 + inBracketsShift)
AutoPopupController.getInstance(project)?.autoPopupParameterInfo(editor, offsetElement)
} else {
editor.caretModel.moveToOffset(closeBracketOffset + 1)
@@ -282,6 +288,9 @@ private object FunctionInsertionHandler : QuotedNamesAwareInsertionHandler() {
return lookupObject.inputValueArguments || lookupObject.insertEmptyLambda
}
// FIXME Should be fetched from language settings (INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD), but we do not have them right now
private fun isInsertSpacesInOneLineFunctionEnabled(file: PsiElement) = true
override fun handleInsert(context: InsertionContext, item: LookupElement) {
val targetFile = context.file as? KtFile ?: return
val lookupObject = item.`object` as FunctionLookupObject
@@ -536,6 +536,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.WRONG_MODIFIER_TARGET) { firDiagnostic ->
WrongModifierTargetImpl(
firDiagnostic.a,
firDiagnostic.b,
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.INLINE_CLASS_NOT_TOP_LEVEL) { firDiagnostic ->
InlineClassNotTopLevelImpl(
firDiagnostic as FirPsiDiagnostic<*>,
@@ -628,14 +636,6 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.WRONG_MODIFIER_TARGET) { firDiagnostic ->
WrongModifierTargetImpl(
firDiagnostic.a,
firDiagnostic.b,
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.NONE_APPLICABLE) { firDiagnostic ->
NoneApplicableImpl(
firDiagnostic.a.map { abstractFirBasedSymbol ->
@@ -389,6 +389,12 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = RedundantOpenInInterface::class
}
abstract class WrongModifierTarget : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = WrongModifierTarget::class
abstract val modifier: KtModifierKeywordToken
abstract val target: String
}
abstract class InlineClassNotTopLevel : KtFirDiagnostic<KtDeclaration>() {
override val diagnosticClass get() = InlineClassNotTopLevel::class
}
@@ -451,12 +457,6 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = ValueClassCannotBeCloneable::class
}
abstract class WrongModifierTarget : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = WrongModifierTarget::class
abstract val modifier: KtModifierKeywordToken
abstract val target: String
}
abstract class NoneApplicable : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NoneApplicable::class
abstract val candidates: List<KtSymbol>
@@ -618,6 +618,15 @@ internal class RedundantOpenInInterfaceImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class WrongModifierTargetImpl(
override val modifier: KtModifierKeywordToken,
override val target: String,
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.WrongModifierTarget(), KtAbstractFirDiagnostic<PsiElement> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class InlineClassNotTopLevelImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
@@ -725,15 +734,6 @@ internal class ValueClassCannotBeCloneableImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class WrongModifierTargetImpl(
override val modifier: KtModifierKeywordToken,
override val target: String,
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.WrongModifierTarget(), KtAbstractFirDiagnostic<PsiElement> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class NoneApplicableImpl(
override val candidates: List<KtSymbol>,
firDiagnostic: FirPsiDiagnostic<*>,