Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
4 contributors

Users who have contributed to this file

@shyiko @shashachu @tasomaniac @jaredsburrows
711 lines (520 sloc) 32.6 KB

Changelog

All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.

0.36.0 - 2019-12-03

Added

  • HTML reporter (#641)
  • Experimental rule to lint enum entry names (#638)
  • @Suppress("RemoveCurlyBracesFromTemplate") now respected (#263)

Upgraded

  • Gradle version to 5.6.2 (#616)
  • Kotlin to 1.3.60 (#658)

Fixed

  • .git directory now discovered instead of hardcoded (#623)
  • Several bugs with the experimental annotation rule (#628) (#642) (#654) (#624)
  • Allow newline after lambda return type (#643)
  • Allow empty first line in a function that returns an anonymous object (#655)
  • Indentation with lambda argument (#627)
  • ktlint can now lint UTF-8 files with BOM (#630
  • Indentation with newline before return type (#663)
  • Build/tests on Windows (#640)
  • Allow whitespace after ( followed by a comment (#664)

0.35.0 - 2019-10-12

Added

  • Support for specifying color for output via --color-name command line flag. (#585)
  • Support for custom rulesets and providers on Java 9+ (#573)

Deprecated

  • --apply-to-idea flag; use applyToIDEA subcommand instead (#554)
  • --apply-to-idea-project flag; use applyToIDEAProject subcommand instead (#593)
  • 0.0.0-SNAPSHOT builds; snapshot builds are now versioned, e.g. 0.35.0-SNAPSHOT (#588)
    • Note: When using the new snapshot builds, you may need to add an explicit dependency on kotlin-compiler-embeddable to your ruleset project.

Removed

  • Support for loading 3rd party rulesets via Maven (#566)

Upgraded

  • Kotlin version to 1.3.50 (#565) (#611)

Fixed

  • Bugs with spacing in experimental AnnotationRule (#552) (#601
  • Brackets would be removed from empty companion object (#600)
  • Bugs with experimental IndentationRule (#597) (#599)
  • Erroneous space between } and ] (#596)
  • Spacing around multiplication sign in lambdas (#598)
  • --version output with gradle-built JAR (#613)

0.34.2 - 2019-07-22

Minor bugfix release for 0.34.0. (Note: 0.34.1 deprecated/deleted due to regression in disabled_flags .editorconfig support.)

Added

  • Support for globally disabling rules via --disabled_rules command line flag. (#534)

Fixed

  • Regression with --stdin flag for printAST command (#528)
  • Regressions with NoUnusedImports rule (#531, #526)
    • Note: this re-introduces #405
  • Indentation for enums with multi-line initializers (#518)

0.34.0 - 2019-07-15

Added

  • Support for Kotlin 1.3.41
  • Support for globally disabling rules via custom disabled_rules property in .editorconfig (#503)
  • experimental:no-empty-first-line-in-method-block (#474)
  • Unit tests for ruleset providers

Upgraded

  • AssertJ from 3.9.0 to 3.12.2 (#520)

Enabled

  • Final newline by default (#446)
  • no-wildcard-import (Re-enabled after temporarily disabling in 0.33.0)
  • experimental:annotation (#509)
  • experimental:multiline-if-else (no autocorrection)
  • experimental:package-name (currently only disallows underscores in package names)

Deprecated

  • MavenDependencyResolver. Scheduled to be removed in 0.35.0 (#468)
  • --install-git-pre-commit-hook flag; use installGitPreCommitHook subcommand instead (#487)
  • --print-ast flag; use printAST subcommand instead (#500)

Removed

  • Support for --ruleset-repository and --ruleset-update flags

Fixed

  • import-ordering will now refuse to format import lists that contain top-level comments (#408)
  • no-unused-imports reporting false negatives or false positives in some cases (#405) and (#506)
  • experimental:indent incorrectly formatting a lambda's closing brace (#479)

0.33.0 - 2019-05-28

Added

  • Support for Kotlin 1.3.31

Disabled

  • No wildcard imports rule (#48). Developers wishing to still enforce this rule should add the code into a custom ruleset.

Fixed

  • Spec file parsing is now platform-agnostic (#365)
  • Unnecessary newline after -> in some cases (#403)
  • SpacingAroundCommaRule will no longer move code into comments
  • Made newlines after = less aggressive (#368) (#380)
  • Erroneous newline when parameter comments are used (#433)

0.32.0 - 2019-04-22

Added

  • experimental/import-ordering rule (#189). Use ktlint --experimental to enabled.
  • Support for Kotlin 1.3.30
  • Build now compatible with jitpack
  • ktlint now part of Homebrew core (shyiko/ktlint tap deprecated)

Fixed

  • Incorrectly flagging a missing newline for functions with no parameters (#327).
  • Semicolons now allowed in KDocs (#362).
  • Spaces now disallowed after super (#369).
  • Annotations in function parameters now checked for indentation (#374]

Changed

  • Code now lives in com.pinterest package
  • groupId now com.pinterest
  • Custom ruleset META-INF.services file must be renamed to com.pinterest.ktlint.core.RuleSetProvider

0.31.0 - 2019-03-10

Added

  • dot-spacing rule (#293).
  • experimental/indent rule (#338).
    Use ktlint --experimental to enable.

Fixed

  • Spacing check around < & > operators.

Changed

  • no-multi-spaces rule (horizontal alignment of comments is no longer allowed) (#269).
  • colon-spacing rule (: must not appear at the beginning of the line).
  • package-name rule (disabled until #208 is resolved).
  • --print-ast to output com.pinterest.ktlint.core.ast.ElementType.* as node.elementType, e.g.
$ echo 'fun f() {}' | ./ktlint/target/ktlint --print-ast --color --stdin
1: ~.psi.KtFile (FILE)
1:   ~.psi.KtPackageDirective (PACKAGE_DIRECTIVE) ""
1:   ~.psi.KtImportList (IMPORT_LIST) ""
1:   ~.psi.KtScript (SCRIPT)
1:     ~.psi.KtBlockExpression (BLOCK)
1:       ~.psi.KtNamedFunction (FUN)
1:         ~.c.i.p.impl.source.tree.LeafPsiElement (FUN_KEYWORD) "fun"
1:         ~.c.i.p.impl.source.tree.PsiWhiteSpaceImpl (WHITE_SPACE) " "
1:         ~.c.i.p.impl.source.tree.LeafPsiElement (IDENTIFIER) "f"
1:         ~.psi.KtParameterList (VALUE_PARAMETER_LIST)
1:           ~.c.i.p.impl.source.tree.LeafPsiElement (LPAR) "("
1:           ~.c.i.p.impl.source.tree.LeafPsiElement (RPAR) ")"
1:         ~.c.i.p.impl.source.tree.PsiWhiteSpaceImpl (WHITE_SPACE) " "
1:         ~.psi.KtBlockExpression (BLOCK)
1:           ~.c.i.p.impl.source.tree.LeafPsiElement (LBRACE) "{"
1:           ~.c.i.p.impl.source.tree.LeafPsiElement (RBRACE) "}"
1:       ~.c.i.p.impl.source.tree.PsiWhiteSpaceImpl (WHITE_SPACE) "\n"

   format: <line_number:> <node.psi::class> (<node.elementType>) "<node.text>"
   legend: ~ = org.jetbrains.kotlin, c.i.p = com.intellij.psi
  • kotlin-compiler version to 1.3.21 (from 1.3.20).

Removed

  • Dependency on JCenter (#349).

0.30.0 - 2019-02-03

Fixed

  • Missing newline before ")" (#327).

Changed

  • kotlin-compiler version to 1.3.20 (from 1.2.71) (#331).

Security

  • --ruleset/--reporter switched to HTTPS (#332).

0.29.0 - 2018-10-02

Fixed

  • no-semi rule to preserve semicolon after companion object; (see #281 for details).
  • "line number off by one" when end_of_line=CRLF is used (#286).

Changed

  • package-name rule not to check file location (until #280 can be properly addressed).
  • comment-spacing rule not to flag //region & //endregion comments (#278).
  • kotlin-compiler version to 1.2.71 (from 1.2.51).

0.28.0 - 2018-09-05

Fixed

  • ktlint hanging in case of unhandled exception in a reporter (#277).

Changed

  • package-name rule (directories containing . in their names are no longer considered to be invalid) (#276).

0.27.0 - 2018-08-06

Changed

  • ktlint output (report location is now printed only if there are style violations) (#267).

0.26.0 - 2018-07-30

Changed

  • max-line-length rule (multi-line strings are no longer checked) (#262).

0.25.1 - 2018-07-25

Fixed

  • json reporter \ and control characters escaping (#256).

0.25.0 - 2018-07-25

Added

  • package-name rule (#246).
  • --editorconfig=path/to/.editorconfig (#250).
  • Support for end_of_line=native (.editorconfig) (#225).
  • tab -> space * indent_size auto-correction (--format/-F).

Fixed

  • "Unnecessary semicolon" false positive (#255).
  • (cannot be auto-corrected) reporting.
  • OOM in --debug mode while trying to print root=true <- root=false .editorconfig chain.

Changed

  • kotlin-compiler version to 1.2.51 (from 1.2.50).

0.24.0 - 2018-06-22

Added

  • paren-spacing rule (#223).
  • Report location output (#218, #224).
  • An indication that some lint errors cannot be auto-corrected (#219).
  • Git hook to automatically check files for style violations on push (an alternative to existing ktlint --install-git-pre-commit-hook)
    (execute ktlint --install-git-pre-push-hook to install) (#229).
  • Support for end_of_line=crlf (.editorconfig) (#225).

Fixed

  • .editorconfig path resolution
    (you no longer need to be inside project directory for .editorconfig to be loaded) (#207).
  • NPE in case of I/O error (klob@0.2.1).

Changed

  • comment-spacing rule to exclude //noinspection (#212).
  • kotlin-compiler version to 1.2.50 (from 1.2.41) (#226).

0.23.1 - 2018-05-04

Fixed

  • ClassCastException: cannot be cast to LeafPsiElement (#205).

0.23.0 - 2018-05-02

Added

  • comment-spacing (#198),
    filename (#194) rules.
  • parameter-list-wrapping left parenthesis placement check (#201).
  • parameter-list-wrapping auto-correction when max_line_length is exceeded (#200).

Fixed

  • "Unused import" false positive (x.y.zNNN import inside x.y.z package) (#204).

Changed

  • kotlin-compiler version to 1.2.41 (from 1.2.40).

0.22.0 - 2018-04-22

Added

  • --apply-to-idea-project (as an alternative to (global) --apply-to-idea) (#178).
  • Check to verify that annotations are placed before the modifiers (#183).
  • Access to PsiFile location information (#194).

Fixed

  • --format commenting out operators (chain-wrapping rule) (#193).

Changed

  • indent rule (continuation_indent_size is now ignored) (#171).
    NOTE: if you have a custom continuation_indent_size (and gcd(indent_size, continuation_indent_size) == 1) ktlint won't check the indentation.
  • --apply-to-idea to inherit "Predefined style / Kotlin style guide" (Kotlin plugin 1.2.20+).
  • kotlin-compiler version to 1.2.40 (from 1.2.30).

0.21.0 - 2018-03-29

Changed

  • indent rule to ignore where <type constraint list> clause (#180).

0.20.0 - 2018-03-20

Added

  • Ability to load 3rd party reporters from the command-line (e.g. --reporter=<name>,artifact=<group_id>:<artifact_id>:<version>) (#176).
  • --ruleset/--reporter dependency tree validation.

Fixed

  • Handling of spaces in --reporter=...,output=<path_to_a_file> (#177).
  • +, -, *, /, %, &&, || wrapping (#168).

Changed

  • comma-spacing rule to be more strict (#173).
  • no-line-break-after-else rule to allow multi-line if/else without curly braces.

0.19.0 - 2018-03-04

Changed

  • Lambda formatting: if lambda is assigned a label, there should be no space between the label and the opening curly brace (#167).

0.18.0 - 2018-03-01

Added

  • Java 9 support (#152).

Changed

  • kotlin-compiler version to 1.2.30 (from 1.2.20).

0.17.1 - 2018-02-28

Fixed

  • Internal Error (parameter-list-wrapping) when indent_size=unset (#165).

0.17.0 - 2018-02-28

Fixed

  • +/- wrapping inside catch block, after else and if (..) (#160).
  • Multi-line parameter declaration indentation (#161).
  • Expected indentation reported by indent rule.

Changed

  • Error code returned by ktlint --format/-F when some of the errors cannot be auto-corrected (previously it was 0 instead of expected 1) (#162).

0.16.1 - 2018-02-27

Fixed

  • Handling of negative number condition in when block (#160).

0.16.0 - 2018-02-27

Added

  • parameter-list-wrapping rule (#130).
  • +, -, *, /, %, &&, || wrapping check (now part of chain-wrapping rule).

Fixed

  • Unused componentN import (where N > 5) false positive (#142).
  • max-line-length error suppression (#158).

Changed

0.15.1 - 2018-02-14

Fixed

  • Race condition when multiple rules try to modify AST node that gets detached as a result of mutation (#154).

0.15.0 - 2018-01-18

Added

  • no-line-break-after-else rule (#125).

Changed

  • kotlin-compiler version to 1.2.20 (from 1.2.0).

0.14.0 - 2017-11-30

Changed

Fixed

  • Maven integration (#117).

0.13.0 - 2017-11-28

Added

  • no-line-break-before-assignment (#105),
    chain-wrapping (#23) (when wrapping chained calls ., ?. and ?: should be placed on the next line),
    range-spacing (no spaces around range (..) operator) rules.
  • --print-ast CLI option which can be used to dump AST of the file
    (see README / Creating a ruleset / AST for more details)
  • --color CLI option for colored output (where supported, e.g. --print-ast, default (plain) reporter, etc)

Changed

  • .editorconfig property resolution.
    An explicit [*.{kt,kts}] is not required anymore (ktlint looks for sections containing *.kt (or *.kts) and will fallback to [*] whenever property cannot be found elsewhere).
    Also, a search for .editorconfig will no longer stop on first (closest) .editorconfig (unless it contains root=true).
  • max-line-length rule to assume max_line_length=100 when ktlint --android ... is used
    (per Android Kotlin Style Guide).
  • kotlin-compiler version to 1.2.0 (from 1.1.51).

Fixed

  • no-empty-class-body auto-correction at the end of file (#109).
  • max-line-length rule when applied to KDoc (#112)
    (previously KDoc was subject to max-line-length even though regular comments were not).
  • Spacing around = in @annotation|s (op-spacing).
  • Spacing around generic type parameters of functions (e.g. fun <T>f(): T {} -> fun <T> f(): T {}).
  • no-consecutive-blank-lines not triggering at the end of file (when exactly 2 blank lines are present) (#108)
  • indent continuation_indent_size % indent_size != 0 case (#76)
  • indent rule skipping first parameter indentation check.
  • final-newline rule in the context of kotlin script.
  • Git hook (previously files containing space character (among others) in their names were ignored)
  • Exit code when file cannot be linted due to the invalid syntax or internal error.

0.12.1 - 2017-11-13

Fixed

  • A conflict between org.eclipse.aether:aether-*:1.1.0 and org.eclipse.aether:aether-*:1.0.0.v20140518 (#100).

0.12.0 - 2017-11-10

Added

  • --android (-a) CLI option (turns on Android Kotlin Style Guide compatibility)
    (right now it's used only by ktlint --apply-to-idea).

Changed

  • ktlint --apply-to-idea to account for indent_size & continuation_indent_size in .editorconfig (if any).

Removed

  • ktlint-intellij-idea-integration binary (deprecated in 0.9.0).

Fixed

  • "Unused import" false positive (component1..component5).

0.11.1 - 2017-10-26

Fixed

  • --reporter's output handling (previously parent directory was expected to exist) (#97).

0.11.0 - 2017-10-25

Added

  • no-blank-line-before-rbrace rule (#65).

Fixed

  • Redundant space inserted between } and :: (curly-spacing).

0.10.2 - 2017-10-25 [YANKED]

This release contains changes that were meant for 0.11.0 and so it was retagged as such.

0.10.1 - 2017-10-22

Fixed

  • Redundant space inserted between } and [key]/(...) (curly-spacing) (#91).

0.10.0 - 2017-10-10

Added

  • Git hook to automatically check files for style violations on commit
    (execute ktlint --install-git-pre-commit-hook to install).
  • Ability to specify multiple reporters
    (output can be controlled with --reporter=<name>,output=<path/to/file>) (#71).
  • Support for indent_size=unset (.editorconfig) (#70).

Fixed

  • ( { formatting
    (previously both ( { and ({ were accepted as correct, while only ({ should be) (curly-spacing rule) (#80).
  • if\nfn {}\nelse formatting (curly-spacing rule).
  • max_line_length=off & max_line_length=unset handling (.editorconfig).

Changed

  • kotlin-compiler version to 1.1.51 (from 1.1.3-2).
  • ktlint --apply-to-idea to include OPTIMIZE_IMPORTS_ON_THE_FLY=true.

0.9.2 - 2017-09-01

Fixed

  • : Unit = formatting (: Unit is no longer dropped when = is used) (#77).

0.9.1 - 2017-07-30

Fixed

  • ${super.toString()} linting (string-template rule) (#69).

0.9.0 - 2017-07-23

Added

  • Reporter API.
    ktlint comes with 3 built-in reporters: plain (default; ?group_by_file can be appended to enable grouping by file (shown below)), json and checkstyle.
$ ktlint --reporter=plain?group_by_file
path/to/file.kt
  1:10 Unused import.
  2:10 Unnecessary "Unit" return type.
path/to/another-file.kt
  1:10 Unnecessary semicolon.
  • string-template,
    no-empty-class-body,
    max-line-length (#47),
    final-newline (activated only if insert_final_newline is set in .editorconfig (under [*.{kt,kts}])) rules.
  • --limit CLI option (e.g. use --limit=10 to limit the number of errors to display).
  • --relative CLI flag which makes ktlint output file paths relative to working directory (e.g. dir/file.kt instead of /home/269/project/dir/file.kt).

Changed

  • BREAKING: JDK version to 1.8 (as a result of upgrading kotlin-compiler to 1.1.3-2 (from 1.1.0)).
  • File matching (offloaded to klob).

Deprecated

  • --ruleset-repository and --ruleset-update CLI arguments in favour of --repository and --repository-update respectively (--ruleset-* will be removed in 1.0.0).
  • ktlint-intellij-idea-integration binary
    (Intellij IDEA integration task is now included in ktlint (as ktlint --apply-to-idea)).

0.8.3 - 2017-06-19

Fixed

  • "Missing spacing after ";"" at the end of package declaration (#59).
  • "Unused import" false positive (setValue) (#55).
  • get/setter spacing (#56).

0.8.2 - 2017-06-06

Fixed

  • "Unused import" false positive (getValue) (#54).

0.8.1 - 2017-05-30

Fixed

  • ktlint --stdin (#51).

0.8.0 - 2017-05-30

Added

Fixed

  • ktlint-ruleset-standard ("no-unit-return" & "modifier-order" where not included).

0.7.1 - 2017-05-29

Fixed

  • Triggering of "Unused import" when element is referenced in KDoc(s) only (#46).

0.7.0 - 2017-05-28

Added

  • no-unit-return rule.
  • modifier-order rule (#42).
  • else/catch/finally on the same line as } check (now part of "keyword-spacing" rule).
  • ktlint-intellij-idea-integration binary for easy Intellij IDEA config injection.

0.6.2 - 2017-05-22

Fixed

  • Unused "iterator" extension function import false positive (#40).

0.6.1 - 2017-03-06

Fixed

  • Detection of unnecessary "same package" imports (no-unused-imports).
  • FileNotFoundException while scanning FS (#36).

0.6.0 - 2017-03-01

Changed

  • kotlin-compiler version to 1.1.0 (from 1.1-M04).

0.5.1 - 2017-02-28

Fixed

  • Unnecessary spacing around angle brackets in case of super<T> (#34).

0.5.0 - 2017-02-20

Fixed

  • Redundant space inserted between } and !! (curly-spacing).

Changed

  • indent rule to allow "Method declaration parameters -> Align when multiline" (as this option is (unfortunately) "on" by default in Intellij IDEA) (#26).

0.4.0 - 2017-02-01

Fixed

  • NPE in case of "Permission denied" (while scanning the file system).

Changed

  • kotlin-compiler version to 1.1-M04 (from 1.0.6).

0.3.1 - 2017-01-25

Fixed

  • Unused infix function call import false positive (#25).

0.3.0 - 2017-01-11

Added

  • *.kts (script) support.

Changed

  • kotlin-compiler version to 1.0.6 (from 1.0.3).

0.2.2 - 2016-10-11

Fixed

  • no-wildcard-imports rule (kotlinx.android.synthetic excluded from check) (#16).

0.2.1 - 2016-09-13

Fixed

  • curly-spacing false negative in case of }?..

0.2.0 - 2016-09-05

Added

  • Support for 3rd party "ruleset"s.

Changed

  • ktlint -F output (it now includes lint errors that cannot be fixed automatically).

Fixed

  • ktlint -F --debug error count.
  • Glob implementation (previously it was prone to catastrophic backtracking).
  • Redundant semicolon false positive in case of enum (#12).
  • Unused operator import false positive (#13).

0.1.2 - 2016-08-05

Fixed

  • "in-use" escaped imports detection (#7) (no-unused-imports).

0.1.1 - 2016-08-01

Fixed

  • Incorrect spacing around curly braces (curly-spacing).

0.1.0 - 2016-07-27

You can’t perform that action at this time.