如何在Kotlin中强制执行自定义换行代码规范?适配ktlint等工具
自定义Kotlin代码换行格式:寻找支持紧凑括号内换行的格式化工具
期望的紧凑换行格式
仅在内容超出长度时换行,换行前尽可能保留完整表达式:
fun foo() { return true && ("aaaaaaaaaaaaaaa" == "ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd") }
当前ktlint的格式化问题
使用ktlint会强制在左括号后添加不必要的换行,不符合需求:
fun foo() { return true && ( "aaaaaaaaaaaaaaa" == "ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" ) }
已尝试的.editorconfig配置
[*] indent_size = 4 indent_style = space insert_final_newline = true trim_trailing_whitespace = true [{*.kt,*.kts}] ij_kotlin_code_style_defaults = KOTLIN_OFFICIAL ij_kotlin_continuation_indent_in_if_conditions = false
各工具的可行配置方案
- ktfmt:默认的
google风格就能实现这种紧凑格式,它的换行逻辑只在表达式过长时拆分,不会强制在左括号后换行。在.editorconfig里添加:[{*.kt,*.kts}] ktfmt_style = google - diktat:支持细粒度自定义,在
diktat-analysis.yml里调整换行和括号规则,控制仅内容超长度时换行,且不在左括号后强制换行:rules: - id: LINE_LENGTH configuration: maxLineLength: 120 excludePatterns: [] - id: BRACES configuration: avoidLineBreakAfterOpeningBrace: true - prettier(kotlin插件):使用
prettier-plugin-kotlin插件,配置合适的printWidth,就能实现仅表达式过长时拆分,不会在左括号后换行。在.prettierrc里设置:{ "printWidth": 120, "plugins": ["prettier-plugin-kotlin"] } - ktlint调整方案:如果坚持用ktlint,切换代码风格为
INTELLIJ_IDEA,同时禁用括号后强制换行的配置:
不过ktlint的官方风格对括号换行约束较强,可能需要结合禁用部分规则才能完全匹配需求。[{*.kt,*.kts}] ij_kotlin_code_style_defaults = INTELLIJ_IDEA ij_kotlin_force_new_line_after_opening_paren_in_expressions = false ij_kotlin_keep_line_breaks = true
内容的提问来源于stack exchange,提问作者Alix
相关产品推荐
相关产品推荐

