From 68f5badac7a2173a62ab8c57d338bae1b4c1db6c Mon Sep 17 00:00:00 2001 From: Joel Low Date: Thu, 18 Feb 2016 19:07:39 +0800 Subject: [PATCH 1/2] Use the Bundler context only when Rubocop is in the Gemfile. This allows the use of system/user-installed Rubocop. --- .../sirlantis/rubymine/rubocop/RubocopTask.kt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/io/github/sirlantis/rubymine/rubocop/RubocopTask.kt b/src/io/github/sirlantis/rubymine/rubocop/RubocopTask.kt index 51660ae..9cdade8 100644 --- a/src/io/github/sirlantis/rubymine/rubocop/RubocopTask.kt +++ b/src/io/github/sirlantis/rubymine/rubocop/RubocopTask.kt @@ -40,6 +40,14 @@ class RubocopTask(val module: Module, val paths: List) : Task.Background sdk?.homeDirectory?.parent?.canonicalPath } + val installedInSdk: Boolean by lazy { + GemSearchUtil.findGem(sdk, "rubocop") != null + } + + val installedInBundle: Boolean by lazy { + GemSearchUtil.findGem(module, "rubocop") != null + } + override fun run(indicator: ProgressIndicator) { run() } @@ -52,7 +60,7 @@ class RubocopTask(val module: Module, val paths: List) : Task.Background return } - if (GemSearchUtil.findGem(module, "rubocop") == null) { + if (!installedInSdk && !installedInBundle) { logger.warn("Didn't find rubocop gem") return } @@ -165,8 +173,11 @@ class RubocopTask(val module: Module, val paths: List) : Task.Background val sudo = false val commandLine = runner.createAndSetupCmdLine(workDirectory.canonicalPath!!, null, true, command, sdk, sudo, *args) - val preprocessor = BundlerUtil.createBundlerPreprocessor(module, sdk) - preprocessor.preprocess(commandLine) + + if (installedInBundle) { + val preprocessor = BundlerUtil.createBundlerPreprocessor(module, sdk) + preprocessor.preprocess(commandLine) + } logger.debug("Executing RuboCop (SDK=%s)".format(sdkRoot), commandLine.commandLineString) From 60e2056b8414931fff984a1ce83d4656f50e0a19 Mon Sep 17 00:00:00 2001 From: Joel Low Date: Thu, 18 Feb 2016 19:07:57 +0800 Subject: [PATCH 2/2] Support Windows by prepending the path to the Ruby interpreter when running Rubocop. This also uses the full path to the Rubocop gem. --- .../sirlantis/rubymine/rubocop/RubocopTask.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/io/github/sirlantis/rubymine/rubocop/RubocopTask.kt b/src/io/github/sirlantis/rubymine/rubocop/RubocopTask.kt index 9cdade8..3a9d60a 100644 --- a/src/io/github/sirlantis/rubymine/rubocop/RubocopTask.kt +++ b/src/io/github/sirlantis/rubymine/rubocop/RubocopTask.kt @@ -17,10 +17,13 @@ import com.intellij.openapi.module.Module import java.io.Closeable import java.io.BufferedInputStream import com.intellij.openapi.application.Application +import com.intellij.openapi.util.SystemInfo import org.jetbrains.plugins.ruby.ruby.run.RunnerUtil import io.github.sirlantis.rubymine.rubocop.utils.NotifyUtil +import org.jetbrains.plugins.ruby.gem.GemUtil import org.jetbrains.plugins.ruby.gem.util.BundlerUtil import org.jetbrains.plugins.ruby.gem.util.GemSearchUtil +import org.jetbrains.plugins.ruby.ruby.sdk.RubySdkAdditionalData class RubocopTask(val module: Module, val paths: List) : Task.Backgroundable(module.project, "Running RuboCop", true) { @@ -165,10 +168,16 @@ class RubocopTask(val module: Module, val paths: List) : Task.Background fun runViaCommandLine(sdk: Sdk) { val runner = RunnerUtil.getRunner(sdk, module) - val commandLineList = linkedListOf("rubocop", "--format", "json") + val rubocopPath = GemUtil.getGemExecutableRubyScriptPath(module, sdk, "rubocop", + "rubocop")!! + val commandLineList = linkedListOf(rubocopPath, "--format", "json") commandLineList.addAll(paths) - val command = commandLineList.removeFirst() + val command = if (SystemInfo.isWindows && sdk.sdkAdditionalData is RubySdkAdditionalData) { + (sdk.sdkAdditionalData as RubySdkAdditionalData).getInterpreterPath(sdk) + } else { + commandLineList.removeFirst() + } val args = commandLineList.toTypedArray() val sudo = false