@@ -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