diff --git a/doc/04-schema.md b/doc/04-schema.md index 05149d331..95e18ae49 100644 --- a/doc/04-schema.md +++ b/doc/04-schema.md @@ -94,7 +94,9 @@ Out of the box, Composer supports four types: CMSs like the [SilverStripe installer](https://github.com/silverstripe/silverstripe-installer) or full fledged applications distributed as packages. This can for example be used by IDEs to provide listings of projects to initialize when creating - a new workspace. + a new workspace. Setting the type to `project` also makes the `name` and + `description` fields optional, making it a good choice for closed source + projects wishing to use `composer validate`. - **metapackage:** An empty package that contains requirements and will trigger their installation, but contains no files and will not write anything to the filesystem. As such, it does not require a dist or source key to be diff --git a/src/Composer/Util/ConfigValidator.php b/src/Composer/Util/ConfigValidator.php index dd2cbcb0d..f98bbd74f 100644 --- a/src/Composer/Util/ConfigValidator.php +++ b/src/Composer/Util/ConfigValidator.php @@ -63,6 +63,16 @@ class ConfigValidator $json->validateSchema(); } catch (JsonValidationException $e) { foreach ($e->getErrors() as $message) { + if ($message === 'type : The property type is required') { + $message .= ' (see https://getcomposer.org/doc/04-schema.md#type)'; + } + if ($message === 'name : The property name is required') { + $message .= ' (or set "type" to "project" to remove this requirement)'; + } + if ($message === 'description : The property description is required') { + $message .= ' (or set "type" to "project" to remove this requirement)'; + } + if ($laxValid) { $publishErrors[] = $message; } else {