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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions