diff --git a/qlty-check/src/executor/invocation_script.rs b/qlty-check/src/executor/invocation_script.rs index 0e07d61e..6722469c 100644 --- a/qlty-check/src/executor/invocation_script.rs +++ b/qlty-check/src/executor/invocation_script.rs @@ -17,6 +17,7 @@ pub fn compute_invocation_script(plan: &InvocationPlan) -> Result { // Autoload script first in case it has variables that need to be interpolated base_script = replace_autoload_script(plan, base_script); + base_script = replace_config_script(plan, base_script); base_script = plan.tool.interpolate_variables(&base_script); base_script = replace_target_variable(plan, base_script); base_script = replace_tmpfile_variable(plan, base_script); @@ -39,6 +40,19 @@ fn replace_autoload_script(plan: &InvocationPlan, script: String) -> String { } } +fn replace_config_script(plan: &InvocationPlan, script: String) -> String { + if script.contains("${config_script}") { + if !plan.plugin_configs.is_empty() { + let config_script = plan.driver.config_script.as_deref().unwrap_or(""); + script.replace("${config_script}", config_script) + } else { + script.replace("${config_script}", "") + } + } else { + script + } +} + fn replace_target_variable(plan: &InvocationPlan, script: String) -> String { if script.contains("${target}") { let targets_list = plan_target_list(plan); diff --git a/qlty-config/src/config/plugin.rs b/qlty-config/src/config/plugin.rs index ff313b7d..fddf1e18 100644 --- a/qlty-config/src/config/plugin.rs +++ b/qlty-config/src/config/plugin.rs @@ -115,6 +115,9 @@ pub struct DriverDef { #[serde(default)] pub autoload_script: Option, + + #[serde(default)] + pub config_script: Option, } fn default_driver_timeout() -> u64 { diff --git a/qlty-plugins/plugins/linters/phpstan/plugin.toml b/qlty-plugins/plugins/linters/phpstan/plugin.toml index 6f9b6492..a4378196 100644 --- a/qlty-plugins/plugins/linters/phpstan/plugin.toml +++ b/qlty-plugins/plugins/linters/phpstan/plugin.toml @@ -12,8 +12,9 @@ description = "PHP code linter" suggested = "targets" [plugins.definitions.phpstan.drivers.lint] -script = "php -d memory_limit=-1 ${linter}/phpstan analyze ${target} --error-format=json --level=9 ${autoload_script}" +script = "php -d memory_limit=-1 ${linter}/phpstan analyze ${target} --error-format=json --level=9 ${autoload_script} ${config_script}" autoload_script = "--autoload-file=${linter}/vendor/autoload.php" +config_script = "--configuration=${config_file}" success_codes = [0, 1] output = "stdout" output_format = "phpstan" @@ -21,3 +22,4 @@ cache_results = true batch = true suggested = "targets" output_missing = "parse" +copy_configs_into_tool_install = true