Skip to content

Commit dacd43c

Browse files
author
Daniel Trinh
committed
fix remaining alignment bugs
1 parent 575513c commit dacd43c

File tree

2 files changed

+305
-288
lines changed

2 files changed

+305
-288
lines changed

scalariform/src/main/scala/scalariform/formatter/ExprFormatter.scala

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -847,19 +847,14 @@ trait ExprFormatter { self: HasFormattingPreferences with AnnotationFormatter wi
847847
}
848848

849849
private def groupParams(paramClause: ParamClause)(implicit formatterState: FormatterState): List[Either[ConsecutiveSingleLineParams, Param]] = {
850-
val ParamClause(lparen, implicitOption, firstParamOption, otherParams, rparen) = paramClause
850+
val ParamClause(_, _, firstParamOption, otherParams, _) = paramClause
851851

852852
val paramsList = firstParamOption ++ otherParams.map { case (comma, param) => param }
853853

854854
var isFirstParam = true
855855

856856
paramsList.foldLeft(List[Either[ConsecutiveSingleLineParams, Param]]()) { (groupedParams, nextParam) =>
857-
val implicitOpt = if (isFirstParam)
858-
implicitOption
859-
else
860-
None
861-
862-
val lengths = calculateParamSectionLengths(nextParam, isFirstParam, implicitOpt) match {
857+
val lengths = calculateParamSectionLengths(nextParam, isFirstParam) match {
863858
case Some(sectionLengths) =>
864859
groupedParams match {
865860
case Right(param) :: tail =>
@@ -902,7 +897,7 @@ trait ExprFormatter { self: HasFormattingPreferences with AnnotationFormatter wi
902897
* @param param
903898
* @return Three Ints representing the length of the longest prefix, longest parameter name, and longest type.
904899
*/
905-
private def calculateParamSectionLengths(param: Param, first: Boolean, implicitOpt: Option[Token] = None)(implicit formatterState: FormatterState): Option[ParamSectionLengths] = {
900+
private def calculateParamSectionLengths(param: Param, first: Boolean)(implicit formatterState: FormatterState): Option[ParamSectionLengths] = {
906901
val Param(annotations, modifiers, valOrVarOpt, id, paramTypeOpt, defaultValueOpt) = param
907902

908903
val formattedParam = {
@@ -918,7 +913,7 @@ trait ExprFormatter { self: HasFormattingPreferences with AnnotationFormatter wi
918913
def calculatePrefixLength: Int = {
919914
// Calculate longest "prefix" length. Annotations, modifiers, and val/var contribute
920915
// to this number.
921-
val allPrefixTokens = implicitOpt ++
916+
val allPrefixTokens =
922917
annotations.flatMap(_.tokens) ++
923918
modifiers.flatMap(_.tokens) ++
924919
valOrVarOpt
@@ -930,7 +925,6 @@ trait ExprFormatter { self: HasFormattingPreferences with AnnotationFormatter wi
930925
// Account for whitespace between prefix token types. This assumes everything
931926
// will be placed on a single line with no newlines between prefixes.
932927
val numberOfPrefixTypes = Seq(
933-
implicitOpt.isDefined,
934928
!annotations.isEmpty,
935929
valOrVarOpt.isDefined
936930
).count(_ == true) + modifiers.length
@@ -969,7 +963,14 @@ trait ExprFormatter { self: HasFormattingPreferences with AnnotationFormatter wi
969963

970964
val prefixLength = calculatePrefixLength
971965
val idLength = calculateIdLength
972-
ParamSectionLengths(prefixLength, idLength, prefixLength + idLength,calculateTypeLength)
966+
val prefixAndIdLength = {
967+
if (prefixLength > 0)
968+
prefixLength + idLength + 1 // the + 1 is to account for whitespace
969+
else
970+
idLength
971+
}
972+
973+
ParamSectionLengths(prefixLength, idLength, prefixAndIdLength, calculateTypeLength)
973974
}
974975

975976
val newlineBeforeParam = hiddenPredecessors(param.firstToken).containsNewline
@@ -981,6 +982,7 @@ trait ExprFormatter { self: HasFormattingPreferences with AnnotationFormatter wi
981982

982983
}
983984

985+
// TODO: figure out how to preserve relative indentation when first param is on first line,
984986
private def formatParamClause(paramClause: ParamClause, doubleIndentParams: Boolean = false)(implicit formatterState: FormatterState): (FormatResult, FormatterState) = {
985987
val ParamClause(lparen, implicitOption, firstParamOption, otherParams, rparen) = paramClause
986988
val paramIndent = if (doubleIndentParams) 2 else 1
@@ -989,43 +991,41 @@ trait ExprFormatter { self: HasFormattingPreferences with AnnotationFormatter wi
989991
var paramFormatterState = formatterState
990992
val alignParameters = formattingPreferences(AlignParameters) && !formattingPreferences(IndentWithTabs)
991993

992-
if (formattingPreferences(PreserveDanglingCloseParenthesis)) {
994+
if (formattingPreferences(PreserveDanglingCloseParenthesis))
993995
formatResult = formatResult.before(rparen, formatterState.currentIndentLevelInstruction)
994-
} else {
996+
else
995997
paramFormatterState = paramFormatterState.indent(paramIndent)
996-
}
997998

998999
if (alignParameters) {
9991000
// Place implicit on it's own line
10001001
for (implicitToken <- paramClause.implicitOption) {
1001-
formatResult = formatResult.before(implicitToken, paramFormatterState.indent(paramIndent).currentIndentLevelInstruction)
1002+
formatResult = formatResult.before(implicitToken, paramFormatterState.currentIndentLevelInstruction)
10021003
}
10031004

10041005
val groupedParams = groupParams(paramClause)
10051006

10061007
groupedParams.foreach {
10071008
case Left(ConsecutiveSingleLineParams(params, maxSectionLengths, thisSectionLengths)) =>
1008-
val idSpaces = maxSectionLengths.prefixLength + 1
1009-
10101009
params.foreach { param =>
10111010
val firstToken = param.firstToken
10121011

10131012
// Indent Prefix Or Id
1014-
formatResult = formatResult.before(firstToken, paramFormatterState.indent(paramIndent).currentIndentLevelInstruction)
1013+
formatResult = formatResult.before(firstToken, paramFormatterState.currentIndentLevelInstruction)
10151014

10161015
// Indent Type
10171016
for ((colon, typeAst) <- param.paramTypeOpt) {
10181017
val typeSpaces = maxSectionLengths.prefixAndIdLength + 1
1019-
formatResult = formatResult.before(typeAst.firstToken, PlaceAtColumn(paramFormatterState.indentLevel + paramIndent, typeSpaces))
1018+
1019+
formatResult = formatResult.before(typeAst.firstToken, PlaceAtColumn(paramFormatterState.indentLevel, typeSpaces))
10201020
}
10211021

10221022
// Indent Default
10231023
for ((equal, default) <- param.defaultValueOpt) {
10241024
val defaultSpaces = {
1025-
maxSectionLengths.prefixAndIdLength +
1026-
maxSectionLengths.typeLength + 2
1025+
maxSectionLengths.prefixAndIdLength +
1026+
maxSectionLengths.typeLength + 2
10271027
}
1028-
formatResult = formatResult.before(equal, PlaceAtColumn(paramFormatterState.indentLevel + paramIndent, defaultSpaces))
1028+
formatResult = formatResult.before(equal, PlaceAtColumn(paramFormatterState.indentLevel, defaultSpaces))
10291029
}
10301030
formatResult ++= format(param)(paramFormatterState)
10311031
}

0 commit comments

Comments
 (0)