KtLint configuration
Ktlint uses a limited set of .editorconfig
properties for additional configuration. A sensible default value is provided for each property when not explicitly defined. Properties can be overridden, provided they are specified under [*.{kt,kts}]
. Ktlint uses some properties defined by .editorconfig, IntelliJ IDEA and custom properties.
Danger
Unfortunately, IntelliJ IDEA has an autoformat issue regarding .editorconfig
. Due to this error, an additional space is added between glob statements, resulting in [*{kt, kts}]
instead of [*{kt,kts}]
. The .editorconfig
library used by ktlint
ignores sections after encountering a space in the list. As a result, the rule is not applied on all files as documented in the original ktlint issue.
Code style¶
By default, the ktlint_official
code style is applied. Alternatively, the code style can be set to intellij_idea
or android_studio
.
Disable rule(s)¶
Rule sets and individual rules can be disabled / enabled with a separate property per rule (set).
All rules in a rule set can be enabled or disabled with a rule set property. The name of the rule set property consists of the ktlint_
prefix followed by the rule set id. Examples:
ktlint_standard = disabled # Disable all rules from the `standard` rule set provided by KtLint
ktlint_experimental = enabled # Enable all `experimental` rules from all rule sets provided by KtLint or other rule providers
ktlint_custom-rule-set = enabled # Enable all rules in the `custom-rule-set` rule set (not provided by KtLint)
Rules that are marked as experimental will not run unless explicitly enabled:
ktlint_experimental = enabled # Enable rules marked as experimental for all rule sets that are enabled
An individual rule can be enabled or disabled with a rule property. The name of the rule property consists of the ktlint_
prefix followed by the rule set id followed by a _
and the rule id. Examples:
ktlint_standard_final-newline = disabled # Disables the `final-newline` rule provided by KtLint
ktlint_standard_some-experimental-rule = enabled # Enables the (experimental) `some-experimental-rule` in the `standard` rule set provided by KtLint
ktlint_custom-rule-set_custom-rule = disabled # Disables the `custom-rule` rule in the `custom-rule-set` rule set (not provided by KtLint)
Note
The rule properties are applied after applying the rule set properties and take precedence. So if a rule set is disabled but a specific rule of that rule set is enabled, then the rule will be executed.
Rule specific configuration settings¶
The configuration settings below are used to configure the behavior of a specific rule. As of that, those settings only take effect when the corresponding rule is enabled. See the description of the specific rule for more information about the setting.
Configuration setting | Rule |
---|---|
ij_kotlin_allow_trailing_comma | trailing-comma-on-declaration-site |
ij_kotlin_allow_trailing_comma_on_call_site | trailing-comma-on-call-site |
ij_kotlin_imports_layout | import-ordering |
ij_kotlin_packages_to_use_import_on_demand | no-wildcard-imports |
indent_size | indent |
indent_style | indent |
insert_final_newline | final-newline |
ktlint_chain_method_rule_force_multiline_when_chain_operator_count_greater_or_equal_than | chain-method-continuation |
ktlint_class_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than | class-signature |
ktlint_ignore_back_ticked_identifier | max-line-length |
ktlint_function_naming_ignore_when_annotated_with | function-naming |
ktlint_function_signature_body_expression_wrapping | function-signature |
ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than | function-signature |
max_line_length | max-line-length and several other rules |
Overriding Editorconfig properties for specific directories¶
You can override properties for specific directories inside your project:
[*.{kt,kts}]
ktlint_standard_import-ordering = disabled
[api/*.{kt,kts}]
ktlint_standard_indent = disabled
Note: In the example above the import-ordering
rule is disabled for all packages, including the api
sub package. Next to this, the indent
rule is disabled for the api
package and its sub packages.