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 be 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 description of 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 that in 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.