From d88ccda5abd37bf85bc18ab7afb00b9cda1c3cf6 Mon Sep 17 00:00:00 2001 From: Willem Verstraeten Date: Mon, 15 Dec 2025 21:20:37 +0100 Subject: [PATCH 1/2] Add support for "cargo fmt" --- .../rust/CargoCommandBuildSession.kt | 4 +++ .../rust/CargoRunnerBuildService.kt | 1 + .../rust/cargo/FmtArgumentsProvider.kt | 33 +++++++++++++++++++ .../rust/test/CargoRunnerBuildServiceTest.kt | 18 ++++++++++ .../buildServer/rust/CargoConstants.kt | 4 +++ .../rust/CargoParametersProvider.kt | 7 ++++ .../rust/commands/cargo/FmtCommandType.kt | 20 +++++++++++ .../cargo/editFmtParameters.jsp | 26 +++++++++++++++ .../cargo/viewFmtParameters.jsp | 18 ++++++++++ 9 files changed, 131 insertions(+) create mode 100644 plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/cargo/FmtArgumentsProvider.kt create mode 100644 plugin-rust-server/src/main/kotlin/jetbrains/buildServer/rust/commands/cargo/FmtCommandType.kt create mode 100644 plugin-rust-server/src/main/resources/buildServerResources/cargo/editFmtParameters.jsp create mode 100644 plugin-rust-server/src/main/resources/buildServerResources/cargo/viewFmtParameters.jsp diff --git a/plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/CargoCommandBuildSession.kt b/plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/CargoCommandBuildSession.kt index 0e3b747..80e74b9 100644 --- a/plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/CargoCommandBuildSession.kt +++ b/plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/CargoCommandBuildSession.kt @@ -99,6 +99,10 @@ class CargoCommandBuildSession( commands.add(createCommand(RustupComponentAddBuildService("clippy"))) } + if (command == CargoConstants.COMMAND_FMT) { + commands.add(createCommand(RustupComponentAddBuildService("rustfmt"))) + } + if (command == CargoConstants.COMMAND_CUSTOM_CRATE) { val command = parameters[CargoConstants.PARAM_CUSTOM_CRATE_COMMAND_NAME] val version = parameters[CargoConstants.PARAM_CUSTOM_CRATE_COMMAND_VERSION] diff --git a/plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/CargoRunnerBuildService.kt b/plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/CargoRunnerBuildService.kt index d4f3987..fb238c3 100644 --- a/plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/CargoRunnerBuildService.kt +++ b/plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/CargoRunnerBuildService.kt @@ -32,6 +32,7 @@ class CargoRunnerBuildService( CargoConstants.COMMAND_CHECK to CheckArgumentsProvider(), CargoConstants.COMMAND_CLEAN to CleanArgumentsProvider(), CargoConstants.COMMAND_CLIPPY to ClippyArgumentsProvider(), + CargoConstants.COMMAND_FMT to FmtArgumentsProvider(), CargoConstants.COMMAND_DOC to DocArgumentsProvider(), CargoConstants.COMMAND_LOGIN to LoginArgumentsProvider(), CargoConstants.COMMAND_PACKAGE to PackageArgumentsProvider(), diff --git a/plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/cargo/FmtArgumentsProvider.kt b/plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/cargo/FmtArgumentsProvider.kt new file mode 100644 index 0000000..897ecb3 --- /dev/null +++ b/plugin-rust-agent/src/main/kotlin/jetbrains/buildServer/rust/cargo/FmtArgumentsProvider.kt @@ -0,0 +1,33 @@ + + +package jetbrains.buildServer.rust.cargo + +import jetbrains.buildServer.agent.BuildRunnerContext +import jetbrains.buildServer.rust.ArgumentsProvider +import jetbrains.buildServer.rust.CargoConstants +import java.util.* + +/** + * Provides arguments to cargo clean command. + */ +class FmtArgumentsProvider : ArgumentsProvider { + + override fun getArguments(runnerContext: BuildRunnerContext): List { + val parameters = runnerContext.runnerParameters + val arguments = ArrayList() + arguments.add(CargoConstants.COMMAND_FMT) + + val checkValue = parameters[CargoConstants.PARAM_FMT_CHECK] + if ("true".equals(checkValue, ignoreCase = true)) { + arguments.add("--check") + } + + val manifestValue = parameters[CargoConstants.PARAM_FMT_MANIFEST] + if (!manifestValue.isNullOrBlank()) { + arguments.add("--manifest-path") + arguments.add(manifestValue.trim()) + } + + return arguments + } +} \ No newline at end of file diff --git a/plugin-rust-agent/src/test/kotlin/jetbrains/buildServer/rust/test/CargoRunnerBuildServiceTest.kt b/plugin-rust-agent/src/test/kotlin/jetbrains/buildServer/rust/test/CargoRunnerBuildServiceTest.kt index 194fb76..c677b49 100644 --- a/plugin-rust-agent/src/test/kotlin/jetbrains/buildServer/rust/test/CargoRunnerBuildServiceTest.kt +++ b/plugin-rust-agent/src/test/kotlin/jetbrains/buildServer/rust/test/CargoRunnerBuildServiceTest.kt @@ -71,6 +71,15 @@ class CargoRunnerBuildServiceTest { Assert.assertEquals(result, arguments) } + @Test(dataProvider = "testFmtArgumentsData") + fun testFmtArguments(parameters: Map, arguments: List) { + val context = getRunnerContext(parameters) + val argumentsProvider = FmtArgumentsProvider() + val result = argumentsProvider.getArguments(context) + + Assert.assertEquals(result, arguments) + } + @Test(dataProvider = "testPackageArgumentsData") fun testPackageArguments(parameters: Map, arguments: List) { val context = getRunnerContext(parameters) @@ -270,6 +279,15 @@ class CargoRunnerBuildServiceTest { CargoConstants.PARAM_DOC_MANIFEST, "/path/to/manifest"), listOf("doc", "--target", "name", "--manifest-path", "/path/to/manifest"))) } + @DataProvider(name = "testFmtArgumentsData") + fun testFmtArgumentsData(): Array> { + return arrayOf(arrayOf(CollectionsUtil.asMap( + CargoConstants.PARAM_FMT_CHECK, "true"), listOf("fmt", "--check")), + + arrayOf(CollectionsUtil.asMap( + CargoConstants.PARAM_FMT_MANIFEST, "/path/to/manifest"), listOf("fmt", "--manifest-path", "/path/to/manifest"))) + } + @DataProvider(name = "testPackageArgumentsData") fun testPackageArgumentsData(): Array> { return arrayOf(arrayOf(CollectionsUtil.asMap( diff --git a/plugin-rust-common/src/main/kotlin/jetbrains/buildServer/rust/CargoConstants.kt b/plugin-rust-common/src/main/kotlin/jetbrains/buildServer/rust/CargoConstants.kt index 5503c96..c975a9d 100644 --- a/plugin-rust-common/src/main/kotlin/jetbrains/buildServer/rust/CargoConstants.kt +++ b/plugin-rust-common/src/main/kotlin/jetbrains/buildServer/rust/CargoConstants.kt @@ -27,6 +27,7 @@ object CargoConstants { const val COMMAND_CLEAN = "clean" const val COMMAND_CLIPPY = "clippy" const val COMMAND_DOC = "doc" + const val COMMAND_FMT = "fmt" const val COMMAND_LOGIN = "login" const val COMMAND_PACKAGE = "package" const val COMMAND_PUBLISH = "publish" @@ -115,6 +116,9 @@ object CargoConstants { const val PARAM_DOC_MANIFEST = "cargo-doc-manifest" const val PARAM_DOC_PARALLEL = "cargo-doc-parallel" + const val PARAM_FMT_CHECK = "cargo-fmt-check" + const val PARAM_FMT_MANIFEST = "cargo-fmt-manifest" + const val PARAM_PACKAGE_NO_VERIFY = "cargo-package-no-verify" const val PARAM_PACKAGE_NO_METADATA = "cargo-package-no-metadata" const val PARAM_PACKAGE_MANIFEST = "cargo-package-manifest" diff --git a/plugin-rust-server/src/main/kotlin/jetbrains/buildServer/rust/CargoParametersProvider.kt b/plugin-rust-server/src/main/kotlin/jetbrains/buildServer/rust/CargoParametersProvider.kt index 7b3d065..4885e52 100644 --- a/plugin-rust-server/src/main/kotlin/jetbrains/buildServer/rust/CargoParametersProvider.kt +++ b/plugin-rust-server/src/main/kotlin/jetbrains/buildServer/rust/CargoParametersProvider.kt @@ -16,6 +16,7 @@ class CargoParametersProvider { CleanCommandType(), ClippyCommandType(), DocCommandType(), + FmtCommandType(), LoginCommandType(), PackageCommandType(), PublishCommandType(), @@ -232,6 +233,12 @@ class CargoParametersProvider { val docParallelKey: String get() = CargoConstants.PARAM_DOC_PARALLEL + val fmtCheckKey: String + get() = CargoConstants.PARAM_FMT_CHECK + + val fmtManifestKey: String + get() = CargoConstants.PARAM_FMT_MANIFEST + val packageNoVerifyKey: String get() = CargoConstants.PARAM_PACKAGE_NO_VERIFY diff --git a/plugin-rust-server/src/main/kotlin/jetbrains/buildServer/rust/commands/cargo/FmtCommandType.kt b/plugin-rust-server/src/main/kotlin/jetbrains/buildServer/rust/commands/cargo/FmtCommandType.kt new file mode 100644 index 0000000..496c44e --- /dev/null +++ b/plugin-rust-server/src/main/kotlin/jetbrains/buildServer/rust/commands/cargo/FmtCommandType.kt @@ -0,0 +1,20 @@ + + +package jetbrains.buildServer.rust.commands.cargo + +import jetbrains.buildServer.rust.CargoConstants +import jetbrains.buildServer.rust.commands.CommandType + +/** + * Provides parameters for cargo doc command. + */ +class FmtCommandType : CommandType { + override val name: String + get() = CargoConstants.COMMAND_FMT + + override val editPage: String + get() = "editFmtParameters.jsp" + + override val viewPage: String + get() = "viewFmtParameters.jsp" +} \ No newline at end of file diff --git a/plugin-rust-server/src/main/resources/buildServerResources/cargo/editFmtParameters.jsp b/plugin-rust-server/src/main/resources/buildServerResources/cargo/editFmtParameters.jsp new file mode 100644 index 0000000..333fde4 --- /dev/null +++ b/plugin-rust-server/src/main/resources/buildServerResources/cargo/editFmtParameters.jsp @@ -0,0 +1,26 @@ +<%@ taglib prefix="forms" tagdir="/WEB-INF/tags/forms" %> +<%@ taglib prefix="props" tagdir="/WEB-INF/tags/props" %> +<%@ taglib prefix="l" tagdir="/WEB-INF/tags/layout" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="bs" tagdir="/WEB-INF/tags" %> + + + + + + + Format + + + + + + + + + + + + Path to the manifest to use cargo with. + + \ No newline at end of file diff --git a/plugin-rust-server/src/main/resources/buildServerResources/cargo/viewFmtParameters.jsp b/plugin-rust-server/src/main/resources/buildServerResources/cargo/viewFmtParameters.jsp new file mode 100644 index 0000000..92d7bb3 --- /dev/null +++ b/plugin-rust-server/src/main/resources/buildServerResources/cargo/viewFmtParameters.jsp @@ -0,0 +1,18 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="props" tagdir="/WEB-INF/tags/props" %> + + + + + + +
+ Check formatting and report an error: ON +
+
+ + +
+ Manifest: +
+
\ No newline at end of file From 5ae6e1c13840445ecbd922d906bb798dc7fa0bd4 Mon Sep 17 00:00:00 2001 From: Willem Verstraeten Date: Tue, 16 Dec 2025 08:53:27 +0100 Subject: [PATCH 2/2] Update kotlin dsl definition "cargo fmt" support --- plugin-rust-server/kotlin-dsl/CargoStep.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plugin-rust-server/kotlin-dsl/CargoStep.xml b/plugin-rust-server/kotlin-dsl/CargoStep.xml index 6161ebe..b9c087f 100644 --- a/plugin-rust-server/kotlin-dsl/CargoStep.xml +++ b/plugin-rust-server/kotlin-dsl/CargoStep.xml @@ -269,6 +269,21 @@ + +