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/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 @@ + +