Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
8b04231
chore: Overhaul of the project structure; Overhaul of the settings ha…
marcelkliemannel Mar 23, 2025
9083ffd
chore: Limit code delimiters to 80 characters
marcelkliemannel Mar 23, 2025
ab299c1
chore: Add ktfmt code linting
marcelkliemannel Mar 23, 2025
9398bd1
chore: Fix test execution
marcelkliemannel Mar 27, 2025
0682cbd
chore: Minor code cleanup
marcelkliemannel Mar 27, 2025
bff30bf
chore: Minor code cleanup
marcelkliemannel Mar 27, 2025
6dfe26d
chore: Fix functionality after refactoring
marcelkliemannel Mar 29, 2025
18b3af6
feat: Add file handling to converts
marcelkliemannel Apr 12, 2025
643366e
feat: New "Escape Sequence" tool for escaping/unescaping line breaks,…
marcelkliemannel Apr 14, 2025
2d3a2f5
chore: Fix persisted configuration tests
marcelkliemannel Apr 19, 2025
b3a0d35
fix: `hsl/hsla` CSS color value calculation
marcelkliemannel Apr 20, 2025
9995ac2
chore: Remove promote add open action to main toolbar
marcelkliemannel Apr 21, 2025
00d2083
feat: Migrate simple text transformers to the new converter base
marcelkliemannel Apr 25, 2025
abdf5b1
chore: Update all dependencies
marcelkliemannel Apr 27, 2025
e2ade57
fix: Hashing and HMAC tool didn't correctly use hex encoding for text…
marcelkliemannel Apr 27, 2025
341f4b2
chore: Add description to the `Escape Sequences` tool
marcelkliemannel Apr 27, 2025
ef97020
chore: Bump version to 7.0.0
marcelkliemannel Apr 27, 2025
c72f989
feat: Improve about plugin dialog
marcelkliemannel Apr 27, 2025
0c55a08
chore: Fix gradle.properties
marcelkliemannel Apr 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
650 changes: 36 additions & 614 deletions .editorconfig

Large diffs are not rendered by default.

8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,10 @@ gradle-app.setting
.gradletasknamecache

# Mac
.DS_Store
.DS_Store

# Kotlin
.kotlin/

# Java
.java-version
23 changes: 20 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,28 @@

### Fixed

## 6.4.0 - 2025-03-18
## 7.0.0 - 2025-04-27

### Added

- Compatibility with 2025.1 EAP releases
- All encoding/decoding, escaping/unescaping and text transformation tools now also support reading from and writing to files.
- New "Escape Sequence" tool for escaping/unescaping line breaks, tabs, backslashes, and single/double quotes.
- New "JSON Handling" settings that allow very fine-grained control over the features for reading and writing JSON in all tools. This makes it possible to handle certain non-standard JSON features, such as comments.
- Added a setting to control the number of decimal places in the "Color Picker" tool.

### Changed

- Setting "Dialog is modal" was reset to its default value (false), due to overhaul of the internal settings handling.

### Removed

- The "Line Breaks Encoding" tool has been replaced by the new "Escape Sequence" tool.

### Fixed

- Fixed compatibility problems with 2025.1 releases.
- The `hsl/hsla` CSS color value wasn't correctly calculated in the "Color Picker" tool.
- JSON input errors contained too much irrelevant metadata about the internal JSON processing.

## 6.3.0 - 2025-01-14

Expand Down Expand Up @@ -143,7 +160,7 @@

### Added

- Add automatic input text case detection to the text case converter
- Add automatic input text case detection to the text case converter
- Add escape/unescape as editor actions and code intentions
- Add new tool: Text Statistic
- Add support for the "Dot Text Case"
Expand Down
141 changes: 58 additions & 83 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

import org.jetbrains.changelog.Changelog
import org.jetbrains.intellij.platform.gradle.TestFrameworkType
import org.jetbrains.intellij.platform.gradle.tasks.RunIdeTask
Expand All @@ -17,17 +16,18 @@ plugins {
alias(libs.plugins.kotlin.jvm)
alias(libs.plugins.intellij.platform)
alias(libs.plugins.changelog)
alias(libs.plugins.spotless)
alias(libs.plugins.version.catalog.update)
}

subprojects {
apply(plugin = "org.jetbrains.intellij.platform.module")
}
subprojects { apply(plugin = "org.jetbrains.intellij.platform.module") }

val platform = properties("platform")

allprojects {
apply(plugin = "java")
apply(plugin = "kotlin")
apply(plugin = "com.diffplug.spotless")

group = properties("pluginGroup")
version = properties("pluginVersion")
Expand All @@ -36,9 +36,7 @@ allprojects {
mavenLocal()
mavenCentral()

intellijPlatform {
defaultRepositories()
}
intellijPlatform { defaultRepositories() }
}

dependencies {
Expand All @@ -51,16 +49,14 @@ allprojects {
}
}

java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(21))
}
}
spotless { kotlin { ktfmt().googleStyle() } }

java { toolchain { languageVersion.set(JavaLanguageVersion.of(21)) } }

tasks {
withType<KotlinCompile> {
compilerOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
freeCompilerArgs = listOf("-Xjsr305=strict", "-opt-in=kotlin.ExperimentalStdlibApi")
jvmTarget.set(JvmTarget.JVM_21)
}
}
Expand All @@ -69,6 +65,8 @@ allprojects {
useJUnitPlatform()
systemProperty("java.awt.headless", "false")
}

named("check") { dependsOn("spotlessCheck") }
}
}

Expand All @@ -77,88 +75,77 @@ dependencies {
pluginVerifier()
zipSigner()

pluginModule(project(":common"))
pluginModule(implementation(project(":common")))
pluginModule(implementation(project(":settings")))
pluginModule(implementation(project(":tools-editor")))
pluginModule(implementation(project(":tools-ui")))
if (platform == "IC") {
pluginModule(project(":java-dependent"))
pluginModule(project(":kotlin-dependent"))
pluginModule(implementation(project(":java-dependent")))
pluginModule(implementation(project(":kotlin-dependent")))
}
}

implementation(libs.bundles.jackson)
implementation(libs.uuid.generator) {
exclude(group = "org.slf4j", module = "slf4j-api")
}
implementation(libs.jsonpath) {
exclude(group = "org.slf4j", module = "slf4j-api")
}
implementation(libs.json.schema.validator) {
exclude("org.apache.commons", "commons-lang3")
exclude(group = "org.slf4j", module = "slf4j-api")
}
implementation(libs.commons.text)
implementation(libs.commons.codec)
implementation(libs.commons.io)
implementation(libs.commons.compress)
implementation(libs.ulid.creator)
implementation(libs.csscolor4j)
implementation(libs.okhttp)
implementation(libs.jfiglet)
implementation(libs.jnanoid)
implementation(libs.jose4j) {
exclude(group = "org.slf4j", module = "slf4j-api")
}
implementation(libs.named.regexp)
implementation(libs.sql.formatter)
implementation(libs.bundles.zxing)
implementation(libs.bundles.text.case.converter)

testImplementation(libs.assertj.core)
testImplementation(libs.bundles.junit.implementation)
testRuntimeOnly(libs.bundles.junit.runtime)
// Required for the PSI Kotlin structure in tests. It needs to be compile-only
// as some parts are clashing with the IntelliJ platform dependency and
// causing the tests initialisation to fail.
testCompileOnly(libs.kotlin.compiler)
testImplementation(libs.commons.csv)
testImplementation(testFixtures(project(":common")))
testImplementation(testFixtures(project(":tools-ui")))
}

intellijPlatform {
pluginConfiguration {
id = providers.gradleProperty("pluginId")
version = providers.gradleProperty("pluginVersion")

ideaVersion {
sinceBuild = properties("pluginSinceBuild")
untilBuild = provider { null }
}
changeNotes.set(provider { changelog.renderItem(changelog.get(project.version as String), Changelog.OutputType.HTML) })

changeNotes.set(
provider {
changelog.renderItem(changelog.get(project.version as String), Changelog.OutputType.HTML)
}
)
}

signing {
val jetbrainsDir = File(System.getProperty("user.home"), ".jetbrains")
certificateChain.set(project.provider { File(jetbrainsDir, "plugin-sign-chain.crt").readText() })
privateKey.set(project.provider { File(jetbrainsDir, "plugin-sign-private-key.pem").readText() })
certificateChain.set(
project.provider { File(jetbrainsDir, "plugin-sign-chain.crt").readText() }
)
privateKey.set(
project.provider { File(jetbrainsDir, "plugin-sign-private-key.pem").readText() }
)
password.set(project.provider { properties("jetbrains.sign-plugin.password") })
}

publishing {
token.set(project.provider { properties("jetbrains.marketplace.token") })
channels.set(listOf(properties("pluginVersion").split('-').getOrElse(1) { "default" }.split('.').first()))
channels.set(
listOf(properties("pluginVersion").split('-').getOrElse(1) { "default" }.split('.').first())
)
}

pluginVerification {
failureLevel.set(
listOf(
COMPATIBILITY_PROBLEMS, INTERNAL_API_USAGES, NON_EXTENDABLE_API_USAGES,
OVERRIDE_ONLY_API_USAGES, INVALID_PLUGIN,
COMPATIBILITY_PROBLEMS,
INTERNAL_API_USAGES,
NON_EXTENDABLE_API_USAGES,
OVERRIDE_ONLY_API_USAGES,
INVALID_PLUGIN,
// Will fail for non-IC IDEs
//MISSING_DEPENDENCIES
// MISSING_DEPENDENCIES
)
)

ides {
recommended()

properties("pluginVerificationAdditionalIdes").split(",").forEach { ide ->
// ide(ide, properties("platformVersion"))
ide(ide, properties("platformVersion"))
}
}
}
Expand All @@ -171,43 +158,31 @@ changelog {
groups.set(listOf("Added", "Changed", "Removed", "Fixed"))
}

val writeChangelogToFileTask = tasks.create("writeChangelogToFile") {
val generatedResourcesDir = layout.buildDirectory.dir("generated-resources/changelog").get()
outputs.dir(generatedResourcesDir)

doLast {
val renderResult = changelog.instance.get().releasedItems.joinToString("\n") { changelog.renderItem(it, Changelog.OutputType.HTML) }
val baseDir = generatedResourcesDir.dir("dev/turingcomplete/intellijdevelopertoolsplugin")
file(baseDir).mkdirs()
file(baseDir.file("changelog.html")).writeText(renderResult)
}
}

sourceSets {
main {
resources {
srcDir(writeChangelogToFileTask)
}
}
}

tasks {
named("publishPlugin") {
dependsOn("check")

doFirst {
check(platform == "IC") { "Expected platform 'IC', but was: '$platform'" }
}
doFirst { check(platform == "IC") { "Expected platform 'IC', but was: '$platform'" } }
}

named("buildSearchableOptions") {
enabled = false
}
named("buildSearchableOptions") { enabled = false }

named<RunIdeTask>("runIde") {
jvmArgumentProviders += CommandLineArgumentProvider {
// https://kotlin.github.io/analysis-api/testing-in-k2-locally.html
listOf("-Didea.kotlin.plugin.use.k2=true")
}
}
}
}

versionCatalogUpdate {
pin {
versions.set(
listOf(
// Must be updated in conjunction with the minimum platform version
// https://plugins.jetbrains.com/docs/intellij/using-kotlin.html#kotlin-standard-library
"kotlin"
)
)
}
}
11 changes: 7 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
# The typo in the ID is frustrating, but we will never be able to change it :/
pluginId=dev.turingcomplete.intellijdevelopertoolsplugins
pluginGroup=dev.turingcomplete
pluginVersion=6.4.0
pluginSinceBuild=251
pluginVersion=7.0.0
pluginName=Developer Tools
pluginSinceBuild=243
platform=IC
# LATEST-EAP-SNAPSHOT
platformVersion=251.23774-EAP-CANDIDATE-SNAPSHOT
platformVersion=2024.3
platformGlobalBundledPlugins=com.intellij.modules.json
pluginVerificationAdditionalIdes=CL

# Opt-out flag for bundling Kotlin standard library.
# See https://plugins.jetbrains.com/docs/intellij/kotlin.html#kotlin-standard-library for details.
# See https://plugins.jetbrains.com/docs/intellij/using-kotlin.html#adding-kotlin-support for details.
kotlin.stdlib.default.dependency=false
kotlin.daemon.jvmargs=-Xmx2G
Loading