Skip to content

ktfmt migration roadmap #616

Description

@AbdullinAM
  • Phase 1: Initial transfer and integration

    • Transfer ktfmt repository to the Kotlin org on GitHub
    • Migrate the sources from com.facebook.* package to org.jetbrains.kotlin.*
    • Clean up OS-dependent scripts and tests, replace them with OS-independent analogs
    • Set up CI in Kotlin Tools and Libraries TeamCity server
    • Set up the publishing process
    • Update ktfmt repo documentation/licence/etc.
    • Sync on the status of the Gradle plugin and IntelliJ plugin
  • Phase 2: Kotlin repo adoption

    • Kotlin repo formatting audit
      • sync on the current discrepancies in formatting in Kotlin repo
      • update ktfmt defaults where necessary
      • decide on the future of the --kotlinlang-style option
      • analyze the performance/memory impact/developer experience
    • Decide on the ktfmt in Kotlin workflow
      • how is the reformatting performed: IDE (IntelliJ plugin), Gradle, cli
      • when is the reformatting performed: incremental, on save, on commit, on push, on CI
    • Perform one-time reformat of the Kotlin repo
      • decide how to handle branch/PR conflicts
    • Set up CI checks and auto-reformatting
    • Update contribution guidelines
    • Configure ktfmt for the other official Kotlin repos
    • Set up ktfmt vs. Kotlin co-development processes
      • ktfmt vs. Kotlin versioning, decide on alpha/beta/experimental/release status of ktfmt
      • decide how and when new features are added
  • Phase 3: Long-term community adoption and endorsement

    • Stabilise the API surface so that external tools can rely on ktfmt
    • Update documentation in https://kotlinlang.org/ to recommend ktfmt
      • provide official IDE/CI setup recommendations
      • provide official Gradle/Maven/other build tools integration
    • Adopt ktfmt as a default formatter in IntelliJ
      • analyze the performance/memory impact
      • define deprecation/migration pipeline
      • sunset ktfmt IntelliJ plugin

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions