From 27a449eaf759b83db331056bd3556fa43c87aa78 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Fri, 1 Apr 2022 11:34:03 +0200 Subject: [PATCH] Move duplicate key parsing from bootstrap to validate/diagnose to reduce bootstrap time a bit --- src/Composer/Factory.php | 7 ------- src/Composer/Util/ConfigValidator.php | 10 ++++++++++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Composer/Factory.php b/src/Composer/Factory.php index 43ddfa14f..acf142ad9 100644 --- a/src/Composer/Factory.php +++ b/src/Composer/Factory.php @@ -316,13 +316,6 @@ class Factory $message = $e->getMessage() . ':' . PHP_EOL . $errors; throw new JsonValidationException($message); } - $jsonParser = new JsonParser; - try { - $jsonParser->parse(file_get_contents($localConfig), JsonParser::DETECT_KEY_CONFLICTS); - } catch (DuplicateKeyException $e) { - $details = $e->getDetails(); - $io->writeError('Key '.$details['key'].' is a duplicate in '.$localConfig.' at line '.$details['line'].''); - } $localConfig = $file->read(); $localConfigSource = $file->getPath(); diff --git a/src/Composer/Util/ConfigValidator.php b/src/Composer/Util/ConfigValidator.php index 3e00b85c7..4b21f9090 100644 --- a/src/Composer/Util/ConfigValidator.php +++ b/src/Composer/Util/ConfigValidator.php @@ -20,6 +20,8 @@ use Composer\IO\IOInterface; use Composer\Json\JsonFile; use Composer\Pcre\Preg; use Composer\Spdx\SpdxLicenses; +use Seld\JsonLint\DuplicateKeyException; +use Seld\JsonLint\JsonParser; /** * Validates a composer configuration. @@ -77,6 +79,14 @@ class ConfigValidator return array($errors, $publishErrors, $warnings); } + $jsonParser = new JsonParser(); + try { + $jsonParser->parse(file_get_contents($file), JsonParser::DETECT_KEY_CONFLICTS); + } catch (DuplicateKeyException $e) { + $details = $e->getDetails(); + $warnings[] = 'Key '.$details['key'].' is a duplicate in '.$file.' at line '.$details['line']; + } + // validate actual data if (empty($manifest['license'])) { $warnings[] = 'No license specified, it is recommended to do so. For closed-source software you may use "proprietary" as license.';