-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update Ktlint to v0.49.1 #1683
Update Ktlint to v0.49.1 #1683
Conversation
9628c17
to
964029f
Compare
964029f
to
3afae9b
Compare
JUnit Tests (macOS, EnricoMi/publish-unit-test-result-action@v2) 162 files ±0 162 suites ±0 11m 34s ⏱️ + 6m 14s Results for commit fd95bbd. ± Comparison against base commit 17a3446. ♻️ This comment has been updated with latest results. |
Edited/Blocked NotificationRenovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR. You can manually request rebase by checking the rebase/retry box above. ⚠ Warning: custom changes will be lost. |
JUnit Tests (Windows, EnricoMi/publish-unit-test-result-action@v2) 162 files ±0 162 suites ±0 5m 50s ⏱️ - 1m 5s Results for commit fd95bbd. ± Comparison against base commit 17a3446. ♻️ This comment has been updated with latest results. |
Codecov Report
@@ Coverage Diff @@
## master #1683 +/- ##
============================================
- Coverage 78.86% 78.72% -0.15%
- Complexity 2316 2317 +1
============================================
Files 125 124 -1
Lines 8135 8151 +16
Branches 2060 2062 +2
============================================
+ Hits 6416 6417 +1
- Misses 811 826 +15
Partials 908 908
|
This PR contains the following updates:
0.48.2
->0.49.1
0.48.2
->0.49.1
0.48.2
->0.49.1
0.48.2
->0.49.1
0.48.2
->0.49.1
0.48.2
->0.49.1
0.48.2
->0.49.1
Release Notes
pinterest/ktlint
v0.49.1
Compare Source
Added
Removed
Fixed
--code-style=android_studio
in Ktlint CLI identical to deprecated parameter--android
(#1982)no-consecutive-blank-lines
(#1987).editorconfig
propertyktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than
when usingktlint_official
code stylefunction-signature
(#1977)indent
(#1993)indent
(#1976)ktlint_official
code style to keep formatting of other code styles consistent with0.48.x
and beforeindent
(#1971)no-single-line-block-comment
fromcomment-wrapping
rule. Theno-single-line-block-comment
rule is added as experimental rule to thektlint_official
code style, but it can be enabled explicitly for the other code styles as well. (#1980)Changed
Baseline
fromktlint-cli
toktlint-cli-reporter-baseline
so that Baseline functionality is reusable for API Consumers.v0.49.0
Compare Source
WARNING: This version of KtLint contains a number of breaking changes in KtLint CLI and KtLint API. If you are using KtLint with custom ruleset jars or custom reporter jars, then those need to be upgraded before you can use them with this version of ktlint. Please contact the maintainers of those jars and ask them to upgrade a.s.a.p.
All rule id's in the output of Ktlint are now prefixed with a rule set. Although KtLint currently supports standard rules to be unqualified, users are encouraged to include the rule set id in all references to rules. This includes following:
--disabled-rules
parameter in KtLint CLI..editorconfig
properties used to enable or disable rule and rule sets. Note that propertiesdisabled_rules
andktlint_disabled_rules
have been removed in this release. See disabled rules for more information.source
element in the KtLint CLIbaseline.xml
file. Regenerating this file, fixes all rule references automatically.ktlint-enable
/ktlint-disable
and the@Suppress('ktlint:...')
annotations.VisitorModifier.RunAfterRule
.Moving experimental rules to standard rule set
The
experimental
rule set has been merged withstandard
rule set. The rules which formerly were part of theexperimental
rule set are still being treated as before. The rules will only be run in case.editorconfig
propertyktlint_experimental
is enabled or in case the rule is explicitly enabled.Note that the prefix
experimental:
has to be removed from all references to this rule. Check references in:--disabled-rules
parameter in KtLint CLI..editorconfig
properties used to enable or disable rule and rule sets. Note that propertiesdisabled_rules
andktlint_disabled_rules
have been removed in this release. See disabled rules for more information.ktlint-enable
/ktlint-disable
and the@Suppress('ktlint:...')
annotations.VisitorModifier.RunAfterRule
.Promote experimental rules to non-experimental
The rules below have been promoted to non-experimental rules:
Note that this only affects users that have enabled the standard ruleset while having the experimental rules disabled.
API Changes & RuleSet providers & Reporter Providers
This release is intended to be the last release before the 1.0.x release of ktlint. If all goes as planned, the 1.0.x release does not contain any new breaking changes with except of removal of functionality which is deprecated in this release.
This release contains a lot of breaking changes which aims to improve the future maintainability of Ktlint. If you get stuck while migrating, please reach out to us by creating an issue.
Experimental rules
Rules in custom rule sets can now be marked as experimental by implementing the
Rule.Experimental
interface on the rule. Rules marked with this interface will only be executed by Ktlint if.editorconfig
propertyktlint_experimental
is enabled or if the rule itself has been enabled explicitly.When using this feature, experimental rules should not be defined in a separate rule set as that would require a distinct rule set id. When moving a rule from an experimental rule set to a non-experimental rule set this would mean that the qualified rule id changes. For users of such rules this means that ktlint directives to suppress the rule and properties in the
.editorconfig
files have to be changed.EditorConfig
Field
defaultAndroidValue
in classEditorConfigProperty
has been renamed toandroidStudioCodeStyleDefaultValue
. New fieldsktlintOfficialCodeStyleDefaultValue
andintellijIdeaCodeStyleDefaultValue
have been added. Read more about this in the section "Ktlint Official code style".The
.editorconfig
propertiesdisabled_rules
andktlint_disabled_rules
are no longer supported. Specifying those properties in theeditorConfigOverride
oreditorConfigDefaults
result in warnings at runtime.'Ktlint Official` code style and renaming of existing code styles
A new code style
ktlint_official
is introduced. This code style is work in progress but will become the default code style in the1.0
release. Please try out the new code style and provide your feedback via the issue tracker.This
ktlint_official
code style combines the best elements from the Kotlin Coding conventions and Android's Kotlin styleguide. This code style also provides additional formatting on topics which are not (explicitly) mentioned in those conventions and style guide. But do note that this code style sometimes formats code in a way which is not accepted by the default code formatters in IntelliJ IDEA and Android Studio. The formatters of those editors produce nicely formatted code in the vast majority of cases. But in a number of edge cases, the formatting contains bugs which are waiting to be fixed for several years. The new code style formats code in a way which is compatible with the default formatting of the editors whenever possible. When using this codestyle, it is best to disable (e.g. not use) code formatting in the editor.The existing code styles have been renamed to make more clear what the basis of the code style is.
The
official
code style has been renamed tointellij_idea
. Code formatted with this code style aims to be compatible with default formatter of IntelliJ IDEA. This code style is based on Kotlin Coding conventions. If.editorconfig
propertyktlint_code_style
has been set toandroid
then do not forget to change the value of that property tointellij_idea
. When not set, this is still the default code style of ktlint0.49
. Note that the default code style will be changed toktlint_official
in the1.0
release.Code style
android
has been renamed toandroid_studio
. Code formatted with this code style aims to be compatible with default formatter of Android Studio. This code style is based on Android's Kotlin styleguide. If.editorconfig
propertyktlint_code_style
has been set toandroid
then do not forget to change the value of that property toandroid_studio
.Package restructuring and class relocation
The internal structure of the Ktlint project has been revised. The Ktlint CLI and KtLint API modules have been decoupled where possible. Modules have been restructured and renamed. See API Overview for more information.
This is the last release that contains module
ktlint-core
as it had too many responsibilities. All classes in this module are relocated to other modules. Some classes have also been renamed. See tables below for details. Classes that are left behind in thektlint-core
module are deprecated and were kept in this version for backwards compatibility only. Thektlint-core
module will be removed in Ktlint0.50.x
.Classes below have been moved from module
ktlint-core
to the new modulektlint-rule-engine-core
:ktlint-core
ktlint-rule-engine-core
Classes below have been moved from module
ktlint-core
to the new modulektlint-rule-engine
:ktlint-core
ktlint-rule-engine
Class
com.pinterest.ktlint.core.KtLint.Code.CodeFile
has been replaced with factory methodcom.pinterest.ktlint.rule.engine.api.Code.fromFile
. Likewise, classcom.pinterest.ktlint.core.KtLint.Code.CodeSnippet
has been replaced with factory methodcom.pinterest.ktlint.rule.engine.api.Code.fromSnippet
.Class below has been moved from module
ktlint-core
to the new modulektlint-cli-ruleset-core
:ktlint-core
ktlint-cli-ruleset-core
Class below has been moved from module
ktlint-core
to the new modulektlint-cli-reporter-core
:ktlint-core
ktlint-cli-reporter-core
Class below has been moved from module
ktlint-core
to the new modulektlint-logger
:ktlint-core
ktlint-logger
Class below has been relocated from module
ktlint-core
to modulektlint-cli
:ktlint-core
ktlint-cli
Module
ktlint-reporter-baseline
has been renamed toktlint-cli-reporter-baseline
. Class below has been relocated:ktlint-reporter-baseline
ktlint-cli-reporter-baseline
Module
ktlint-reporter-checkstyle
has been renamed toktlint-cli-reporter-checkstyle
. Class below has been relocated:ktlint-reporter-checkstyle
ktlint-cli-reporter-checkstyle
Module
ktlint-reporter-format
has been renamed toktlint-cli-reporter-format
. Class below has been relocated:ktlint-reporter-format
ktlint-cli-reporter-format
Module
ktlint-reporter-html
has been renamed toktlint-cli-reporter-html
. Class below has been relocated:ktlint-reporter-html
ktlint-cli-reporter-html
Module
ktlint-reporter-json
has been renamed toktlint-cli-reporter-json
. Class below has been relocated:ktlint-reporter-json
ktlint-cli-reporter-json
Module
ktlint-reporter-plain
has been renamed toktlint-cli-reporter-plain
. Class below has been relocated:ktlint-reporter-plain
ktlint-cli-reporter-plain
Module
ktlint-reporter-plain-summary
has been renamed toktlint-cli-reporter-plain-summary
. Class below has been relocated:ktlint-reporter-plain-summary
ktlint-cli-reporter-plain-summary
Module
ktlint-reporter-sarif
has been renamed toktlint-cli-reporter-sarif
. Class below has been relocated:ktlint-reporter-sarif
ktlint-cli-reporter-sarif
Custom Ruleset Provider
RuleSetProviderV2
Custom rule sets build for older versions of KtLint are no longer supported by this version of KtLint. The
com.pinterest.ktlint.core.RuleSetProviderV2
interface has been replaced withRuleSetProviderV3
. The accompanying interfacescom.pinterest.ktlint.core.RuleProvider
andcom.pinterest.ktlint.core.Rule
have been replaced withcom.pinterest.ktlint.ruleset.core.api.RuleProvider
andcom.pinterest.ktlint.ruleset.core.api.Rule
respectively.Contrary to
RuleSetProviderV2
, theRuleSetProviderV3
no longer contains information about the rule set. About information now has to be specified in the newRule
class. This allows custom rule set providers to combine rules originating from different rule sets into a new rule set without loosing information about its origin. The type of the id of the rule set is changed fromString
toRuleSetId
.Note that due to renaming and relocation of the
RuleSetProviderV3
interface the name of the service provider in the custom reporter needs to be changed fromresources/META-INF/services/com.pinterest.ktlint.core.RuleSetProviderV2
toresources/META-INF/services/com.pinterest.ktlint.cli.ruleset.core.api.RuleSetProviderV3
.The rule id's in
com.pinterest.ktlint.ruleset.core.api.Rule
have been changed from typeString
toRuleId
. ARuleId
has a value that must adhere the convention "rule-set-id
:rule-id
". The rule set idstandard
is reserved for rules which are maintained by the KtLint project. Rules created by custom rule set providers and API Consumers should use a prefix other thanstandard
to mark the origin of rules which are not maintained by the KtLint project.When wrapping a rule from the ktlint project and modifying its behavior, please change the
ruleId
andabout
fields in the wrapped rule, so that it is clear to users whenever they use the original rule provided by KtLint versus a modified version which is not maintained by the KtLint project.The typealias
com.pinterest.ktlint.core.api.EditorConfigProperties
has been replaced withcom.pinterest.ktlint.rule.engine.core.api.EditorConfig
. The interfacecom.pinterest.ktlint.core.api.UsesEditorConfigProperties
has been removed. Instead, the Rule propertyusesEditorConfigProperties
needs to be set. As a result of those changes, thebeforeFirstNode
function in each rule has to changed to something like below:Fields
loadOnlyWhenOtherRuleIsLoaded
andrunOnlyWhenOtherRuleIsEnabled
have been removed from classcom.pinterest.ktlint.rule.engine.core.api.Rule.VisitorModifier.RunAfterRule
and are replaced with a single fieldmode
. Themode
either contains valueREGARDLESS_WHETHER_RUN_AFTER_RULE_IS_LOADED_OR_DISABLED
orONLY_WHEN_RUN_AFTER_RULE_IS_LOADED_AND_ENABLED
.Custom Reporter Provider
ReporterProvider
Custom Reporters build for older versions of KtLint are no longer supported by this version of KtLint. The
com.pinterest.ktlint.core.ReporterProvider
interface has been replaced withcom.pinterest.ktlint.cli.reporter.core.api.ReporterProviderV2
. The accompanying interfacecom.pinterest.ktlint.core.Reporter
has been replaced withcom.pinterest.ktlint.cli.reporter.core.api.ReporterV2
.Note that due to renaming and relocation of the
ReporterProviderV2
interface the name of the service provider in the custom reporter needs to be changed fromresources/META-INF/services/com.pinterest.ktlint.core.ReporterProvider
toresources/META-INF/services/com.pinterest.ktlint.cli.reporter.core.api.ReporterProviderV2
.The biggest change in the
ReporterV2
is the replacement of theLintError
class withKtlintCliError
class. The latter class now contains a status field which more clearly explains the difference between a lint error which can be autocorrected versus a lint error that actually has been autocorrected.Custom rules provided by API Consumer
API Consumers provide a set of rules directly to the Ktlint Rule Engine. The
com.pinterest.ktlint.core.Rule
has been replaced withcom.pinterest.ktlint.ruleset.core.api.Rule
.The type of the rule id's has been changed from type
String
toRuleId
. ARuleId
has a value that must adhere to the convention "rule-set-id
:rule-id
". Rule set idstandard
is reserved for rules which are maintained by the KtLint project. Custom rules created by the API Consumer should use a prefix other thanstandard
to clearly mark the origin of rules which are not maintained by the KtLint project.Also, the field
About
has been added. This field specifies the name of the maintainer, and the repository url and issue tracker url of the rule. The about information of a rule is printed whenever a rule throws an exception which is caught by the Ktlint Rule Engine.When wrapping a rule from the ktlint project and modifying its behavior, please change the
ruleId
andabout
fields in the wrapped rule, so that it is clear to users whenever they use the original rule provided by KtLint versus a modified version which is not maintained by the KtLint project.The typealias
com.pinterest.ktlint.core.api.EditorConfigProperties
has been replaced withcom.pinterest.ktlint.rule.engine.core.api.EditorConfig
. The interfacecom.pinterest.ktlint.core.api.UsesEditorConfigProperties
has been removed. Instead, the Rule propertyusesEditorConfigProperties
needs to be set. As a result of those changes, thebeforeFirstNode
function in each rule has to changed to something like below:Fields
loadOnlyWhenOtherRuleIsLoaded
andrunOnlyWhenOtherRuleIsEnabled
have been removed from classcom.pinterest.ktlint.rule.engine.core.api.Rule.VisitorModifier.RunAfterRule
and are replaced with a single fieldmode
. Themode
either contains valueREGARDLESS_WHETHER_RUN_AFTER_RULE_IS_LOADED_OR_DISABLED
orONLY_WHEN_RUN_AFTER_RULE_IS_LOADED_AND_ENABLED
.Like before, the API Consumer can still offer a mix of rules originating from
ktlint-ruleset-standard
as well as custom rules..editorconfig
propertymax_line_length
default valuePreviously, the default value for
.editorconfig
propertymax_line_length
was set to-1
in ktlint unless the property was defined explicitly in the.editorconfig
or whenktlint_code_style
was set to Android. As a result of that rules have to check that max_line_length contains a positive value before checking that the actual line length is exceeding the maximum. Now the valueInt.MAX_VALUE
(use constantMAX_LINE_LENGTH_PROPERTY_OFF
to refer to that value) is used instead.Psi filename replaces FILE_PATH_USER_DATA_KEY
Constant
KtLint.FILE_PATH_USER_DATA_KEY
has been removed. The file path is passed correctly to the node with element type FILE and can be retrieved as follows:Added
ktlint_offical
. The code style is work in progress and should be considered a preview. It is intended to become the default code style in the next release. Please try it out and give your feedback. See code styles for more information. The following rules have been added to thektlint_official
code style (the rules can also be run for other code styles when enabled explicitly):no-empty-first-line-in-class-body
. This rule disallows a class to start with a blank line.if-else-bracing
. This rules enforces consistent usage of braces in all branches of a single if, if-else or if-else-if statement.no-consecutive-comments
. This rule disallows consecutive comments except EOL comments (see [examples](See https://pinterest.github.io/ktlint/rules/experimental/#disallow-consecutive-comments)).try-catch-finally-spacing
. This rule enforces consistent spacing in try-catch, try-finally and try-catch-finally statement. This rule can also be run for other code styles, but then it needs to be enabled explicitly.no-blank-line-in-list
. This rule disallows blank lines to be used in super type lists, type argument lists, type constraint lists, type parameter lists, value argument lists, and value parameter lists. (#1224)multiline-expression-wrapping
. This forces a multiline expression as value in an assignment to start on a separate line. (#1217)string-template-indent
. This forces multiline string templates which are post-fixed with.trimIndent()
to be formatted consistently. The opening and closing"""
are placed on separate lines and the indentation of the content of the template is aligned with the"""
. (#925)if-else-wrapping
. This enforces that a single line if-statement is kept simple. A single line if-statement may contain no more than one else-branch. The branches a single line if-statement may not be wrapped in a block. (#812)parameter-wrapping
(#1846)property-wrapping
(#1846)stdin
with KtLint CLI (#1832)build.gradle
like:enum-wrapping
for all code styles. An enum should either be a single line, or each enum entry should be defined on a separate line. (#1903)Removed
.editorconfig
propertiesdisabled_rules
andktlint_disabled_rules
. See disabled rules for more information.--print-ast
. Use IntelliJ IDEA PsiViewer plugin instead. (#1925)Fixed
no-semi
(#1733)function-signature
.multiline
.function-signature
.standard:filename
rule whenever Ktlint CLI is run with option--stdin
(#1742)ktlint_official
code style)indent
(#1756)trailing-comma-on-declaration-site
(#1711)ktlint_official
code style onlyindent
(#1540).editorconfig
use valueoff
for themax_line_length
property instead of value-1
to denote that lines are not restricted to a maximum length (#1824)trailing-comma-on-declaration-site
(#1786)function-return-type-spacing
(#1764)annotation
,wrapping
(#1725)indent
(#1788)indent
(#1788)spacing-between-declarations-with-annotations
(#1802)wrapping
(#1808)indent
(#1830)..<
similar to the range operator..
inrange-spacing
(#1858).editorconfig
propertyij_kotlin_imports_layout
contains a|
but no import exists that match any pattern before the first|
then do not report a violation nor insert a blank lineimport-ordering
(#1845)**/*.kt
and**/*.kts
) so that all Kotlin files excluding the files matching the negate-patterns will be processed (#1847)type-parameter-list-spacing
(#1867)wrapping
(#1867)indent
(#1217)trailing-comma-on-declaration-site
(#1905)ktlint_official
only.function-signature
,parameter-list-wrapping
(#1908)annotation
(#1909)trailing-comma-on-declaration-site
(#1911)ktlint_official
.annotation
(#1916)annotation
(#1917)multiline-if-else
(#1904)Changed
ktlint_official
code style)parameter-list-wrapping
(#1681).--patterns-from-stdin
is specified (#1793)1.8.20
and Kotlin version to1.8.20
.ktlint_official
, do not allow wildcard importsjava.util
andkotlinx.android.synthetic
by default. Important:.editorconfig
propertyij_kotlin_packages_to_use_import_on_demand
needs to be set to valueunset
in order to enforce IntelliJ IDEA default formatter to not generate wildcard importsno-wildcard-imports
(#1797)comment-wrapping
(#1941)comment-wrapping
(#1942)Configuration
📅 Schedule: Branch creation - "before 4am on Monday" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR has been generated by Mend Renovate. View repository job log here.