in scala/scala-impl/src/org/jetbrains/plugins/scala/lang/formatting/settings/ScalaLanguageCodeStyleSettingsProvider.scala [64:364]
override def customizeSettings(consumer: CodeStyleSettingsCustomizable, settingsType: SettingsType): Unit = {
val settingsToEnable: ArrayBuffer[String] = new ArrayBuffer
def enableSettings(@NonNls fieldNames: String*): Unit = settingsToEnable ++= fieldNames
//spacing
if (settingsType == SettingsType.SPACING_SETTINGS) {
consumer.renameStandardOption("SPACE_BEFORE_TYPE_PARAMETER_LIST", ScalaBundle.message("spaces.panel.before.opening.square.bracket"))
enableSettings(
// After
"SPACE_AFTER_COMMA",
"SPACE_AFTER_SEMICOLON",
// Before
"SPACE_BEFORE_IF_PARENTHESES",
"SPACE_BEFORE_FOR_PARENTHESES",
"SPACE_BEFORE_WHILE_PARENTHESES",
"SPACE_BEFORE_METHOD_PARENTHESES",
"SPACE_BEFORE_METHOD_CALL_PARENTHESES",
"SPACE_BEFORE_CLASS_LBRACE",
"SPACE_BEFORE_METHOD_LBRACE",
"SPACE_BEFORE_TYPE_PARAMETER_LIST",
// Within
"SPACE_WITHIN_FOR_PARENTHESES",
"SPACE_WITHIN_IF_PARENTHESES",
"SPACE_WITHIN_WHILE_PARENTHESES",
"SPACE_WITHIN_PARENTHESES",
"SPACE_WITHIN_METHOD_PARENTHESES",
"SPACE_WITHIN_METHOD_CALL_PARENTHESES",
"SPACE_WITHIN_BRACKETS",
"SPACE_WITHIN_EMPTY_METHOD_CALL_PARENTHESES",
)
}
//blank lines
if (settingsType == SettingsType.BLANK_LINES_SETTINGS) {
enableSettings(
"KEEP_BLANK_LINES_IN_CODE",
"BLANK_LINES_AFTER_CLASS_HEADER",
"BLANK_LINES_BEFORE_CLASS_END",
"KEEP_BLANK_LINES_BEFORE_RBRACE",
"KEEP_BLANK_LINES_IN_DECLARATIONS",
"BLANK_LINES_BEFORE_PACKAGE",
"BLANK_LINES_AFTER_PACKAGE",
"BLANK_LINES_BEFORE_IMPORTS",
"BLANK_LINES_AFTER_IMPORTS",
"BLANK_LINES_AROUND_CLASS",
"BLANK_LINES_AFTER_ANONYMOUS_CLASS_HEADER",
"BLANK_LINES_AROUND_FIELD_IN_INTERFACE",
"BLANK_LINES_AROUND_FIELD",
"BLANK_LINES_AROUND_METHOD_IN_INTERFACE",
"BLANK_LINES_AROUND_METHOD",
"BLANK_LINES_BEFORE_METHOD_BODY"
)
}
//wrapping and Braces
if (settingsType == SettingsType.WRAPPING_AND_BRACES_SETTINGS) {
consumer.renameStandardOption("BINARY_OPERATION_WRAP", ScalaBundle.message("wrapping.and.braces.panel.renamed.infix.expressions"))
consumer.renameStandardOption("EXTENDS_LIST_WRAP" , ScalaBundle.message("wrapping.and.braces.panel.renamed.extends.with.list"))
consumer.renameStandardOption("EXTENDS_KEYWORD_WRAP" , ScalaBundle.message("wrapping.and.braces.panel.renamed.extends.keyword"))
// TODO: since in Scala 3 braces can be optional for both `for` and `yield` keyword,
// this is a bad naming, because FOR_BRACE_FORCE kinda implies that it's about `for`, but actually affects `yield`
// we could create 2 dedicated Scala3 setting and migrate old setting value
consumer.renameStandardOption("FOR_BRACE_FORCE" , ScalaBundle.message("wrapping.and.braces.panel.renamed.force.yield.braces"))
//Binary expression section
enableSettings(
"BINARY_OPERATION_WRAP",
"ALIGN_MULTILINE_BINARY_OPERATION",
"ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION",
"PARENTHESES_EXPRESSION_LPAREN_WRAP",
"PARENTHESES_EXPRESSION_RPAREN_WRAP"
)
//Method calls section
enableSettings(
"CALL_PARAMETERS_WRAP",
"ALIGN_MULTILINE_PARAMETERS_IN_CALLS",
"PREFER_PARAMETERS_WRAP",
"CALL_PARAMETERS_RPAREN_ON_NEXT_LINE"
)
//method call chain
enableSettings(
"METHOD_CALL_CHAIN_WRAP",
"WRAP_FIRST_METHOD_IN_CALL_CHAIN",
"ALIGN_MULTILINE_CHAINED_METHODS",
"KEEP_LINE_BREAKS"
)
//brace placement
enableSettings(
"CLASS_BRACE_STYLE",
"METHOD_BRACE_STYLE",
"BRACE_STYLE"
)
//extends list wrap
enableSettings(
"EXTENDS_LIST_WRAP",
"EXTENDS_KEYWORD_WRAP"
)
//method parameters
enableSettings(
"METHOD_PARAMETERS_WRAP",
"ALIGN_MULTILINE_PARAMETERS",
"METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE",
"METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE"
)
//if statement
enableSettings(
"IF_BRACE_FORCE",
"ELSE_ON_NEW_LINE",
"SPECIAL_ELSE_IF_TREATMENT"
)
//brace forces
enableSettings(
"FOR_BRACE_FORCE",
"WHILE_BRACE_FORCE",
"DOWHILE_BRACE_FORCE",
"WHILE_ON_NEW_LINE",
"INDENT_CASE_FROM_SWITCH",
"CATCH_ON_NEW_LINE",
"FINALLY_ON_NEW_LINE",
"FOR_STATEMENT_WRAP",
"ALIGN_MULTILINE_FOR"
)
//modifier list wrap
enableSettings("MODIFIER_LIST_WRAP")
//align in columns
enableSettings("ALIGN_GROUP_FIELD_DECLARATIONS")
enableSettings("WRAP_LONG_LINES")
//annotations wrap
enableSettings(
"CLASS_ANNOTATION_WRAP",
"METHOD_ANNOTATION_WRAP",
"FIELD_ANNOTATION_WRAP",
"PARAMETER_ANNOTATION_WRAP",
"VARIABLE_ANNOTATION_WRAP"
)
enableSettings(
"KEEP_SIMPLE_BLOCKS_IN_ONE_LINE",
"KEEP_SIMPLE_METHODS_IN_ONE_LINE",
"KEEP_FIRST_COLUMN_COMMENT"
)
}
//comments generation
if (settingsType == SettingsType.COMMENTER_SETTINGS) {
enableSettings(
CodeGenerationPanel.SupportedCommenterStandardOptionNames.asScala.toSeq: _*
)
}
consumer.showStandardOptions(settingsToEnable.toArray: _*)
def opt(@NonNls fieldName: String, @Nls title: String, @Nls groupName: String,
keysAndValues: Array[(String, Int)] = Array()): Unit = {
val options: Array[AnyRef] = if (keysAndValues.nonEmpty)
Array(keysAndValues.map(_._1), keysAndValues.map(_._2))
else
Array()
consumer.showCustomOption(classOf[ScalaCodeStyleSettings], fieldName, title, groupName, options: _*)
}
//noinspection SpellCheckingInspection
def opta(@NonNls fieldName: String, @Nls title: String, @Nls groupName: String,
anchor: OptionAnchor, @NonNls anchorField: String,
keysAndValues: Array[(String, Int)] = Array()): Unit = {
val options: Array[AnyRef] = if (keysAndValues.nonEmpty)
Array(keysAndValues.map(_._1), keysAndValues.map(_._2))
else
Array()
consumer.showCustomOption(classOf[ScalaCodeStyleSettings], fieldName, title, groupName, anchor, anchorField, options: _*)
}
import ApplicationBundle.{message => appMessage}
// import com.intellij.psi.codeStyle.{CodeStyleSettingsCustomizable => options}
val options = CodeStyleSettingsCustomizableOptions.getInstance
//Custom options
if (settingsType == SettingsType.WRAPPING_AND_BRACES_SETTINGS) {
import WrappingAndBracesCustomGroupNames._
val ExtendsWithList = appMessage("wrapping.extends.implements.list")
opt("ALIGN_EXTENDS_WITH", appMessage("wrapping.align.when.multiline"), ExtendsWithList,
ScalaCodeStyleSettings.EXTENDS_ALIGN_STRING zip ScalaCodeStyleSettings.EXTENDS_ALIGN_VALUES)
opt("WRAP_BEFORE_WITH_KEYWORD", ScalaBundle.message("wrapping.and.braces.panel.wrap.before.with.keyword"), ExtendsWithList)
opt("ALIGN_IF_ELSE", ScalaBundle.message("wrapping.and.braces.panel.align.if.else.statements"), appMessage("wrapping.if.statement"))
opt("METHOD_BRACE_FORCE", ScalaBundle.message("wrapping.and.braces.panel.force.braces"), METHOD_DEFINITION, BRACE_OPTION_AND_VALUES)
opt("TRY_BRACE_FORCE", ScalaBundle.message("wrapping.and.braces.panel.force.try.braces"), options.WRAPPING_TRY_STATEMENT, BRACE_OPTION_AND_VALUES)
opt("FINALLY_BRACE_FORCE", ScalaBundle.message("wrapping.and.braces.panel.force.finally.braces"), options.WRAPPING_TRY_STATEMENT, BRACE_OPTION_AND_VALUES)
opt("CLOSURE_BRACE_FORCE", ScalaBundle.message("wrapping.and.braces.panel.force.braces"), ANONYMOUS_METHOD, BRACE_OPTION_AND_VALUES)
opt("PLACE_CLOSURE_PARAMETERS_ON_NEW_LINE", ScalaBundle.message("wrapping.and.braces.panel.parameters.on.new.line"), ANONYMOUS_METHOD)
opt("NOT_CONTINUATION_INDENT_FOR_PARAMS", ScalaBundle.message("wrapping.and.braces.panel.use.normal.indent.for.parameters"), options.WRAPPING_METHOD_PARAMETERS)
opt("ALIGN_PARAMETER_TYPES_IN_MULTILINE_DECLARATIONS", ScalaBundle.message("wrapping.and.braces.panel.align.parameter.types.in.multiline.declarations"), options.WRAPPING_METHOD_PARAMETERS, {
import ScalaCodeStyleSettings._
TYPE_ANNOTATION_ALIGN_STRING.zip(TYPE_ANNOTATION_ALIGN_VALUES)
})
opt("INDENT_FIRST_PARAMETER", ScalaBundle.message("wrapping.and.braces.panel.indent.first.parameter.if.on.new.line"), options.WRAPPING_METHOD_PARAMETERS)
opt("INDENT_FIRST_PARAMETER_CLAUSE", ScalaBundle.message("wrapping.and.braces.panel.indent.first.parameter.clause.if.on.new.line"), options.WRAPPING_METHOD_PARAMETERS)
consumer.renameStandardOption(options.WRAPPING_SWITCH_STATEMENT, ScalaBundle.message("wrapping.and.braces.panel.match.statement"))
opt("DO_NOT_INDENT_CASE_CLAUSE_BODY", ScalaBundle.message("wrapping.and.braces.panel.do.not.indent.case.clause.body"), options.WRAPPING_SWITCH_STATEMENT)
opt("ALIGN_IN_COLUMNS_CASE_BRANCH", ScalaBundle.message("wrapping.and.braces.panel.align.in.columns.case.branches"), options.WRAPPING_SWITCH_STATEMENT)
opt("ALIGN_COMPOSITE_PATTERN", ScalaBundle.message("wrapping.and.braces.panel.align.multiline.pattern.alternatives"), options.WRAPPING_SWITCH_STATEMENT)
opt("CASE_CLAUSE_BRACE_FORCE", ScalaBundle.message("wrapping.and.braces.panel.force.case.branch.braces"), options.WRAPPING_SWITCH_STATEMENT, BRACE_OPTION_AND_VALUES)
opt("PLACE_SELF_TYPE_ON_NEW_LINE", ScalaBundle.message("wrapping.and.braces.panel.place.self.type.on.new.line"), CLASS_DEFINITION)
opt("KEEP_XML_FORMATTING", ScalaBundle.message("wrapping.and.braces.panel.keep.xml.formatting"), XML_FORMATTING)
opt("KEEP_ONE_LINE_LAMBDAS_IN_ARG_LIST", ScalaBundle.message("wrapping.and.braces.panel.simple.one.line.lambdas.in.arg.list"), options.WRAPPING_KEEP)
opt("INDENT_BRACED_FUNCTION_ARGS", ScalaBundle.message("wrapping.and.braces.panel.indent.braced.arguments"), options.WRAPPING_METHOD_ARGUMENTS_WRAPPING)
opt("DO_NOT_ALIGN_BLOCK_EXPR_PARAMS", ScalaBundle.message("wrapping.and.braces.panel.do.not.align.block.expression.parameters"), options.WRAPPING_METHOD_ARGUMENTS_WRAPPING)
opt("INDENT_YIELD_AFTER_ONE_LINE_ENUMERATORS", ScalaBundle.message("wrapping.and.braces.panel.for.indent.yield.after.one.line.enumerators"), options.WRAPPING_FOR_STATEMENT)
val newLinesOptions: Array[(String, Int)] = {
import ScalaCodeStyleSettings._
Array(
ScalaBundle.message("wrapping.and.braces.panel.new.line.options.no.new.line") -> NO_NEW_LINE,
ScalaBundle.message("wrapping.and.braces.panel.new.line.options.new.line.always") -> NEW_LINE_ALWAYS,
ScalaBundle.message("wrapping.and.braces.panel.new.line.options.new.line.for.multiple.arguments") -> NEW_LINE_FOR_MULTIPLE_ARGUMENTS
)
}
opta("CALL_PARAMETERS_NEW_LINE_AFTER_LPAREN", appMessage("wrapping.new.line.after.lpar"), options.WRAPPING_METHOD_ARGUMENTS_WRAPPING,
OptionAnchor.BEFORE, "CALL_PARAMETERS_RPAREN_ON_NEXT_LINE", newLinesOptions
)
opt("DO_NOT_INDENT_TUPLES_CLOSE_BRACE", ScalaBundle.message("wrapping.and.braces.panel.do.not.indent.tuples.closing.parenthesis"), TUPLES_WRAP)
opt("ALIGN_TUPLE_ELEMENTS", ScalaBundle.message("wrapping.and.braces.panel.align.tuple.elements"), TUPLES_WRAP)
opt("INDENT_TYPE_ARGUMENTS", ScalaBundle.message("wrapping.and.braces.panel.indent"), TYPE_ARGUMENTS)
opt("INDENT_TYPE_PARAMETERS", ScalaBundle.message("wrapping.and.braces.panel.indent"), TYPE_PARAMETERS)
opt("INDENT_FEWER_BRACES_IN_METHOD_CALL_CHAINS", "Indent arguments with colons (Scala 3)", options.WRAPPING_CALL_CHAIN)
}
if (settingsType == SettingsType.SPACING_SETTINGS) {
opt("SPACE_AFTER_MODIFIERS_CONSTRUCTOR", ScalaBundle.message("spaces.panel.constructor.parameters.with.modifiers"), options.SPACES_BEFORE_PARENTHESES)
opt("SPACE_BEFORE_INFIX_METHOD_CALL_PARENTHESES", ScalaBundle.message("spaces.panel.infix.method.call.parentheses"), options.SPACES_BEFORE_PARENTHESES)
opt("SPACE_BEFORE_INFIX_OPERATOR_LIKE_METHOD_CALL_PARENTHESES", ScalaBundle.message("spaces.panel.infix.operator.like.method.call.parentheses"), options.SPACES_BEFORE_PARENTHESES)
opt("SPACE_BEFORE_INFIX_LIKE_METHOD_PARENTHESES", ScalaBundle.message("spaces.panel.infix.method.parentheses"), options.SPACES_BEFORE_PARENTHESES)
opt("PRESERVE_SPACE_AFTER_METHOD_DECLARATION_NAME", ScalaBundle.message("spaces.panel.preserve.space.before.method.parentheses"), options.SPACES_BEFORE_PARENTHESES)
opta("SPACE_BEFORE_BRACE_METHOD_CALL", ScalaBundle.message("spaces.panel.method.call.left.brace"), options.SPACES_BEFORE_LEFT_BRACE,
CodeStyleSettingsCustomizable.OptionAnchor.AFTER, "SPACE_BEFORE_METHOD_LBRACE")
opt("SPACE_AFTER_TYPE_COLON", ScalaBundle.message("spaces.panel.after.colon.before.declarations.type"), options.SPACES_OTHER)
opt("SPACE_BEFORE_TYPE_COLON", ScalaBundle.message("spaces.panel.before.colon.after.declarations.name"), options.SPACES_OTHER)
opt("SPACE_INSIDE_CLOSURE_BRACES", ScalaBundle.message("spaces.panel.inside.closure.braces"), options.SPACES_OTHER)
opt("SPACES_AROUND_AT_IN_PATTERNS", ScalaBundle.message("spaces.panel.around.at.in.pattern.bindings"), options.SPACES_OTHER)
opt("NEWLINE_AFTER_ANNOTATIONS", ScalaBundle.message("spaces.panel.newline.after.annotations"), options.SPACES_OTHER)
opt("KEEP_COMMENTS_ON_SAME_LINE", ScalaBundle.message("spaces.panel.keep.one.line.comments.on.same.line"), options.SPACES_OTHER)
opt("SPACE_BEFORE_TYPE_PARAMETER_IN_DEF_LIST", ScalaBundle.message("spaces.panel.before.opening.square.bracket"), options.SPACES_IN_TYPE_PARAMETERS)
opt("SPACE_BEFORE_TYPE_PARAMETER_LEADING_CONTEXT_BOUND_COLON", ScalaBundle.message("spaces.panel.before.context.bound.colon.leading"), options.SPACES_IN_TYPE_PARAMETERS)
opt("SPACE_BEFORE_TYPE_PARAMETER_LEADING_CONTEXT_BOUND_COLON_HK", ScalaBundle.message("spaces.panel.before.context.bound.colon.leading.higher.kinded"), options.SPACES_IN_TYPE_PARAMETERS)
opt("SPACE_BEFORE_TYPE_PARAMETER_REST_CONTEXT_BOUND_COLONS", ScalaBundle.message("spaces.panel.before.context.bound.colon.rest"), options.SPACES_IN_TYPE_PARAMETERS)
opt("SPACE_INSIDE_SELF_TYPE_BRACES", ScalaBundle.message("spaces.panel.self.type.braces"), options.SPACES_WITHIN)
opt("SPACES_IN_IMPORTS", ScalaBundle.message("spaces.panel.import.braces"), options.SPACES_WITHIN)
opt("SPACES_IN_ONE_LINE_BLOCKS", ScalaBundle.message("spaces.panel.simple.one.line.block.braces"), options.SPACES_WITHIN)
}
if (settingsType == SettingsType.BLANK_LINES_SETTINGS) {
opt("BLANK_LINES_AROUND_METHOD_IN_INNER_SCOPES", ScalaBundle.message("blank.lines.panel.around.method.in.inner.scopes"), options.BLANK_LINES)
opt("BLANK_LINES_AROUND_FIELD_IN_INNER_SCOPES", ScalaBundle.message("blank.lines.panel.around.field.in.inner.scopes"), options.BLANK_LINES)
opt("BLANK_LINES_AROUND_FIELD_IN_INNER_SCOPES", ScalaBundle.message("blank.lines.panel.around.class.in.inner.scopes"), options.BLANK_LINES)
}
if (settingsType == SettingsType.LANGUAGE_SPECIFIC) {
opt("SD_ALIGN_PARAMETERS_COMMENTS", ScalaBundle.message("scaladoc.panel.align.parameter.descriptions"), ScalaDocFormattingPanel.ALIGNMENT_GROUP)
opt("SD_ALIGN_EXCEPTION_COMMENTS", ScalaBundle.message("scaladoc.panel.align.throws.exception.descriptions"), ScalaDocFormattingPanel.ALIGNMENT_GROUP)
opt("SD_ALIGN_RETURN_COMMENTS", ScalaBundle.message("scaladoc.panel.align.return.value.description"), ScalaDocFormattingPanel.ALIGNMENT_GROUP)
opt("SD_ALIGN_OTHER_TAGS_COMMENTS", ScalaBundle.message("scaladoc.panel.align.other.tags.descriptions"), ScalaDocFormattingPanel.ALIGNMENT_GROUP)
opt("SD_ALIGN_LIST_ITEM_CONTENT", ScalaBundle.message("align.list.items.content"), ScalaDocFormattingPanel.ALIGNMENT_GROUP)
opt("SD_KEEP_BLANK_LINES_BETWEEN_TAGS", ScalaBundle.message("scaladoc.panel.blank.lines.keep"), ScalaDocFormattingPanel.BLANK_LINES_GROUP)
opt("SD_BLANK_LINE_BEFORE_TAGS", ScalaBundle.message("scaladoc.panel.before.tags"), ScalaDocFormattingPanel.BLANK_LINES_GROUP)
opt("SD_BLANK_LINE_AFTER_PARAMETERS_COMMENTS", ScalaBundle.message("scaladoc.panel.after.parameter.comments"), ScalaDocFormattingPanel.BLANK_LINES_GROUP)
opt("SD_BLANK_LINE_AFTER_RETURN_COMMENTS", ScalaBundle.message("scaladoc.panel.after.tags"), ScalaDocFormattingPanel.BLANK_LINES_GROUP)
opt("SD_BLANK_LINE_BETWEEN_PARAMETERS", ScalaBundle.message("scaladoc.panel.between.parameter.descriptions"), ScalaDocFormattingPanel.BLANK_LINES_GROUP)
opt("SD_BLANK_LINE_BEFORE_PARAMETERS", ScalaBundle.message("scaladoc.panel.before.parameter.descriptions"), ScalaDocFormattingPanel.BLANK_LINES_GROUP)
opt("SD_PRESERVE_SPACES_IN_TAGS", ScalaBundle.message("scaladoc.panel.preserve.spaces.in.tags"), ScalaDocFormattingPanel.OTHER_GROUP)
}
}