Changelog

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

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