├── .editorconfig
├── .gitignore
├── .styleci.yml
├── .travis.yml
├── CHANGELOG.md
├── LICENSE
├── README.md
├── composer.json
├── composer.lock
├── config
└── phpmd.xml
├── phpspec-coverage.yml
├── phpspec.yml
├── src
├── CodeCoverage.php
├── CodeStyleChecker.php
├── CodeStyleFixer.php
├── ComposerScriptInterface.php
├── Console
│ └── ScriptArgumentsTrait.php
├── MessDetector.php
├── Process
│ └── Process.php
└── SpecificationTest.php
└── tests
└── specs
├── CodeCoverageSpec.php
├── CodeStyleCheckerSpec.php
├── CodeStyleFixerSpec.php
├── Console
└── ScriptArgumentsTraitSpec.php
├── MessDetectorSpec.php
├── Process
└── ProcessSpec.php
└── SpecificationTestSpec.php
/.editorconfig:
--------------------------------------------------------------------------------
1 | # editorconfig.org
2 |
3 | root = true
4 |
5 | # Global
6 |
7 | [*]
8 | charset = utf-8
9 | end_of_line = lf
10 | indent_style = space
11 | indent_size = 4
12 | insert_final_newline = true
13 | trim_trailing_whitespace = true
14 |
15 | # Languages
16 |
17 | [*.md]
18 | trim_trailing_whitespace = false
19 |
20 | [*.json]
21 | indent_style = space
22 | indent_size = 2
23 |
24 | [*.yml]
25 | indent_style = space
26 | indent_size = 2
27 |
28 | # Files
29 |
30 | [composer.json]
31 | indent_style = space
32 | indent_size = 4
33 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /coverage
2 | /vendor
3 | coverage.xml
4 |
--------------------------------------------------------------------------------
/.styleci.yml:
--------------------------------------------------------------------------------
1 | preset: psr2
2 |
3 | risky: false
4 |
5 | finder:
6 | exclude:
7 | - "tests"
8 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: php
2 |
3 | php:
4 | - '7.1'
5 | - '7.2'
6 | - '7.3'
7 |
8 | before_install:
9 | - travis_retry composer self-update
10 |
11 | install:
12 | - travis_retry composer install --no-interaction --prefer-dist --no-suggest
13 |
14 | script: composer test
15 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 | All notable changes to this project will be documented in this file.
3 |
4 | ## [Unreleased]
5 | ### Added
6 | - Deprecation notice in readme
7 |
8 | ## [v5.1.0] - 2020-02-21
9 | ### Added
10 | - Package to ignore final classes in tests
11 |
12 | ## [v5.0.0] - 2019-11-18
13 | ### Changed
14 | - Default coding style is now PSR-12
15 | - Default code style fixer is now `squizlabs/php_codesniffer`
16 |
17 | ### Added
18 | - Support for phpspec v5 and v6
19 |
20 | ### Removed
21 | - Support for phpspec v4
22 |
23 | ## [v4.2.0] - 2019-11-04
24 | ### Changed
25 | - Replaced package `leanphp/phpspec-code-coverage` with `friends-of-phpspec/phpspec-code-coverage`
26 |
27 | ##[v4.1.0] - 2018-09-10
28 | ### Removed
29 | - PHP 7.0 Support
30 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright 2017 karriere.at GmbH
2 |
3 | Licensed under the Apache License, Version 2.0 (the "License");
4 | you may not use this file except in compliance with the License.
5 |
6 | Unless required by applicable law or agreed to in writing, software
7 | distributed under the License is distributed on an "AS IS" BASIS,
8 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9 | See the License for the specific language governing permissions and
10 | limitations under the License.
11 |
12 |
13 | Apache License
14 | Version 2.0, January 2004
15 | http://www.apache.org/licenses/
16 |
17 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
18 |
19 | 1. Definitions.
20 |
21 | "License" shall mean the terms and conditions for use, reproduction,
22 | and distribution as defined by Sections 1 through 9 of this document.
23 |
24 | "Licensor" shall mean the copyright owner or entity authorized by
25 | the copyright owner that is granting the License.
26 |
27 | "Legal Entity" shall mean the union of the acting entity and all
28 | other entities that control, are controlled by, or are under common
29 | control with that entity. For the purposes of this definition,
30 | "control" means (i) the power, direct or indirect, to cause the
31 | direction or management of such entity, whether by contract or
32 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
33 | outstanding shares, or (iii) beneficial ownership of such entity.
34 |
35 | "You" (or "Your") shall mean an individual or Legal Entity
36 | exercising permissions granted by this License.
37 |
38 | "Source" form shall mean the preferred form for making modifications,
39 | including but not limited to software source code, documentation
40 | source, and configuration files.
41 |
42 | "Object" form shall mean any form resulting from mechanical
43 | transformation or translation of a Source form, including but
44 | not limited to compiled object code, generated documentation,
45 | and conversions to other media types.
46 |
47 | "Work" shall mean the work of authorship, whether in Source or
48 | Object form, made available under the License, as indicated by a
49 | copyright notice that is included in or attached to the work
50 | (an example is provided in the Appendix below).
51 |
52 | "Derivative Works" shall mean any work, whether in Source or Object
53 | form, that is based on (or derived from) the Work and for which the
54 | editorial revisions, annotations, elaborations, or other modifications
55 | represent, as a whole, an original work of authorship. For the purposes
56 | of this License, Derivative Works shall not include works that remain
57 | separable from, or merely link (or bind by name) to the interfaces of,
58 | the Work and Derivative Works thereof.
59 |
60 | "Contribution" shall mean any work of authorship, including
61 | the original version of the Work and any modifications or additions
62 | to that Work or Derivative Works thereof, that is intentionally
63 | submitted to Licensor for inclusion in the Work by the copyright owner
64 | or by an individual or Legal Entity authorized to submit on behalf of
65 | the copyright owner. For the purposes of this definition, "submitted"
66 | means any form of electronic, verbal, or written communication sent
67 | to the Licensor or its representatives, including but not limited to
68 | communication on electronic mailing lists, source code control systems,
69 | and issue tracking systems that are managed by, or on behalf of, the
70 | Licensor for the purpose of discussing and improving the Work, but
71 | excluding communication that is conspicuously marked or otherwise
72 | designated in writing by the copyright owner as "Not a Contribution."
73 |
74 | "Contributor" shall mean Licensor and any individual or Legal Entity
75 | on behalf of whom a Contribution has been received by Licensor and
76 | subsequently incorporated within the Work.
77 |
78 | 2. Grant of Copyright License. Subject to the terms and conditions of
79 | this License, each Contributor hereby grants to You a perpetual,
80 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
81 | copyright license to reproduce, prepare Derivative Works of,
82 | publicly display, publicly perform, sublicense, and distribute the
83 | Work and such Derivative Works in Source or Object form.
84 |
85 | 3. Grant of Patent License. Subject to the terms and conditions of
86 | this License, each Contributor hereby grants to You a perpetual,
87 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
88 | (except as stated in this section) patent license to make, have made,
89 | use, offer to sell, sell, import, and otherwise transfer the Work,
90 | where such license applies only to those patent claims licensable
91 | by such Contributor that are necessarily infringed by their
92 | Contribution(s) alone or by combination of their Contribution(s)
93 | with the Work to which such Contribution(s) was submitted. If You
94 | institute patent litigation against any entity (including a
95 | cross-claim or counterclaim in a lawsuit) alleging that the Work
96 | or a Contribution incorporated within the Work constitutes direct
97 | or contributory patent infringement, then any patent licenses
98 | granted to You under this License for that Work shall terminate
99 | as of the date such litigation is filed.
100 |
101 | 4. Redistribution. You may reproduce and distribute copies of the
102 | Work or Derivative Works thereof in any medium, with or without
103 | modifications, and in Source or Object form, provided that You
104 | meet the following conditions:
105 |
106 | (a) You must give any other recipients of the Work or
107 | Derivative Works a copy of this License; and
108 |
109 | (b) You must cause any modified files to carry prominent notices
110 | stating that You changed the files; and
111 |
112 | (c) You must retain, in the Source form of any Derivative Works
113 | that You distribute, all copyright, patent, trademark, and
114 | attribution notices from the Source form of the Work,
115 | excluding those notices that do not pertain to any part of
116 | the Derivative Works; and
117 |
118 | (d) If the Work includes a "NOTICE" text file as part of its
119 | distribution, then any Derivative Works that You distribute must
120 | include a readable copy of the attribution notices contained
121 | within such NOTICE file, excluding those notices that do not
122 | pertain to any part of the Derivative Works, in at least one
123 | of the following places: within a NOTICE text file distributed
124 | as part of the Derivative Works; within the Source form or
125 | documentation, if provided along with the Derivative Works; or,
126 | within a display generated by the Derivative Works, if and
127 | wherever such third-party notices normally appear. The contents
128 | of the NOTICE file are for informational purposes only and
129 | do not modify the License. You may add Your own attribution
130 | notices within Derivative Works that You distribute, alongside
131 | or as an addendum to the NOTICE text from the Work, provided
132 | that such additional attribution notices cannot be construed
133 | as modifying the License.
134 |
135 | You may add Your own copyright statement to Your modifications and
136 | may provide additional or different license terms and conditions
137 | for use, reproduction, or distribution of Your modifications, or
138 | for any such Derivative Works as a whole, provided Your use,
139 | reproduction, and distribution of the Work otherwise complies with
140 | the conditions stated in this License.
141 |
142 | 5. Submission of Contributions. Unless You explicitly state otherwise,
143 | any Contribution intentionally submitted for inclusion in the Work
144 | by You to the Licensor shall be under the terms and conditions of
145 | this License, without any additional terms or conditions.
146 | Notwithstanding the above, nothing herein shall supersede or modify
147 | the terms of any separate license agreement you may have executed
148 | with Licensor regarding such Contributions.
149 |
150 | 6. Trademarks. This License does not grant permission to use the trade
151 | names, trademarks, service marks, or product names of the Licensor,
152 | except as required for reasonable and customary use in describing the
153 | origin of the Work and reproducing the content of the NOTICE file.
154 |
155 | 7. Disclaimer of Warranty. Unless required by applicable law or
156 | agreed to in writing, Licensor provides the Work (and each
157 | Contributor provides its Contributions) on an "AS IS" BASIS,
158 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
159 | implied, including, without limitation, any warranties or conditions
160 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
161 | PARTICULAR PURPOSE. You are solely responsible for determining the
162 | appropriateness of using or redistributing the Work and assume any
163 | risks associated with Your exercise of permissions under this License.
164 |
165 | 8. Limitation of Liability. In no event and under no legal theory,
166 | whether in tort (including negligence), contract, or otherwise,
167 | unless required by applicable law (such as deliberate and grossly
168 | negligent acts) or agreed to in writing, shall any Contributor be
169 | liable to You for damages, including any direct, indirect, special,
170 | incidental, or consequential damages of any character arising as a
171 | result of this License or out of the use or inability to use the
172 | Work (including but not limited to damages for loss of goodwill,
173 | work stoppage, computer failure or malfunction, or any and all
174 | other commercial damages or losses), even if such Contributor
175 | has been advised of the possibility of such damages.
176 |
177 | 9. Accepting Warranty or Additional Liability. While redistributing
178 | the Work or Derivative Works thereof, You may choose to offer,
179 | and charge a fee for, acceptance of support, warranty, indemnity,
180 | or other liability obligations and/or rights consistent with this
181 | License. However, in accepting such obligations, You may act only
182 | on Your own behalf and on Your sole responsibility, not on behalf
183 | of any other Contributor, and only if You agree to indemnify,
184 | defend, and hold each Contributor harmless for any liability
185 | incurred by, or claims asserted against, such Contributor by reason
186 | of your accepting any such warranty or additional liability.
187 |
188 | END OF TERMS AND CONDITIONS
189 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | [](https://travis-ci.org/karriereat/php-code-quality)
4 | [](https://styleci.io/repos/79470259)
5 |
6 | # ❗️ This package is no longer being actively developed. ❗
7 |
8 | # Code Quality for PHP packages
9 |
10 | This package provides code quality scripts that can be run via
11 | [Composer](https://github.com/composer/composer).
12 |
13 | The scripts also work on continous integration (CI) servers like Jenkins.
14 |
15 | ## Used packages
16 |
17 | ### [phpspec/phpspec](https://github.com/phpspec/phpspec)
18 |
19 | Used for testing (SpecBDD) the code.
20 | Must be configured with a `phpspec.yml` file in your root folder.
21 |
22 | We are using the `leanphp/phpspec-code-coverage` extension for generating coverage reports.
23 | This extension requires a `phpspec-coverage.yml` file in your root folder and Xdebug enabled.
24 |
25 | ### [squizlabs/PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer)
26 |
27 | Currently used for checking (linting) and fixing the code.
28 | Sniffs all files in `src` directory.
29 |
30 | ### [phpmd/phpmd](https://github.com/phpmd/phpmd)
31 |
32 | Used for mess detection.
33 | Runs the defined ruleset (`config/phpmd.xml`) on all files in `src` directory.
34 |
35 | ## Installation
36 |
37 | Run `composer require --dev karriere/code-quality` to install this package.
38 |
39 | After installing, insert the desired scripts to your `composer.json`.
40 |
41 | ```json
42 | {
43 | "scripts": {
44 | "test": "Karriere\\CodeQuality\\SpecificationTest::run",
45 | "lint": "Karriere\\CodeQuality\\CodeStyleChecker::run",
46 | "fix": "Karriere\\CodeQuality\\CodeStyleFixer::run",
47 | "coverage": "Karriere\\CodeQuality\\CodeCoverage::run",
48 | "md": "Karriere\\CodeQuality\\MessDetector::run"
49 | }
50 | }
51 | ```
52 |
53 | ## Usage
54 |
55 | You can run a script like this: `composer {script} -- {options}`.
56 |
57 | > If you are using Git-Shell on Windows (or Git-Shell in Intellij
58 | > Terminal on Windows), call scripts like this: `composer.bat {script}`.
59 | > Otherwise colors will not work.
60 |
61 | You can disable `TTY` by adding the `--notty` flag (needed for Jenkins).
62 | On Windows platform it's disabled automatically.
63 |
64 | ```
65 | composer {script} -- --env=jenkins --notty
66 | ```
67 |
68 | ### Scripts
69 |
70 | #### `test`
71 |
72 | ```
73 | Usage:
74 | test [--] [options]
75 |
76 | Options:
77 | --fail Exit with 1 if tests fail.
78 | --notty Disable TTY.
79 | --ptimeout Set process timeout (defaults to 60 seconds).
80 | -v --verbose Increase the verbosity of messages.
81 | ```
82 |
83 | #### `coverage`
84 |
85 | ```
86 | Usage:
87 | coverage [--] [options]
88 |
89 | Options:
90 | --env Specifiy the environment. Possible values:
91 | 'local': prints output on command-line.
92 | 'jenkins': generates a JUnit report file.
93 | --notty Disable TTY.
94 | --ptimeout Set process timeout (defaults to 60 seconds).
95 | ```
96 |
97 | #### `lint`
98 |
99 | ```
100 | Usage:
101 | lint [--] [options]
102 |
103 | Options:
104 | --env Specifiy the environment. Possible values:
105 | 'local': prints output on command-line.
106 | 'jenkins': generates a checkstyle report file.
107 | --fail Exit with 1 if linting fails.
108 | --notty Disable TTY.
109 | --ptimeout Set process timeout (defaults to 60 seconds).
110 | ```
111 |
112 | #### `md`
113 |
114 | ```
115 | Usage:
116 | lint [--] [options]
117 |
118 | Options:
119 | --env Specifiy the environment. Possible values:
120 | 'local': prints output on command-line.
121 | 'jenkins': generates a xml report file.
122 | --notty Disable TTY.
123 | --ptimeout Set process timeout (defaults to 60 seconds).
124 | ```
125 |
126 | #### `fix`
127 |
128 | ```
129 | Usage:
130 | fix [--] [options]
131 |
132 | Options:
133 | --notty Disable TTY.
134 | --ptimeout Set process timeout (defaults to 60 seconds).
135 | ```
136 |
137 | ## Using custom matchers
138 |
139 | This package integrates [karriere/phpspec-matchers](https://github.com/karriereat/phpspec-matchers).
140 | In order to use the custom matchers defined in this package,
141 | please include the extension configuration in your `phpspec.yml`.
142 |
143 | ## FAQ
144 |
145 | ### Why do I have to provide two phpspec configuration files?
146 |
147 | The code-coverage-extension slows down the phpspec tests, so we excluded it from the
148 | normal configuration file. Keep tests fast!
149 |
150 | ### How do I increase the verbosity of the `test`-script output?
151 |
152 | Run `composer test -- -v`.
153 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "karriere/code-quality",
3 | "description": "Code Quality scripts that can be run via Composer.",
4 | "keywords": ["code quality", "scripts"],
5 | "license": "Apache-2.0",
6 | "authors": [
7 | {
8 | "name": "Jakob Linskeseder",
9 | "email": "jakob.linskeseder@karriere.at",
10 | "role": "Maintainer"
11 | }
12 | ],
13 | "autoload": {
14 | "psr-4": {
15 | "Karriere\\CodeQuality\\": "src"
16 | }
17 | },
18 | "require": {
19 | "php": ">=7.1",
20 | "dg/bypass-finals": "^1.1",
21 | "friends-of-phpspec/phpspec-code-coverage": "^4.3",
22 | "karriere/phpspec-matchers": "^3.0",
23 | "phpmd/phpmd": "^2.6",
24 | "phpspec/phpspec": "^5.1 || ^6.0",
25 | "squizlabs/php_codesniffer": "^3.3",
26 | "symfony/console": "^3.2 || ^4.0",
27 | "symfony/process": "^3.2 || ^4.0"
28 | },
29 | "require-dev": {
30 | "composer/composer": "^1.6"
31 | },
32 | "scripts": {
33 | "test": "Karriere\\CodeQuality\\SpecificationTest::run",
34 | "coverage": "Karriere\\CodeQuality\\CodeCoverage::run",
35 | "lint": "Karriere\\CodeQuality\\CodeStyleChecker::run",
36 | "fix": "Karriere\\CodeQuality\\CodeStyleFixer::run",
37 | "md": "Karriere\\CodeQuality\\MessDetector::run"
38 | },
39 | "config": {
40 | "sort-packages": true
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "8a07fdf756e5f962c04eb8c0bdb4990a",
8 | "packages": [
9 | {
10 | "name": "dg/bypass-finals",
11 | "version": "v1.1.2",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/dg/bypass-finals.git",
15 | "reference": "101d0cc4b836d2a7745d745bc7b1fadcdcaf3b22"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/dg/bypass-finals/zipball/101d0cc4b836d2a7745d745bc7b1fadcdcaf3b22",
20 | "reference": "101d0cc4b836d2a7745d745bc7b1fadcdcaf3b22",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "php": ">=5.6"
25 | },
26 | "require-dev": {
27 | "nette/tester": "^2.0.2"
28 | },
29 | "type": "library",
30 | "autoload": {
31 | "classmap": [
32 | "src/"
33 | ]
34 | },
35 | "notification-url": "https://packagist.org/downloads/",
36 | "license": [
37 | "BSD-3-Clause",
38 | "GPL-2.0",
39 | "GPL-3.0"
40 | ],
41 | "authors": [
42 | {
43 | "name": "David Grudl",
44 | "homepage": "https://davidgrudl.com"
45 | }
46 | ],
47 | "description": "Removes final keyword from source code on-the-fly and allows mocking of final methods and classes",
48 | "keywords": [
49 | "finals",
50 | "mocking",
51 | "phpunit",
52 | "testing",
53 | "unit"
54 | ],
55 | "time": "2019-06-03T14:06:19+00:00"
56 | },
57 | {
58 | "name": "doctrine/instantiator",
59 | "version": "1.3.0",
60 | "source": {
61 | "type": "git",
62 | "url": "https://github.com/doctrine/instantiator.git",
63 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
64 | },
65 | "dist": {
66 | "type": "zip",
67 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
68 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
69 | "shasum": ""
70 | },
71 | "require": {
72 | "php": "^7.1"
73 | },
74 | "require-dev": {
75 | "doctrine/coding-standard": "^6.0",
76 | "ext-pdo": "*",
77 | "ext-phar": "*",
78 | "phpbench/phpbench": "^0.13",
79 | "phpstan/phpstan-phpunit": "^0.11",
80 | "phpstan/phpstan-shim": "^0.11",
81 | "phpunit/phpunit": "^7.0"
82 | },
83 | "type": "library",
84 | "extra": {
85 | "branch-alias": {
86 | "dev-master": "1.2.x-dev"
87 | }
88 | },
89 | "autoload": {
90 | "psr-4": {
91 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
92 | }
93 | },
94 | "notification-url": "https://packagist.org/downloads/",
95 | "license": [
96 | "MIT"
97 | ],
98 | "authors": [
99 | {
100 | "name": "Marco Pivetta",
101 | "email": "ocramius@gmail.com",
102 | "homepage": "http://ocramius.github.com/"
103 | }
104 | ],
105 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
106 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
107 | "keywords": [
108 | "constructor",
109 | "instantiate"
110 | ],
111 | "time": "2019-10-21T16:45:58+00:00"
112 | },
113 | {
114 | "name": "friends-of-phpspec/phpspec-code-coverage",
115 | "version": "v4.3.2",
116 | "source": {
117 | "type": "git",
118 | "url": "https://github.com/friends-of-phpspec/phpspec-code-coverage.git",
119 | "reference": "9a54302573094cc1b3bdca3cc78c58582130b254"
120 | },
121 | "dist": {
122 | "type": "zip",
123 | "url": "https://api.github.com/repos/friends-of-phpspec/phpspec-code-coverage/zipball/9a54302573094cc1b3bdca3cc78c58582130b254",
124 | "reference": "9a54302573094cc1b3bdca3cc78c58582130b254",
125 | "shasum": ""
126 | },
127 | "require": {
128 | "php": "^7.1",
129 | "phpspec/phpspec": "^4.2 || ^5.0 || ^6.0",
130 | "phpunit/php-code-coverage": "^5.0 || ^6.0 || ^7.0"
131 | },
132 | "require-dev": {
133 | "drupol/php-conventions": "^1",
134 | "scrutinizer/ocular": "^1"
135 | },
136 | "suggest": {
137 | "ext-pcov": "Install PCov extension to generate code coverage.",
138 | "ext-xdebug": "Install Xdebug to generate phpspec code coverage."
139 | },
140 | "type": "library",
141 | "extra": {
142 | "branch-alias": {
143 | "dev-master": "4.x-dev"
144 | }
145 | },
146 | "autoload": {
147 | "psr-4": {
148 | "FriendsOfPhpSpec\\PhpSpec\\CodeCoverage\\": "src/"
149 | },
150 | "files": [
151 | "src/bootstrap.php"
152 | ]
153 | },
154 | "notification-url": "https://packagist.org/downloads/",
155 | "license": [
156 | "MIT"
157 | ],
158 | "authors": [
159 | {
160 | "name": "ek9",
161 | "email": "dev@ek9.co",
162 | "homepage": "https://ek9.co"
163 | },
164 | {
165 | "name": "Henrik Bjornskov"
166 | },
167 | {
168 | "name": "Stéphane Hulard",
169 | "email": "s.hulard@chstudio.fr",
170 | "homepage": "https://chstudio.fr"
171 | },
172 | {
173 | "name": "Pol Dellaiera",
174 | "email": "pol.dellaiera@protonmail.com",
175 | "homepage": "https://not-a-number.io/"
176 | },
177 | {
178 | "name": "Jay Linski",
179 | "homepage": "https://twitter.com/jay_linski"
180 | }
181 | ],
182 | "description": "Generate Code Coverage reports for PhpSpec tests",
183 | "homepage": "https://github.com/friends-of-phpspec/phpspec-code-coverage",
184 | "keywords": [
185 | "code-coverage",
186 | "coverage",
187 | "phpspec",
188 | "report",
189 | "spec",
190 | "test",
191 | "tests"
192 | ],
193 | "time": "2019-11-12T10:27:45+00:00"
194 | },
195 | {
196 | "name": "karriere/phpspec-matchers",
197 | "version": "v3.0.0",
198 | "source": {
199 | "type": "git",
200 | "url": "https://github.com/karriereat/phpspec-matchers.git",
201 | "reference": "afb10c762511b2aa40d5bc4ae0f1fb778af6cbc8"
202 | },
203 | "dist": {
204 | "type": "zip",
205 | "url": "https://api.github.com/repos/karriereat/phpspec-matchers/zipball/afb10c762511b2aa40d5bc4ae0f1fb778af6cbc8",
206 | "reference": "afb10c762511b2aa40d5bc4ae0f1fb778af6cbc8",
207 | "shasum": ""
208 | },
209 | "require": {
210 | "php": ">=7.1",
211 | "phpspec/phpspec": "^5.0 || ^6.0"
212 | },
213 | "require-dev": {
214 | "friends-of-phpspec/phpspec-code-coverage": "^4.3",
215 | "squizlabs/php_codesniffer": "^3.5"
216 | },
217 | "type": "phpspec-extension",
218 | "autoload": {
219 | "psr-4": {
220 | "Karriere\\PhpSpecMatchers\\": "src/"
221 | }
222 | },
223 | "notification-url": "https://packagist.org/downloads/",
224 | "license": [
225 | "Apache-2.0"
226 | ],
227 | "authors": [
228 | {
229 | "name": "Johannes Pichler",
230 | "email": "johannes.pichler@karriere.at"
231 | }
232 | ],
233 | "description": "phpspec extension with a collection of additional matchers",
234 | "homepage": "https://github.com/karriereat/phpspec-matchers",
235 | "keywords": [
236 | "TDD",
237 | "json",
238 | "matchers",
239 | "phpspec"
240 | ],
241 | "time": "2019-11-18T10:42:43+00:00"
242 | },
243 | {
244 | "name": "pdepend/pdepend",
245 | "version": "2.5.2",
246 | "source": {
247 | "type": "git",
248 | "url": "https://github.com/pdepend/pdepend.git",
249 | "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239"
250 | },
251 | "dist": {
252 | "type": "zip",
253 | "url": "https://api.github.com/repos/pdepend/pdepend/zipball/9daf26d0368d4a12bed1cacae1a9f3a6f0adf239",
254 | "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239",
255 | "shasum": ""
256 | },
257 | "require": {
258 | "php": ">=5.3.7",
259 | "symfony/config": "^2.3.0|^3|^4",
260 | "symfony/dependency-injection": "^2.3.0|^3|^4",
261 | "symfony/filesystem": "^2.3.0|^3|^4"
262 | },
263 | "require-dev": {
264 | "phpunit/phpunit": "^4.8|^5.7",
265 | "squizlabs/php_codesniffer": "^2.0.0"
266 | },
267 | "bin": [
268 | "src/bin/pdepend"
269 | ],
270 | "type": "library",
271 | "autoload": {
272 | "psr-4": {
273 | "PDepend\\": "src/main/php/PDepend"
274 | }
275 | },
276 | "notification-url": "https://packagist.org/downloads/",
277 | "license": [
278 | "BSD-3-Clause"
279 | ],
280 | "description": "Official version of pdepend to be handled with Composer",
281 | "time": "2017-12-13T13:21:38+00:00"
282 | },
283 | {
284 | "name": "phpdocumentor/reflection-common",
285 | "version": "2.0.0",
286 | "source": {
287 | "type": "git",
288 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
289 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a"
290 | },
291 | "dist": {
292 | "type": "zip",
293 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a",
294 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a",
295 | "shasum": ""
296 | },
297 | "require": {
298 | "php": ">=7.1"
299 | },
300 | "require-dev": {
301 | "phpunit/phpunit": "~6"
302 | },
303 | "type": "library",
304 | "extra": {
305 | "branch-alias": {
306 | "dev-master": "2.x-dev"
307 | }
308 | },
309 | "autoload": {
310 | "psr-4": {
311 | "phpDocumentor\\Reflection\\": "src/"
312 | }
313 | },
314 | "notification-url": "https://packagist.org/downloads/",
315 | "license": [
316 | "MIT"
317 | ],
318 | "authors": [
319 | {
320 | "name": "Jaap van Otterdijk",
321 | "email": "opensource@ijaap.nl"
322 | }
323 | ],
324 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
325 | "homepage": "http://www.phpdoc.org",
326 | "keywords": [
327 | "FQSEN",
328 | "phpDocumentor",
329 | "phpdoc",
330 | "reflection",
331 | "static analysis"
332 | ],
333 | "time": "2018-08-07T13:53:10+00:00"
334 | },
335 | {
336 | "name": "phpdocumentor/reflection-docblock",
337 | "version": "4.3.2",
338 | "source": {
339 | "type": "git",
340 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
341 | "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e"
342 | },
343 | "dist": {
344 | "type": "zip",
345 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e",
346 | "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e",
347 | "shasum": ""
348 | },
349 | "require": {
350 | "php": "^7.0",
351 | "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
352 | "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
353 | "webmozart/assert": "^1.0"
354 | },
355 | "require-dev": {
356 | "doctrine/instantiator": "^1.0.5",
357 | "mockery/mockery": "^1.0",
358 | "phpunit/phpunit": "^6.4"
359 | },
360 | "type": "library",
361 | "extra": {
362 | "branch-alias": {
363 | "dev-master": "4.x-dev"
364 | }
365 | },
366 | "autoload": {
367 | "psr-4": {
368 | "phpDocumentor\\Reflection\\": [
369 | "src/"
370 | ]
371 | }
372 | },
373 | "notification-url": "https://packagist.org/downloads/",
374 | "license": [
375 | "MIT"
376 | ],
377 | "authors": [
378 | {
379 | "name": "Mike van Riel",
380 | "email": "me@mikevanriel.com"
381 | }
382 | ],
383 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
384 | "time": "2019-09-12T14:27:41+00:00"
385 | },
386 | {
387 | "name": "phpdocumentor/type-resolver",
388 | "version": "1.0.1",
389 | "source": {
390 | "type": "git",
391 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
392 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
393 | },
394 | "dist": {
395 | "type": "zip",
396 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
397 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
398 | "shasum": ""
399 | },
400 | "require": {
401 | "php": "^7.1",
402 | "phpdocumentor/reflection-common": "^2.0"
403 | },
404 | "require-dev": {
405 | "ext-tokenizer": "^7.1",
406 | "mockery/mockery": "~1",
407 | "phpunit/phpunit": "^7.0"
408 | },
409 | "type": "library",
410 | "extra": {
411 | "branch-alias": {
412 | "dev-master": "1.x-dev"
413 | }
414 | },
415 | "autoload": {
416 | "psr-4": {
417 | "phpDocumentor\\Reflection\\": "src"
418 | }
419 | },
420 | "notification-url": "https://packagist.org/downloads/",
421 | "license": [
422 | "MIT"
423 | ],
424 | "authors": [
425 | {
426 | "name": "Mike van Riel",
427 | "email": "me@mikevanriel.com"
428 | }
429 | ],
430 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
431 | "time": "2019-08-22T18:11:29+00:00"
432 | },
433 | {
434 | "name": "phpmd/phpmd",
435 | "version": "2.7.0",
436 | "source": {
437 | "type": "git",
438 | "url": "https://github.com/phpmd/phpmd.git",
439 | "reference": "a05a999c644f4bc9a204846017db7bb7809fbe4c"
440 | },
441 | "dist": {
442 | "type": "zip",
443 | "url": "https://api.github.com/repos/phpmd/phpmd/zipball/a05a999c644f4bc9a204846017db7bb7809fbe4c",
444 | "reference": "a05a999c644f4bc9a204846017db7bb7809fbe4c",
445 | "shasum": ""
446 | },
447 | "require": {
448 | "ext-xml": "*",
449 | "pdepend/pdepend": "^2.5",
450 | "php": ">=5.3.9"
451 | },
452 | "require-dev": {
453 | "gregwar/rst": "^1.0",
454 | "mikey179/vfsstream": "^1.6.4",
455 | "phpunit/phpunit": "^4.8.36 || ^5.7.27",
456 | "squizlabs/php_codesniffer": "^2.0"
457 | },
458 | "bin": [
459 | "src/bin/phpmd"
460 | ],
461 | "type": "library",
462 | "autoload": {
463 | "psr-0": {
464 | "PHPMD\\": "src/main/php"
465 | }
466 | },
467 | "notification-url": "https://packagist.org/downloads/",
468 | "license": [
469 | "BSD-3-Clause"
470 | ],
471 | "authors": [
472 | {
473 | "name": "Manuel Pichler",
474 | "email": "github@manuel-pichler.de",
475 | "homepage": "https://github.com/manuelpichler",
476 | "role": "Project Founder"
477 | },
478 | {
479 | "name": "Marc Würth",
480 | "email": "ravage@bluewin.ch",
481 | "homepage": "https://github.com/ravage84",
482 | "role": "Project Maintainer"
483 | },
484 | {
485 | "name": "Other contributors",
486 | "homepage": "https://github.com/phpmd/phpmd/graphs/contributors",
487 | "role": "Contributors"
488 | }
489 | ],
490 | "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.",
491 | "homepage": "https://phpmd.org/",
492 | "keywords": [
493 | "mess detection",
494 | "mess detector",
495 | "pdepend",
496 | "phpmd",
497 | "pmd"
498 | ],
499 | "time": "2019-07-30T21:13:32+00:00"
500 | },
501 | {
502 | "name": "phpspec/php-diff",
503 | "version": "v1.1.0",
504 | "source": {
505 | "type": "git",
506 | "url": "https://github.com/phpspec/php-diff.git",
507 | "reference": "0464787bfa7cd13576c5a1e318709768798bec6a"
508 | },
509 | "dist": {
510 | "type": "zip",
511 | "url": "https://api.github.com/repos/phpspec/php-diff/zipball/0464787bfa7cd13576c5a1e318709768798bec6a",
512 | "reference": "0464787bfa7cd13576c5a1e318709768798bec6a",
513 | "shasum": ""
514 | },
515 | "type": "library",
516 | "extra": {
517 | "branch-alias": {
518 | "dev-master": "1.0.x-dev"
519 | }
520 | },
521 | "autoload": {
522 | "psr-0": {
523 | "Diff": "lib/"
524 | }
525 | },
526 | "notification-url": "https://packagist.org/downloads/",
527 | "license": [
528 | "BSD-3-Clause"
529 | ],
530 | "authors": [
531 | {
532 | "name": "Chris Boulton",
533 | "homepage": "http://github.com/chrisboulton"
534 | }
535 | ],
536 | "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).",
537 | "time": "2016-04-07T12:29:16+00:00"
538 | },
539 | {
540 | "name": "phpspec/phpspec",
541 | "version": "5.1.2",
542 | "source": {
543 | "type": "git",
544 | "url": "https://github.com/phpspec/phpspec.git",
545 | "reference": "ff4119650a76de25eb674530547f1924082d3703"
546 | },
547 | "dist": {
548 | "type": "zip",
549 | "url": "https://api.github.com/repos/phpspec/phpspec/zipball/ff4119650a76de25eb674530547f1924082d3703",
550 | "reference": "ff4119650a76de25eb674530547f1924082d3703",
551 | "shasum": ""
552 | },
553 | "require": {
554 | "doctrine/instantiator": "^1.0.5",
555 | "ext-tokenizer": "*",
556 | "php": "^7.1, <7.4",
557 | "phpspec/php-diff": "^1.0.0",
558 | "phpspec/prophecy": "^1.7",
559 | "sebastian/exporter": "^1.0 || ^2.0 || ^3.0",
560 | "symfony/console": "^3.4 || ^4.0",
561 | "symfony/event-dispatcher": "^3.4 || ^4.0",
562 | "symfony/finder": "^3.4 || ^4.0",
563 | "symfony/process": "^3.4 || ^4.0",
564 | "symfony/yaml": "^3.4 || ^4.0"
565 | },
566 | "require-dev": {
567 | "behat/behat": "^3.3",
568 | "phpunit/phpunit": "^5.7 || ^6.0",
569 | "symfony/filesystem": "^3.4 || ^4.0"
570 | },
571 | "suggest": {
572 | "phpspec/nyan-formatters": "Adds Nyan formatters"
573 | },
574 | "bin": [
575 | "bin/phpspec"
576 | ],
577 | "type": "library",
578 | "extra": {
579 | "branch-alias": {
580 | "dev-master": "5.1.x-dev"
581 | }
582 | },
583 | "autoload": {
584 | "psr-0": {
585 | "PhpSpec": "src/"
586 | }
587 | },
588 | "notification-url": "https://packagist.org/downloads/",
589 | "license": [
590 | "MIT"
591 | ],
592 | "authors": [
593 | {
594 | "name": "Konstantin Kudryashov",
595 | "email": "ever.zet@gmail.com",
596 | "homepage": "http://everzet.com"
597 | },
598 | {
599 | "name": "Marcello Duarte",
600 | "homepage": "http://marcelloduarte.net/"
601 | },
602 | {
603 | "name": "Ciaran McNulty",
604 | "homepage": "https://ciaranmcnulty.com/"
605 | }
606 | ],
607 | "description": "Specification-oriented BDD framework for PHP 7.1+",
608 | "homepage": "http://phpspec.net/",
609 | "keywords": [
610 | "BDD",
611 | "SpecBDD",
612 | "TDD",
613 | "spec",
614 | "specification",
615 | "testing",
616 | "tests"
617 | ],
618 | "time": "2019-10-02T09:45:39+00:00"
619 | },
620 | {
621 | "name": "phpspec/prophecy",
622 | "version": "1.9.0",
623 | "source": {
624 | "type": "git",
625 | "url": "https://github.com/phpspec/prophecy.git",
626 | "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203"
627 | },
628 | "dist": {
629 | "type": "zip",
630 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203",
631 | "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203",
632 | "shasum": ""
633 | },
634 | "require": {
635 | "doctrine/instantiator": "^1.0.2",
636 | "php": "^5.3|^7.0",
637 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
638 | "sebastian/comparator": "^1.1|^2.0|^3.0",
639 | "sebastian/recursion-context": "^1.0|^2.0|^3.0"
640 | },
641 | "require-dev": {
642 | "phpspec/phpspec": "^2.5|^3.2",
643 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
644 | },
645 | "type": "library",
646 | "extra": {
647 | "branch-alias": {
648 | "dev-master": "1.8.x-dev"
649 | }
650 | },
651 | "autoload": {
652 | "psr-4": {
653 | "Prophecy\\": "src/Prophecy"
654 | }
655 | },
656 | "notification-url": "https://packagist.org/downloads/",
657 | "license": [
658 | "MIT"
659 | ],
660 | "authors": [
661 | {
662 | "name": "Konstantin Kudryashov",
663 | "email": "ever.zet@gmail.com",
664 | "homepage": "http://everzet.com"
665 | },
666 | {
667 | "name": "Marcello Duarte",
668 | "email": "marcello.duarte@gmail.com"
669 | }
670 | ],
671 | "description": "Highly opinionated mocking framework for PHP 5.3+",
672 | "homepage": "https://github.com/phpspec/prophecy",
673 | "keywords": [
674 | "Double",
675 | "Dummy",
676 | "fake",
677 | "mock",
678 | "spy",
679 | "stub"
680 | ],
681 | "time": "2019-10-03T11:07:50+00:00"
682 | },
683 | {
684 | "name": "phpunit/php-code-coverage",
685 | "version": "6.1.4",
686 | "source": {
687 | "type": "git",
688 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
689 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d"
690 | },
691 | "dist": {
692 | "type": "zip",
693 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
694 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
695 | "shasum": ""
696 | },
697 | "require": {
698 | "ext-dom": "*",
699 | "ext-xmlwriter": "*",
700 | "php": "^7.1",
701 | "phpunit/php-file-iterator": "^2.0",
702 | "phpunit/php-text-template": "^1.2.1",
703 | "phpunit/php-token-stream": "^3.0",
704 | "sebastian/code-unit-reverse-lookup": "^1.0.1",
705 | "sebastian/environment": "^3.1 || ^4.0",
706 | "sebastian/version": "^2.0.1",
707 | "theseer/tokenizer": "^1.1"
708 | },
709 | "require-dev": {
710 | "phpunit/phpunit": "^7.0"
711 | },
712 | "suggest": {
713 | "ext-xdebug": "^2.6.0"
714 | },
715 | "type": "library",
716 | "extra": {
717 | "branch-alias": {
718 | "dev-master": "6.1-dev"
719 | }
720 | },
721 | "autoload": {
722 | "classmap": [
723 | "src/"
724 | ]
725 | },
726 | "notification-url": "https://packagist.org/downloads/",
727 | "license": [
728 | "BSD-3-Clause"
729 | ],
730 | "authors": [
731 | {
732 | "name": "Sebastian Bergmann",
733 | "email": "sebastian@phpunit.de",
734 | "role": "lead"
735 | }
736 | ],
737 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
738 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
739 | "keywords": [
740 | "coverage",
741 | "testing",
742 | "xunit"
743 | ],
744 | "time": "2018-10-31T16:06:48+00:00"
745 | },
746 | {
747 | "name": "phpunit/php-file-iterator",
748 | "version": "2.0.2",
749 | "source": {
750 | "type": "git",
751 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
752 | "reference": "050bedf145a257b1ff02746c31894800e5122946"
753 | },
754 | "dist": {
755 | "type": "zip",
756 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946",
757 | "reference": "050bedf145a257b1ff02746c31894800e5122946",
758 | "shasum": ""
759 | },
760 | "require": {
761 | "php": "^7.1"
762 | },
763 | "require-dev": {
764 | "phpunit/phpunit": "^7.1"
765 | },
766 | "type": "library",
767 | "extra": {
768 | "branch-alias": {
769 | "dev-master": "2.0.x-dev"
770 | }
771 | },
772 | "autoload": {
773 | "classmap": [
774 | "src/"
775 | ]
776 | },
777 | "notification-url": "https://packagist.org/downloads/",
778 | "license": [
779 | "BSD-3-Clause"
780 | ],
781 | "authors": [
782 | {
783 | "name": "Sebastian Bergmann",
784 | "email": "sebastian@phpunit.de",
785 | "role": "lead"
786 | }
787 | ],
788 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
789 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
790 | "keywords": [
791 | "filesystem",
792 | "iterator"
793 | ],
794 | "time": "2018-09-13T20:33:42+00:00"
795 | },
796 | {
797 | "name": "phpunit/php-text-template",
798 | "version": "1.2.1",
799 | "source": {
800 | "type": "git",
801 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
802 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
803 | },
804 | "dist": {
805 | "type": "zip",
806 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
807 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
808 | "shasum": ""
809 | },
810 | "require": {
811 | "php": ">=5.3.3"
812 | },
813 | "type": "library",
814 | "autoload": {
815 | "classmap": [
816 | "src/"
817 | ]
818 | },
819 | "notification-url": "https://packagist.org/downloads/",
820 | "license": [
821 | "BSD-3-Clause"
822 | ],
823 | "authors": [
824 | {
825 | "name": "Sebastian Bergmann",
826 | "email": "sebastian@phpunit.de",
827 | "role": "lead"
828 | }
829 | ],
830 | "description": "Simple template engine.",
831 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
832 | "keywords": [
833 | "template"
834 | ],
835 | "time": "2015-06-21T13:50:34+00:00"
836 | },
837 | {
838 | "name": "phpunit/php-token-stream",
839 | "version": "3.1.1",
840 | "source": {
841 | "type": "git",
842 | "url": "https://github.com/sebastianbergmann/php-token-stream.git",
843 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff"
844 | },
845 | "dist": {
846 | "type": "zip",
847 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff",
848 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff",
849 | "shasum": ""
850 | },
851 | "require": {
852 | "ext-tokenizer": "*",
853 | "php": "^7.1"
854 | },
855 | "require-dev": {
856 | "phpunit/phpunit": "^7.0"
857 | },
858 | "type": "library",
859 | "extra": {
860 | "branch-alias": {
861 | "dev-master": "3.1-dev"
862 | }
863 | },
864 | "autoload": {
865 | "classmap": [
866 | "src/"
867 | ]
868 | },
869 | "notification-url": "https://packagist.org/downloads/",
870 | "license": [
871 | "BSD-3-Clause"
872 | ],
873 | "authors": [
874 | {
875 | "name": "Sebastian Bergmann",
876 | "email": "sebastian@phpunit.de"
877 | }
878 | ],
879 | "description": "Wrapper around PHP's tokenizer extension.",
880 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
881 | "keywords": [
882 | "tokenizer"
883 | ],
884 | "time": "2019-09-17T06:23:10+00:00"
885 | },
886 | {
887 | "name": "psr/container",
888 | "version": "1.0.0",
889 | "source": {
890 | "type": "git",
891 | "url": "https://github.com/php-fig/container.git",
892 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
893 | },
894 | "dist": {
895 | "type": "zip",
896 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
897 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
898 | "shasum": ""
899 | },
900 | "require": {
901 | "php": ">=5.3.0"
902 | },
903 | "type": "library",
904 | "extra": {
905 | "branch-alias": {
906 | "dev-master": "1.0.x-dev"
907 | }
908 | },
909 | "autoload": {
910 | "psr-4": {
911 | "Psr\\Container\\": "src/"
912 | }
913 | },
914 | "notification-url": "https://packagist.org/downloads/",
915 | "license": [
916 | "MIT"
917 | ],
918 | "authors": [
919 | {
920 | "name": "PHP-FIG",
921 | "homepage": "http://www.php-fig.org/"
922 | }
923 | ],
924 | "description": "Common Container Interface (PHP FIG PSR-11)",
925 | "homepage": "https://github.com/php-fig/container",
926 | "keywords": [
927 | "PSR-11",
928 | "container",
929 | "container-interface",
930 | "container-interop",
931 | "psr"
932 | ],
933 | "time": "2017-02-14T16:28:37+00:00"
934 | },
935 | {
936 | "name": "sebastian/code-unit-reverse-lookup",
937 | "version": "1.0.1",
938 | "source": {
939 | "type": "git",
940 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
941 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
942 | },
943 | "dist": {
944 | "type": "zip",
945 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
946 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
947 | "shasum": ""
948 | },
949 | "require": {
950 | "php": "^5.6 || ^7.0"
951 | },
952 | "require-dev": {
953 | "phpunit/phpunit": "^5.7 || ^6.0"
954 | },
955 | "type": "library",
956 | "extra": {
957 | "branch-alias": {
958 | "dev-master": "1.0.x-dev"
959 | }
960 | },
961 | "autoload": {
962 | "classmap": [
963 | "src/"
964 | ]
965 | },
966 | "notification-url": "https://packagist.org/downloads/",
967 | "license": [
968 | "BSD-3-Clause"
969 | ],
970 | "authors": [
971 | {
972 | "name": "Sebastian Bergmann",
973 | "email": "sebastian@phpunit.de"
974 | }
975 | ],
976 | "description": "Looks up which function or method a line of code belongs to",
977 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
978 | "time": "2017-03-04T06:30:41+00:00"
979 | },
980 | {
981 | "name": "sebastian/comparator",
982 | "version": "3.0.2",
983 | "source": {
984 | "type": "git",
985 | "url": "https://github.com/sebastianbergmann/comparator.git",
986 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da"
987 | },
988 | "dist": {
989 | "type": "zip",
990 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
991 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
992 | "shasum": ""
993 | },
994 | "require": {
995 | "php": "^7.1",
996 | "sebastian/diff": "^3.0",
997 | "sebastian/exporter": "^3.1"
998 | },
999 | "require-dev": {
1000 | "phpunit/phpunit": "^7.1"
1001 | },
1002 | "type": "library",
1003 | "extra": {
1004 | "branch-alias": {
1005 | "dev-master": "3.0-dev"
1006 | }
1007 | },
1008 | "autoload": {
1009 | "classmap": [
1010 | "src/"
1011 | ]
1012 | },
1013 | "notification-url": "https://packagist.org/downloads/",
1014 | "license": [
1015 | "BSD-3-Clause"
1016 | ],
1017 | "authors": [
1018 | {
1019 | "name": "Jeff Welch",
1020 | "email": "whatthejeff@gmail.com"
1021 | },
1022 | {
1023 | "name": "Volker Dusch",
1024 | "email": "github@wallbash.com"
1025 | },
1026 | {
1027 | "name": "Bernhard Schussek",
1028 | "email": "bschussek@2bepublished.at"
1029 | },
1030 | {
1031 | "name": "Sebastian Bergmann",
1032 | "email": "sebastian@phpunit.de"
1033 | }
1034 | ],
1035 | "description": "Provides the functionality to compare PHP values for equality",
1036 | "homepage": "https://github.com/sebastianbergmann/comparator",
1037 | "keywords": [
1038 | "comparator",
1039 | "compare",
1040 | "equality"
1041 | ],
1042 | "time": "2018-07-12T15:12:46+00:00"
1043 | },
1044 | {
1045 | "name": "sebastian/diff",
1046 | "version": "3.0.2",
1047 | "source": {
1048 | "type": "git",
1049 | "url": "https://github.com/sebastianbergmann/diff.git",
1050 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29"
1051 | },
1052 | "dist": {
1053 | "type": "zip",
1054 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
1055 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
1056 | "shasum": ""
1057 | },
1058 | "require": {
1059 | "php": "^7.1"
1060 | },
1061 | "require-dev": {
1062 | "phpunit/phpunit": "^7.5 || ^8.0",
1063 | "symfony/process": "^2 || ^3.3 || ^4"
1064 | },
1065 | "type": "library",
1066 | "extra": {
1067 | "branch-alias": {
1068 | "dev-master": "3.0-dev"
1069 | }
1070 | },
1071 | "autoload": {
1072 | "classmap": [
1073 | "src/"
1074 | ]
1075 | },
1076 | "notification-url": "https://packagist.org/downloads/",
1077 | "license": [
1078 | "BSD-3-Clause"
1079 | ],
1080 | "authors": [
1081 | {
1082 | "name": "Kore Nordmann",
1083 | "email": "mail@kore-nordmann.de"
1084 | },
1085 | {
1086 | "name": "Sebastian Bergmann",
1087 | "email": "sebastian@phpunit.de"
1088 | }
1089 | ],
1090 | "description": "Diff implementation",
1091 | "homepage": "https://github.com/sebastianbergmann/diff",
1092 | "keywords": [
1093 | "diff",
1094 | "udiff",
1095 | "unidiff",
1096 | "unified diff"
1097 | ],
1098 | "time": "2019-02-04T06:01:07+00:00"
1099 | },
1100 | {
1101 | "name": "sebastian/environment",
1102 | "version": "4.2.2",
1103 | "source": {
1104 | "type": "git",
1105 | "url": "https://github.com/sebastianbergmann/environment.git",
1106 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404"
1107 | },
1108 | "dist": {
1109 | "type": "zip",
1110 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404",
1111 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404",
1112 | "shasum": ""
1113 | },
1114 | "require": {
1115 | "php": "^7.1"
1116 | },
1117 | "require-dev": {
1118 | "phpunit/phpunit": "^7.5"
1119 | },
1120 | "suggest": {
1121 | "ext-posix": "*"
1122 | },
1123 | "type": "library",
1124 | "extra": {
1125 | "branch-alias": {
1126 | "dev-master": "4.2-dev"
1127 | }
1128 | },
1129 | "autoload": {
1130 | "classmap": [
1131 | "src/"
1132 | ]
1133 | },
1134 | "notification-url": "https://packagist.org/downloads/",
1135 | "license": [
1136 | "BSD-3-Clause"
1137 | ],
1138 | "authors": [
1139 | {
1140 | "name": "Sebastian Bergmann",
1141 | "email": "sebastian@phpunit.de"
1142 | }
1143 | ],
1144 | "description": "Provides functionality to handle HHVM/PHP environments",
1145 | "homepage": "http://www.github.com/sebastianbergmann/environment",
1146 | "keywords": [
1147 | "Xdebug",
1148 | "environment",
1149 | "hhvm"
1150 | ],
1151 | "time": "2019-05-05T09:05:15+00:00"
1152 | },
1153 | {
1154 | "name": "sebastian/exporter",
1155 | "version": "3.1.2",
1156 | "source": {
1157 | "type": "git",
1158 | "url": "https://github.com/sebastianbergmann/exporter.git",
1159 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
1160 | },
1161 | "dist": {
1162 | "type": "zip",
1163 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
1164 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
1165 | "shasum": ""
1166 | },
1167 | "require": {
1168 | "php": "^7.0",
1169 | "sebastian/recursion-context": "^3.0"
1170 | },
1171 | "require-dev": {
1172 | "ext-mbstring": "*",
1173 | "phpunit/phpunit": "^6.0"
1174 | },
1175 | "type": "library",
1176 | "extra": {
1177 | "branch-alias": {
1178 | "dev-master": "3.1.x-dev"
1179 | }
1180 | },
1181 | "autoload": {
1182 | "classmap": [
1183 | "src/"
1184 | ]
1185 | },
1186 | "notification-url": "https://packagist.org/downloads/",
1187 | "license": [
1188 | "BSD-3-Clause"
1189 | ],
1190 | "authors": [
1191 | {
1192 | "name": "Sebastian Bergmann",
1193 | "email": "sebastian@phpunit.de"
1194 | },
1195 | {
1196 | "name": "Jeff Welch",
1197 | "email": "whatthejeff@gmail.com"
1198 | },
1199 | {
1200 | "name": "Volker Dusch",
1201 | "email": "github@wallbash.com"
1202 | },
1203 | {
1204 | "name": "Adam Harvey",
1205 | "email": "aharvey@php.net"
1206 | },
1207 | {
1208 | "name": "Bernhard Schussek",
1209 | "email": "bschussek@gmail.com"
1210 | }
1211 | ],
1212 | "description": "Provides the functionality to export PHP variables for visualization",
1213 | "homepage": "http://www.github.com/sebastianbergmann/exporter",
1214 | "keywords": [
1215 | "export",
1216 | "exporter"
1217 | ],
1218 | "time": "2019-09-14T09:02:43+00:00"
1219 | },
1220 | {
1221 | "name": "sebastian/recursion-context",
1222 | "version": "3.0.0",
1223 | "source": {
1224 | "type": "git",
1225 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
1226 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
1227 | },
1228 | "dist": {
1229 | "type": "zip",
1230 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
1231 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
1232 | "shasum": ""
1233 | },
1234 | "require": {
1235 | "php": "^7.0"
1236 | },
1237 | "require-dev": {
1238 | "phpunit/phpunit": "^6.0"
1239 | },
1240 | "type": "library",
1241 | "extra": {
1242 | "branch-alias": {
1243 | "dev-master": "3.0.x-dev"
1244 | }
1245 | },
1246 | "autoload": {
1247 | "classmap": [
1248 | "src/"
1249 | ]
1250 | },
1251 | "notification-url": "https://packagist.org/downloads/",
1252 | "license": [
1253 | "BSD-3-Clause"
1254 | ],
1255 | "authors": [
1256 | {
1257 | "name": "Jeff Welch",
1258 | "email": "whatthejeff@gmail.com"
1259 | },
1260 | {
1261 | "name": "Sebastian Bergmann",
1262 | "email": "sebastian@phpunit.de"
1263 | },
1264 | {
1265 | "name": "Adam Harvey",
1266 | "email": "aharvey@php.net"
1267 | }
1268 | ],
1269 | "description": "Provides functionality to recursively process PHP variables",
1270 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
1271 | "time": "2017-03-03T06:23:57+00:00"
1272 | },
1273 | {
1274 | "name": "sebastian/version",
1275 | "version": "2.0.1",
1276 | "source": {
1277 | "type": "git",
1278 | "url": "https://github.com/sebastianbergmann/version.git",
1279 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
1280 | },
1281 | "dist": {
1282 | "type": "zip",
1283 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
1284 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
1285 | "shasum": ""
1286 | },
1287 | "require": {
1288 | "php": ">=5.6"
1289 | },
1290 | "type": "library",
1291 | "extra": {
1292 | "branch-alias": {
1293 | "dev-master": "2.0.x-dev"
1294 | }
1295 | },
1296 | "autoload": {
1297 | "classmap": [
1298 | "src/"
1299 | ]
1300 | },
1301 | "notification-url": "https://packagist.org/downloads/",
1302 | "license": [
1303 | "BSD-3-Clause"
1304 | ],
1305 | "authors": [
1306 | {
1307 | "name": "Sebastian Bergmann",
1308 | "email": "sebastian@phpunit.de",
1309 | "role": "lead"
1310 | }
1311 | ],
1312 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
1313 | "homepage": "https://github.com/sebastianbergmann/version",
1314 | "time": "2016-10-03T07:35:21+00:00"
1315 | },
1316 | {
1317 | "name": "squizlabs/php_codesniffer",
1318 | "version": "3.5.2",
1319 | "source": {
1320 | "type": "git",
1321 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
1322 | "reference": "65b12cdeaaa6cd276d4c3033a95b9b88b12701e7"
1323 | },
1324 | "dist": {
1325 | "type": "zip",
1326 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/65b12cdeaaa6cd276d4c3033a95b9b88b12701e7",
1327 | "reference": "65b12cdeaaa6cd276d4c3033a95b9b88b12701e7",
1328 | "shasum": ""
1329 | },
1330 | "require": {
1331 | "ext-simplexml": "*",
1332 | "ext-tokenizer": "*",
1333 | "ext-xmlwriter": "*",
1334 | "php": ">=5.4.0"
1335 | },
1336 | "require-dev": {
1337 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
1338 | },
1339 | "bin": [
1340 | "bin/phpcs",
1341 | "bin/phpcbf"
1342 | ],
1343 | "type": "library",
1344 | "extra": {
1345 | "branch-alias": {
1346 | "dev-master": "3.x-dev"
1347 | }
1348 | },
1349 | "notification-url": "https://packagist.org/downloads/",
1350 | "license": [
1351 | "BSD-3-Clause"
1352 | ],
1353 | "authors": [
1354 | {
1355 | "name": "Greg Sherwood",
1356 | "role": "lead"
1357 | }
1358 | ],
1359 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
1360 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
1361 | "keywords": [
1362 | "phpcs",
1363 | "standards"
1364 | ],
1365 | "time": "2019-10-28T04:36:32+00:00"
1366 | },
1367 | {
1368 | "name": "symfony/config",
1369 | "version": "v4.3.8",
1370 | "source": {
1371 | "type": "git",
1372 | "url": "https://github.com/symfony/config.git",
1373 | "reference": "8267214841c44d315a55242ea867684eb43c42ce"
1374 | },
1375 | "dist": {
1376 | "type": "zip",
1377 | "url": "https://api.github.com/repos/symfony/config/zipball/8267214841c44d315a55242ea867684eb43c42ce",
1378 | "reference": "8267214841c44d315a55242ea867684eb43c42ce",
1379 | "shasum": ""
1380 | },
1381 | "require": {
1382 | "php": "^7.1.3",
1383 | "symfony/filesystem": "~3.4|~4.0",
1384 | "symfony/polyfill-ctype": "~1.8"
1385 | },
1386 | "conflict": {
1387 | "symfony/finder": "<3.4"
1388 | },
1389 | "require-dev": {
1390 | "symfony/dependency-injection": "~3.4|~4.0",
1391 | "symfony/event-dispatcher": "~3.4|~4.0",
1392 | "symfony/finder": "~3.4|~4.0",
1393 | "symfony/messenger": "~4.1",
1394 | "symfony/yaml": "~3.4|~4.0"
1395 | },
1396 | "suggest": {
1397 | "symfony/yaml": "To use the yaml reference dumper"
1398 | },
1399 | "type": "library",
1400 | "extra": {
1401 | "branch-alias": {
1402 | "dev-master": "4.3-dev"
1403 | }
1404 | },
1405 | "autoload": {
1406 | "psr-4": {
1407 | "Symfony\\Component\\Config\\": ""
1408 | },
1409 | "exclude-from-classmap": [
1410 | "/Tests/"
1411 | ]
1412 | },
1413 | "notification-url": "https://packagist.org/downloads/",
1414 | "license": [
1415 | "MIT"
1416 | ],
1417 | "authors": [
1418 | {
1419 | "name": "Fabien Potencier",
1420 | "email": "fabien@symfony.com"
1421 | },
1422 | {
1423 | "name": "Symfony Community",
1424 | "homepage": "https://symfony.com/contributors"
1425 | }
1426 | ],
1427 | "description": "Symfony Config Component",
1428 | "homepage": "https://symfony.com",
1429 | "time": "2019-11-08T08:31:27+00:00"
1430 | },
1431 | {
1432 | "name": "symfony/console",
1433 | "version": "v4.3.8",
1434 | "source": {
1435 | "type": "git",
1436 | "url": "https://github.com/symfony/console.git",
1437 | "reference": "831424efae0a1fe6642784bd52aae14ece6538e6"
1438 | },
1439 | "dist": {
1440 | "type": "zip",
1441 | "url": "https://api.github.com/repos/symfony/console/zipball/831424efae0a1fe6642784bd52aae14ece6538e6",
1442 | "reference": "831424efae0a1fe6642784bd52aae14ece6538e6",
1443 | "shasum": ""
1444 | },
1445 | "require": {
1446 | "php": "^7.1.3",
1447 | "symfony/polyfill-mbstring": "~1.0",
1448 | "symfony/polyfill-php73": "^1.8",
1449 | "symfony/service-contracts": "^1.1"
1450 | },
1451 | "conflict": {
1452 | "symfony/dependency-injection": "<3.4",
1453 | "symfony/event-dispatcher": "<4.3",
1454 | "symfony/process": "<3.3"
1455 | },
1456 | "provide": {
1457 | "psr/log-implementation": "1.0"
1458 | },
1459 | "require-dev": {
1460 | "psr/log": "~1.0",
1461 | "symfony/config": "~3.4|~4.0",
1462 | "symfony/dependency-injection": "~3.4|~4.0",
1463 | "symfony/event-dispatcher": "^4.3",
1464 | "symfony/lock": "~3.4|~4.0",
1465 | "symfony/process": "~3.4|~4.0",
1466 | "symfony/var-dumper": "^4.3"
1467 | },
1468 | "suggest": {
1469 | "psr/log": "For using the console logger",
1470 | "symfony/event-dispatcher": "",
1471 | "symfony/lock": "",
1472 | "symfony/process": ""
1473 | },
1474 | "type": "library",
1475 | "extra": {
1476 | "branch-alias": {
1477 | "dev-master": "4.3-dev"
1478 | }
1479 | },
1480 | "autoload": {
1481 | "psr-4": {
1482 | "Symfony\\Component\\Console\\": ""
1483 | },
1484 | "exclude-from-classmap": [
1485 | "/Tests/"
1486 | ]
1487 | },
1488 | "notification-url": "https://packagist.org/downloads/",
1489 | "license": [
1490 | "MIT"
1491 | ],
1492 | "authors": [
1493 | {
1494 | "name": "Fabien Potencier",
1495 | "email": "fabien@symfony.com"
1496 | },
1497 | {
1498 | "name": "Symfony Community",
1499 | "homepage": "https://symfony.com/contributors"
1500 | }
1501 | ],
1502 | "description": "Symfony Console Component",
1503 | "homepage": "https://symfony.com",
1504 | "time": "2019-11-13T07:29:07+00:00"
1505 | },
1506 | {
1507 | "name": "symfony/dependency-injection",
1508 | "version": "v4.3.8",
1509 | "source": {
1510 | "type": "git",
1511 | "url": "https://github.com/symfony/dependency-injection.git",
1512 | "reference": "80c6d9e19467dfbba14f830ed478eb592ce51b64"
1513 | },
1514 | "dist": {
1515 | "type": "zip",
1516 | "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/80c6d9e19467dfbba14f830ed478eb592ce51b64",
1517 | "reference": "80c6d9e19467dfbba14f830ed478eb592ce51b64",
1518 | "shasum": ""
1519 | },
1520 | "require": {
1521 | "php": "^7.1.3",
1522 | "psr/container": "^1.0",
1523 | "symfony/service-contracts": "^1.1.6"
1524 | },
1525 | "conflict": {
1526 | "symfony/config": "<4.3",
1527 | "symfony/finder": "<3.4",
1528 | "symfony/proxy-manager-bridge": "<3.4",
1529 | "symfony/yaml": "<3.4"
1530 | },
1531 | "provide": {
1532 | "psr/container-implementation": "1.0",
1533 | "symfony/service-implementation": "1.0"
1534 | },
1535 | "require-dev": {
1536 | "symfony/config": "^4.3",
1537 | "symfony/expression-language": "~3.4|~4.0",
1538 | "symfony/yaml": "~3.4|~4.0"
1539 | },
1540 | "suggest": {
1541 | "symfony/config": "",
1542 | "symfony/expression-language": "For using expressions in service container configuration",
1543 | "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
1544 | "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
1545 | "symfony/yaml": ""
1546 | },
1547 | "type": "library",
1548 | "extra": {
1549 | "branch-alias": {
1550 | "dev-master": "4.3-dev"
1551 | }
1552 | },
1553 | "autoload": {
1554 | "psr-4": {
1555 | "Symfony\\Component\\DependencyInjection\\": ""
1556 | },
1557 | "exclude-from-classmap": [
1558 | "/Tests/"
1559 | ]
1560 | },
1561 | "notification-url": "https://packagist.org/downloads/",
1562 | "license": [
1563 | "MIT"
1564 | ],
1565 | "authors": [
1566 | {
1567 | "name": "Fabien Potencier",
1568 | "email": "fabien@symfony.com"
1569 | },
1570 | {
1571 | "name": "Symfony Community",
1572 | "homepage": "https://symfony.com/contributors"
1573 | }
1574 | ],
1575 | "description": "Symfony DependencyInjection Component",
1576 | "homepage": "https://symfony.com",
1577 | "time": "2019-11-08T16:22:27+00:00"
1578 | },
1579 | {
1580 | "name": "symfony/event-dispatcher",
1581 | "version": "v4.3.8",
1582 | "source": {
1583 | "type": "git",
1584 | "url": "https://github.com/symfony/event-dispatcher.git",
1585 | "reference": "0df002fd4f500392eabd243c2947061a50937287"
1586 | },
1587 | "dist": {
1588 | "type": "zip",
1589 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0df002fd4f500392eabd243c2947061a50937287",
1590 | "reference": "0df002fd4f500392eabd243c2947061a50937287",
1591 | "shasum": ""
1592 | },
1593 | "require": {
1594 | "php": "^7.1.3",
1595 | "symfony/event-dispatcher-contracts": "^1.1"
1596 | },
1597 | "conflict": {
1598 | "symfony/dependency-injection": "<3.4"
1599 | },
1600 | "provide": {
1601 | "psr/event-dispatcher-implementation": "1.0",
1602 | "symfony/event-dispatcher-implementation": "1.1"
1603 | },
1604 | "require-dev": {
1605 | "psr/log": "~1.0",
1606 | "symfony/config": "~3.4|~4.0",
1607 | "symfony/dependency-injection": "~3.4|~4.0",
1608 | "symfony/expression-language": "~3.4|~4.0",
1609 | "symfony/http-foundation": "^3.4|^4.0",
1610 | "symfony/service-contracts": "^1.1",
1611 | "symfony/stopwatch": "~3.4|~4.0"
1612 | },
1613 | "suggest": {
1614 | "symfony/dependency-injection": "",
1615 | "symfony/http-kernel": ""
1616 | },
1617 | "type": "library",
1618 | "extra": {
1619 | "branch-alias": {
1620 | "dev-master": "4.3-dev"
1621 | }
1622 | },
1623 | "autoload": {
1624 | "psr-4": {
1625 | "Symfony\\Component\\EventDispatcher\\": ""
1626 | },
1627 | "exclude-from-classmap": [
1628 | "/Tests/"
1629 | ]
1630 | },
1631 | "notification-url": "https://packagist.org/downloads/",
1632 | "license": [
1633 | "MIT"
1634 | ],
1635 | "authors": [
1636 | {
1637 | "name": "Fabien Potencier",
1638 | "email": "fabien@symfony.com"
1639 | },
1640 | {
1641 | "name": "Symfony Community",
1642 | "homepage": "https://symfony.com/contributors"
1643 | }
1644 | ],
1645 | "description": "Symfony EventDispatcher Component",
1646 | "homepage": "https://symfony.com",
1647 | "time": "2019-11-03T09:04:05+00:00"
1648 | },
1649 | {
1650 | "name": "symfony/event-dispatcher-contracts",
1651 | "version": "v1.1.7",
1652 | "source": {
1653 | "type": "git",
1654 | "url": "https://github.com/symfony/event-dispatcher-contracts.git",
1655 | "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18"
1656 | },
1657 | "dist": {
1658 | "type": "zip",
1659 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c43ab685673fb6c8d84220c77897b1d6cdbe1d18",
1660 | "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18",
1661 | "shasum": ""
1662 | },
1663 | "require": {
1664 | "php": "^7.1.3"
1665 | },
1666 | "suggest": {
1667 | "psr/event-dispatcher": "",
1668 | "symfony/event-dispatcher-implementation": ""
1669 | },
1670 | "type": "library",
1671 | "extra": {
1672 | "branch-alias": {
1673 | "dev-master": "1.1-dev"
1674 | }
1675 | },
1676 | "autoload": {
1677 | "psr-4": {
1678 | "Symfony\\Contracts\\EventDispatcher\\": ""
1679 | }
1680 | },
1681 | "notification-url": "https://packagist.org/downloads/",
1682 | "license": [
1683 | "MIT"
1684 | ],
1685 | "authors": [
1686 | {
1687 | "name": "Nicolas Grekas",
1688 | "email": "p@tchwork.com"
1689 | },
1690 | {
1691 | "name": "Symfony Community",
1692 | "homepage": "https://symfony.com/contributors"
1693 | }
1694 | ],
1695 | "description": "Generic abstractions related to dispatching event",
1696 | "homepage": "https://symfony.com",
1697 | "keywords": [
1698 | "abstractions",
1699 | "contracts",
1700 | "decoupling",
1701 | "interfaces",
1702 | "interoperability",
1703 | "standards"
1704 | ],
1705 | "time": "2019-09-17T09:54:03+00:00"
1706 | },
1707 | {
1708 | "name": "symfony/filesystem",
1709 | "version": "v4.3.8",
1710 | "source": {
1711 | "type": "git",
1712 | "url": "https://github.com/symfony/filesystem.git",
1713 | "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263"
1714 | },
1715 | "dist": {
1716 | "type": "zip",
1717 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/9abbb7ef96a51f4d7e69627bc6f63307994e4263",
1718 | "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263",
1719 | "shasum": ""
1720 | },
1721 | "require": {
1722 | "php": "^7.1.3",
1723 | "symfony/polyfill-ctype": "~1.8"
1724 | },
1725 | "type": "library",
1726 | "extra": {
1727 | "branch-alias": {
1728 | "dev-master": "4.3-dev"
1729 | }
1730 | },
1731 | "autoload": {
1732 | "psr-4": {
1733 | "Symfony\\Component\\Filesystem\\": ""
1734 | },
1735 | "exclude-from-classmap": [
1736 | "/Tests/"
1737 | ]
1738 | },
1739 | "notification-url": "https://packagist.org/downloads/",
1740 | "license": [
1741 | "MIT"
1742 | ],
1743 | "authors": [
1744 | {
1745 | "name": "Fabien Potencier",
1746 | "email": "fabien@symfony.com"
1747 | },
1748 | {
1749 | "name": "Symfony Community",
1750 | "homepage": "https://symfony.com/contributors"
1751 | }
1752 | ],
1753 | "description": "Symfony Filesystem Component",
1754 | "homepage": "https://symfony.com",
1755 | "time": "2019-08-20T14:07:54+00:00"
1756 | },
1757 | {
1758 | "name": "symfony/finder",
1759 | "version": "v4.3.8",
1760 | "source": {
1761 | "type": "git",
1762 | "url": "https://github.com/symfony/finder.git",
1763 | "reference": "72a068f77e317ae77c0a0495236ad292cfb5ce6f"
1764 | },
1765 | "dist": {
1766 | "type": "zip",
1767 | "url": "https://api.github.com/repos/symfony/finder/zipball/72a068f77e317ae77c0a0495236ad292cfb5ce6f",
1768 | "reference": "72a068f77e317ae77c0a0495236ad292cfb5ce6f",
1769 | "shasum": ""
1770 | },
1771 | "require": {
1772 | "php": "^7.1.3"
1773 | },
1774 | "type": "library",
1775 | "extra": {
1776 | "branch-alias": {
1777 | "dev-master": "4.3-dev"
1778 | }
1779 | },
1780 | "autoload": {
1781 | "psr-4": {
1782 | "Symfony\\Component\\Finder\\": ""
1783 | },
1784 | "exclude-from-classmap": [
1785 | "/Tests/"
1786 | ]
1787 | },
1788 | "notification-url": "https://packagist.org/downloads/",
1789 | "license": [
1790 | "MIT"
1791 | ],
1792 | "authors": [
1793 | {
1794 | "name": "Fabien Potencier",
1795 | "email": "fabien@symfony.com"
1796 | },
1797 | {
1798 | "name": "Symfony Community",
1799 | "homepage": "https://symfony.com/contributors"
1800 | }
1801 | ],
1802 | "description": "Symfony Finder Component",
1803 | "homepage": "https://symfony.com",
1804 | "time": "2019-10-30T12:53:54+00:00"
1805 | },
1806 | {
1807 | "name": "symfony/polyfill-ctype",
1808 | "version": "v1.12.0",
1809 | "source": {
1810 | "type": "git",
1811 | "url": "https://github.com/symfony/polyfill-ctype.git",
1812 | "reference": "550ebaac289296ce228a706d0867afc34687e3f4"
1813 | },
1814 | "dist": {
1815 | "type": "zip",
1816 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4",
1817 | "reference": "550ebaac289296ce228a706d0867afc34687e3f4",
1818 | "shasum": ""
1819 | },
1820 | "require": {
1821 | "php": ">=5.3.3"
1822 | },
1823 | "suggest": {
1824 | "ext-ctype": "For best performance"
1825 | },
1826 | "type": "library",
1827 | "extra": {
1828 | "branch-alias": {
1829 | "dev-master": "1.12-dev"
1830 | }
1831 | },
1832 | "autoload": {
1833 | "psr-4": {
1834 | "Symfony\\Polyfill\\Ctype\\": ""
1835 | },
1836 | "files": [
1837 | "bootstrap.php"
1838 | ]
1839 | },
1840 | "notification-url": "https://packagist.org/downloads/",
1841 | "license": [
1842 | "MIT"
1843 | ],
1844 | "authors": [
1845 | {
1846 | "name": "Gert de Pagter",
1847 | "email": "BackEndTea@gmail.com"
1848 | },
1849 | {
1850 | "name": "Symfony Community",
1851 | "homepage": "https://symfony.com/contributors"
1852 | }
1853 | ],
1854 | "description": "Symfony polyfill for ctype functions",
1855 | "homepage": "https://symfony.com",
1856 | "keywords": [
1857 | "compatibility",
1858 | "ctype",
1859 | "polyfill",
1860 | "portable"
1861 | ],
1862 | "time": "2019-08-06T08:03:45+00:00"
1863 | },
1864 | {
1865 | "name": "symfony/polyfill-mbstring",
1866 | "version": "v1.12.0",
1867 | "source": {
1868 | "type": "git",
1869 | "url": "https://github.com/symfony/polyfill-mbstring.git",
1870 | "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17"
1871 | },
1872 | "dist": {
1873 | "type": "zip",
1874 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17",
1875 | "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17",
1876 | "shasum": ""
1877 | },
1878 | "require": {
1879 | "php": ">=5.3.3"
1880 | },
1881 | "suggest": {
1882 | "ext-mbstring": "For best performance"
1883 | },
1884 | "type": "library",
1885 | "extra": {
1886 | "branch-alias": {
1887 | "dev-master": "1.12-dev"
1888 | }
1889 | },
1890 | "autoload": {
1891 | "psr-4": {
1892 | "Symfony\\Polyfill\\Mbstring\\": ""
1893 | },
1894 | "files": [
1895 | "bootstrap.php"
1896 | ]
1897 | },
1898 | "notification-url": "https://packagist.org/downloads/",
1899 | "license": [
1900 | "MIT"
1901 | ],
1902 | "authors": [
1903 | {
1904 | "name": "Nicolas Grekas",
1905 | "email": "p@tchwork.com"
1906 | },
1907 | {
1908 | "name": "Symfony Community",
1909 | "homepage": "https://symfony.com/contributors"
1910 | }
1911 | ],
1912 | "description": "Symfony polyfill for the Mbstring extension",
1913 | "homepage": "https://symfony.com",
1914 | "keywords": [
1915 | "compatibility",
1916 | "mbstring",
1917 | "polyfill",
1918 | "portable",
1919 | "shim"
1920 | ],
1921 | "time": "2019-08-06T08:03:45+00:00"
1922 | },
1923 | {
1924 | "name": "symfony/polyfill-php73",
1925 | "version": "v1.12.0",
1926 | "source": {
1927 | "type": "git",
1928 | "url": "https://github.com/symfony/polyfill-php73.git",
1929 | "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188"
1930 | },
1931 | "dist": {
1932 | "type": "zip",
1933 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/2ceb49eaccb9352bff54d22570276bb75ba4a188",
1934 | "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188",
1935 | "shasum": ""
1936 | },
1937 | "require": {
1938 | "php": ">=5.3.3"
1939 | },
1940 | "type": "library",
1941 | "extra": {
1942 | "branch-alias": {
1943 | "dev-master": "1.12-dev"
1944 | }
1945 | },
1946 | "autoload": {
1947 | "psr-4": {
1948 | "Symfony\\Polyfill\\Php73\\": ""
1949 | },
1950 | "files": [
1951 | "bootstrap.php"
1952 | ],
1953 | "classmap": [
1954 | "Resources/stubs"
1955 | ]
1956 | },
1957 | "notification-url": "https://packagist.org/downloads/",
1958 | "license": [
1959 | "MIT"
1960 | ],
1961 | "authors": [
1962 | {
1963 | "name": "Nicolas Grekas",
1964 | "email": "p@tchwork.com"
1965 | },
1966 | {
1967 | "name": "Symfony Community",
1968 | "homepage": "https://symfony.com/contributors"
1969 | }
1970 | ],
1971 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
1972 | "homepage": "https://symfony.com",
1973 | "keywords": [
1974 | "compatibility",
1975 | "polyfill",
1976 | "portable",
1977 | "shim"
1978 | ],
1979 | "time": "2019-08-06T08:03:45+00:00"
1980 | },
1981 | {
1982 | "name": "symfony/process",
1983 | "version": "v4.3.8",
1984 | "source": {
1985 | "type": "git",
1986 | "url": "https://github.com/symfony/process.git",
1987 | "reference": "3b2e0cb029afbb0395034509291f21191d1a4db0"
1988 | },
1989 | "dist": {
1990 | "type": "zip",
1991 | "url": "https://api.github.com/repos/symfony/process/zipball/3b2e0cb029afbb0395034509291f21191d1a4db0",
1992 | "reference": "3b2e0cb029afbb0395034509291f21191d1a4db0",
1993 | "shasum": ""
1994 | },
1995 | "require": {
1996 | "php": "^7.1.3"
1997 | },
1998 | "type": "library",
1999 | "extra": {
2000 | "branch-alias": {
2001 | "dev-master": "4.3-dev"
2002 | }
2003 | },
2004 | "autoload": {
2005 | "psr-4": {
2006 | "Symfony\\Component\\Process\\": ""
2007 | },
2008 | "exclude-from-classmap": [
2009 | "/Tests/"
2010 | ]
2011 | },
2012 | "notification-url": "https://packagist.org/downloads/",
2013 | "license": [
2014 | "MIT"
2015 | ],
2016 | "authors": [
2017 | {
2018 | "name": "Fabien Potencier",
2019 | "email": "fabien@symfony.com"
2020 | },
2021 | {
2022 | "name": "Symfony Community",
2023 | "homepage": "https://symfony.com/contributors"
2024 | }
2025 | ],
2026 | "description": "Symfony Process Component",
2027 | "homepage": "https://symfony.com",
2028 | "time": "2019-10-28T17:07:32+00:00"
2029 | },
2030 | {
2031 | "name": "symfony/service-contracts",
2032 | "version": "v1.1.8",
2033 | "source": {
2034 | "type": "git",
2035 | "url": "https://github.com/symfony/service-contracts.git",
2036 | "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf"
2037 | },
2038 | "dist": {
2039 | "type": "zip",
2040 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffc7f5692092df31515df2a5ecf3b7302b3ddacf",
2041 | "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf",
2042 | "shasum": ""
2043 | },
2044 | "require": {
2045 | "php": "^7.1.3",
2046 | "psr/container": "^1.0"
2047 | },
2048 | "suggest": {
2049 | "symfony/service-implementation": ""
2050 | },
2051 | "type": "library",
2052 | "extra": {
2053 | "branch-alias": {
2054 | "dev-master": "1.1-dev"
2055 | }
2056 | },
2057 | "autoload": {
2058 | "psr-4": {
2059 | "Symfony\\Contracts\\Service\\": ""
2060 | }
2061 | },
2062 | "notification-url": "https://packagist.org/downloads/",
2063 | "license": [
2064 | "MIT"
2065 | ],
2066 | "authors": [
2067 | {
2068 | "name": "Nicolas Grekas",
2069 | "email": "p@tchwork.com"
2070 | },
2071 | {
2072 | "name": "Symfony Community",
2073 | "homepage": "https://symfony.com/contributors"
2074 | }
2075 | ],
2076 | "description": "Generic abstractions related to writing services",
2077 | "homepage": "https://symfony.com",
2078 | "keywords": [
2079 | "abstractions",
2080 | "contracts",
2081 | "decoupling",
2082 | "interfaces",
2083 | "interoperability",
2084 | "standards"
2085 | ],
2086 | "time": "2019-10-14T12:27:06+00:00"
2087 | },
2088 | {
2089 | "name": "symfony/yaml",
2090 | "version": "v4.3.8",
2091 | "source": {
2092 | "type": "git",
2093 | "url": "https://github.com/symfony/yaml.git",
2094 | "reference": "324cf4b19c345465fad14f3602050519e09e361d"
2095 | },
2096 | "dist": {
2097 | "type": "zip",
2098 | "url": "https://api.github.com/repos/symfony/yaml/zipball/324cf4b19c345465fad14f3602050519e09e361d",
2099 | "reference": "324cf4b19c345465fad14f3602050519e09e361d",
2100 | "shasum": ""
2101 | },
2102 | "require": {
2103 | "php": "^7.1.3",
2104 | "symfony/polyfill-ctype": "~1.8"
2105 | },
2106 | "conflict": {
2107 | "symfony/console": "<3.4"
2108 | },
2109 | "require-dev": {
2110 | "symfony/console": "~3.4|~4.0"
2111 | },
2112 | "suggest": {
2113 | "symfony/console": "For validating YAML files using the lint command"
2114 | },
2115 | "type": "library",
2116 | "extra": {
2117 | "branch-alias": {
2118 | "dev-master": "4.3-dev"
2119 | }
2120 | },
2121 | "autoload": {
2122 | "psr-4": {
2123 | "Symfony\\Component\\Yaml\\": ""
2124 | },
2125 | "exclude-from-classmap": [
2126 | "/Tests/"
2127 | ]
2128 | },
2129 | "notification-url": "https://packagist.org/downloads/",
2130 | "license": [
2131 | "MIT"
2132 | ],
2133 | "authors": [
2134 | {
2135 | "name": "Fabien Potencier",
2136 | "email": "fabien@symfony.com"
2137 | },
2138 | {
2139 | "name": "Symfony Community",
2140 | "homepage": "https://symfony.com/contributors"
2141 | }
2142 | ],
2143 | "description": "Symfony Yaml Component",
2144 | "homepage": "https://symfony.com",
2145 | "time": "2019-10-30T12:58:49+00:00"
2146 | },
2147 | {
2148 | "name": "theseer/tokenizer",
2149 | "version": "1.1.3",
2150 | "source": {
2151 | "type": "git",
2152 | "url": "https://github.com/theseer/tokenizer.git",
2153 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
2154 | },
2155 | "dist": {
2156 | "type": "zip",
2157 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
2158 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
2159 | "shasum": ""
2160 | },
2161 | "require": {
2162 | "ext-dom": "*",
2163 | "ext-tokenizer": "*",
2164 | "ext-xmlwriter": "*",
2165 | "php": "^7.0"
2166 | },
2167 | "type": "library",
2168 | "autoload": {
2169 | "classmap": [
2170 | "src/"
2171 | ]
2172 | },
2173 | "notification-url": "https://packagist.org/downloads/",
2174 | "license": [
2175 | "BSD-3-Clause"
2176 | ],
2177 | "authors": [
2178 | {
2179 | "name": "Arne Blankerts",
2180 | "email": "arne@blankerts.de",
2181 | "role": "Developer"
2182 | }
2183 | ],
2184 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2185 | "time": "2019-06-13T22:48:21+00:00"
2186 | },
2187 | {
2188 | "name": "webmozart/assert",
2189 | "version": "1.5.0",
2190 | "source": {
2191 | "type": "git",
2192 | "url": "https://github.com/webmozart/assert.git",
2193 | "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4"
2194 | },
2195 | "dist": {
2196 | "type": "zip",
2197 | "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4",
2198 | "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4",
2199 | "shasum": ""
2200 | },
2201 | "require": {
2202 | "php": "^5.3.3 || ^7.0",
2203 | "symfony/polyfill-ctype": "^1.8"
2204 | },
2205 | "require-dev": {
2206 | "phpunit/phpunit": "^4.8.36 || ^7.5.13"
2207 | },
2208 | "type": "library",
2209 | "extra": {
2210 | "branch-alias": {
2211 | "dev-master": "1.3-dev"
2212 | }
2213 | },
2214 | "autoload": {
2215 | "psr-4": {
2216 | "Webmozart\\Assert\\": "src/"
2217 | }
2218 | },
2219 | "notification-url": "https://packagist.org/downloads/",
2220 | "license": [
2221 | "MIT"
2222 | ],
2223 | "authors": [
2224 | {
2225 | "name": "Bernhard Schussek",
2226 | "email": "bschussek@gmail.com"
2227 | }
2228 | ],
2229 | "description": "Assertions to validate method input/output with nice error messages.",
2230 | "keywords": [
2231 | "assert",
2232 | "check",
2233 | "validate"
2234 | ],
2235 | "time": "2019-08-24T08:43:50+00:00"
2236 | }
2237 | ],
2238 | "packages-dev": [
2239 | {
2240 | "name": "composer/ca-bundle",
2241 | "version": "1.2.4",
2242 | "source": {
2243 | "type": "git",
2244 | "url": "https://github.com/composer/ca-bundle.git",
2245 | "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527"
2246 | },
2247 | "dist": {
2248 | "type": "zip",
2249 | "url": "https://api.github.com/repos/composer/ca-bundle/zipball/10bb96592168a0f8e8f6dcde3532d9fa50b0b527",
2250 | "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527",
2251 | "shasum": ""
2252 | },
2253 | "require": {
2254 | "ext-openssl": "*",
2255 | "ext-pcre": "*",
2256 | "php": "^5.3.2 || ^7.0 || ^8.0"
2257 | },
2258 | "require-dev": {
2259 | "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
2260 | "psr/log": "^1.0",
2261 | "symfony/process": "^2.5 || ^3.0 || ^4.0"
2262 | },
2263 | "type": "library",
2264 | "extra": {
2265 | "branch-alias": {
2266 | "dev-master": "1.x-dev"
2267 | }
2268 | },
2269 | "autoload": {
2270 | "psr-4": {
2271 | "Composer\\CaBundle\\": "src"
2272 | }
2273 | },
2274 | "notification-url": "https://packagist.org/downloads/",
2275 | "license": [
2276 | "MIT"
2277 | ],
2278 | "authors": [
2279 | {
2280 | "name": "Jordi Boggiano",
2281 | "email": "j.boggiano@seld.be",
2282 | "homepage": "http://seld.be"
2283 | }
2284 | ],
2285 | "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
2286 | "keywords": [
2287 | "cabundle",
2288 | "cacert",
2289 | "certificate",
2290 | "ssl",
2291 | "tls"
2292 | ],
2293 | "time": "2019-08-30T08:44:50+00:00"
2294 | },
2295 | {
2296 | "name": "composer/composer",
2297 | "version": "1.9.1",
2298 | "source": {
2299 | "type": "git",
2300 | "url": "https://github.com/composer/composer.git",
2301 | "reference": "bb01f2180df87ce7992b8331a68904f80439dd2f"
2302 | },
2303 | "dist": {
2304 | "type": "zip",
2305 | "url": "https://api.github.com/repos/composer/composer/zipball/bb01f2180df87ce7992b8331a68904f80439dd2f",
2306 | "reference": "bb01f2180df87ce7992b8331a68904f80439dd2f",
2307 | "shasum": ""
2308 | },
2309 | "require": {
2310 | "composer/ca-bundle": "^1.0",
2311 | "composer/semver": "^1.0",
2312 | "composer/spdx-licenses": "^1.2",
2313 | "composer/xdebug-handler": "^1.1",
2314 | "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
2315 | "php": "^5.3.2 || ^7.0",
2316 | "psr/log": "^1.0",
2317 | "seld/jsonlint": "^1.4",
2318 | "seld/phar-utils": "^1.0",
2319 | "symfony/console": "^2.7 || ^3.0 || ^4.0",
2320 | "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
2321 | "symfony/finder": "^2.7 || ^3.0 || ^4.0",
2322 | "symfony/process": "^2.7 || ^3.0 || ^4.0"
2323 | },
2324 | "conflict": {
2325 | "symfony/console": "2.8.38"
2326 | },
2327 | "require-dev": {
2328 | "phpunit/phpunit": "^4.8.35 || ^5.7",
2329 | "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
2330 | },
2331 | "suggest": {
2332 | "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
2333 | "ext-zip": "Enabling the zip extension allows you to unzip archives",
2334 | "ext-zlib": "Allow gzip compression of HTTP requests"
2335 | },
2336 | "bin": [
2337 | "bin/composer"
2338 | ],
2339 | "type": "library",
2340 | "extra": {
2341 | "branch-alias": {
2342 | "dev-master": "1.9-dev"
2343 | }
2344 | },
2345 | "autoload": {
2346 | "psr-4": {
2347 | "Composer\\": "src/Composer"
2348 | }
2349 | },
2350 | "notification-url": "https://packagist.org/downloads/",
2351 | "license": [
2352 | "MIT"
2353 | ],
2354 | "authors": [
2355 | {
2356 | "name": "Nils Adermann",
2357 | "email": "naderman@naderman.de",
2358 | "homepage": "http://www.naderman.de"
2359 | },
2360 | {
2361 | "name": "Jordi Boggiano",
2362 | "email": "j.boggiano@seld.be",
2363 | "homepage": "http://seld.be"
2364 | }
2365 | ],
2366 | "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
2367 | "homepage": "https://getcomposer.org/",
2368 | "keywords": [
2369 | "autoload",
2370 | "dependency",
2371 | "package"
2372 | ],
2373 | "time": "2019-11-01T16:20:17+00:00"
2374 | },
2375 | {
2376 | "name": "composer/semver",
2377 | "version": "1.5.0",
2378 | "source": {
2379 | "type": "git",
2380 | "url": "https://github.com/composer/semver.git",
2381 | "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e"
2382 | },
2383 | "dist": {
2384 | "type": "zip",
2385 | "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e",
2386 | "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e",
2387 | "shasum": ""
2388 | },
2389 | "require": {
2390 | "php": "^5.3.2 || ^7.0"
2391 | },
2392 | "require-dev": {
2393 | "phpunit/phpunit": "^4.5 || ^5.0.5",
2394 | "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
2395 | },
2396 | "type": "library",
2397 | "extra": {
2398 | "branch-alias": {
2399 | "dev-master": "1.x-dev"
2400 | }
2401 | },
2402 | "autoload": {
2403 | "psr-4": {
2404 | "Composer\\Semver\\": "src"
2405 | }
2406 | },
2407 | "notification-url": "https://packagist.org/downloads/",
2408 | "license": [
2409 | "MIT"
2410 | ],
2411 | "authors": [
2412 | {
2413 | "name": "Nils Adermann",
2414 | "email": "naderman@naderman.de",
2415 | "homepage": "http://www.naderman.de"
2416 | },
2417 | {
2418 | "name": "Jordi Boggiano",
2419 | "email": "j.boggiano@seld.be",
2420 | "homepage": "http://seld.be"
2421 | },
2422 | {
2423 | "name": "Rob Bast",
2424 | "email": "rob.bast@gmail.com",
2425 | "homepage": "http://robbast.nl"
2426 | }
2427 | ],
2428 | "description": "Semver library that offers utilities, version constraint parsing and validation.",
2429 | "keywords": [
2430 | "semantic",
2431 | "semver",
2432 | "validation",
2433 | "versioning"
2434 | ],
2435 | "time": "2019-03-19T17:25:45+00:00"
2436 | },
2437 | {
2438 | "name": "composer/spdx-licenses",
2439 | "version": "1.5.2",
2440 | "source": {
2441 | "type": "git",
2442 | "url": "https://github.com/composer/spdx-licenses.git",
2443 | "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5"
2444 | },
2445 | "dist": {
2446 | "type": "zip",
2447 | "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/7ac1e6aec371357df067f8a688c3d6974df68fa5",
2448 | "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5",
2449 | "shasum": ""
2450 | },
2451 | "require": {
2452 | "php": "^5.3.2 || ^7.0 || ^8.0"
2453 | },
2454 | "require-dev": {
2455 | "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7"
2456 | },
2457 | "type": "library",
2458 | "extra": {
2459 | "branch-alias": {
2460 | "dev-master": "1.x-dev"
2461 | }
2462 | },
2463 | "autoload": {
2464 | "psr-4": {
2465 | "Composer\\Spdx\\": "src"
2466 | }
2467 | },
2468 | "notification-url": "https://packagist.org/downloads/",
2469 | "license": [
2470 | "MIT"
2471 | ],
2472 | "authors": [
2473 | {
2474 | "name": "Nils Adermann",
2475 | "email": "naderman@naderman.de",
2476 | "homepage": "http://www.naderman.de"
2477 | },
2478 | {
2479 | "name": "Jordi Boggiano",
2480 | "email": "j.boggiano@seld.be",
2481 | "homepage": "http://seld.be"
2482 | },
2483 | {
2484 | "name": "Rob Bast",
2485 | "email": "rob.bast@gmail.com",
2486 | "homepage": "http://robbast.nl"
2487 | }
2488 | ],
2489 | "description": "SPDX licenses list and validation library.",
2490 | "keywords": [
2491 | "license",
2492 | "spdx",
2493 | "validator"
2494 | ],
2495 | "time": "2019-07-29T10:31:59+00:00"
2496 | },
2497 | {
2498 | "name": "composer/xdebug-handler",
2499 | "version": "1.4.0",
2500 | "source": {
2501 | "type": "git",
2502 | "url": "https://github.com/composer/xdebug-handler.git",
2503 | "reference": "cbe23383749496fe0f373345208b79568e4bc248"
2504 | },
2505 | "dist": {
2506 | "type": "zip",
2507 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248",
2508 | "reference": "cbe23383749496fe0f373345208b79568e4bc248",
2509 | "shasum": ""
2510 | },
2511 | "require": {
2512 | "php": "^5.3.2 || ^7.0 || ^8.0",
2513 | "psr/log": "^1.0"
2514 | },
2515 | "require-dev": {
2516 | "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
2517 | },
2518 | "type": "library",
2519 | "autoload": {
2520 | "psr-4": {
2521 | "Composer\\XdebugHandler\\": "src"
2522 | }
2523 | },
2524 | "notification-url": "https://packagist.org/downloads/",
2525 | "license": [
2526 | "MIT"
2527 | ],
2528 | "authors": [
2529 | {
2530 | "name": "John Stevenson",
2531 | "email": "john-stevenson@blueyonder.co.uk"
2532 | }
2533 | ],
2534 | "description": "Restarts a process without Xdebug.",
2535 | "keywords": [
2536 | "Xdebug",
2537 | "performance"
2538 | ],
2539 | "time": "2019-11-06T16:40:04+00:00"
2540 | },
2541 | {
2542 | "name": "justinrainbow/json-schema",
2543 | "version": "5.2.9",
2544 | "source": {
2545 | "type": "git",
2546 | "url": "https://github.com/justinrainbow/json-schema.git",
2547 | "reference": "44c6787311242a979fa15c704327c20e7221a0e4"
2548 | },
2549 | "dist": {
2550 | "type": "zip",
2551 | "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/44c6787311242a979fa15c704327c20e7221a0e4",
2552 | "reference": "44c6787311242a979fa15c704327c20e7221a0e4",
2553 | "shasum": ""
2554 | },
2555 | "require": {
2556 | "php": ">=5.3.3"
2557 | },
2558 | "require-dev": {
2559 | "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
2560 | "json-schema/json-schema-test-suite": "1.2.0",
2561 | "phpunit/phpunit": "^4.8.35"
2562 | },
2563 | "bin": [
2564 | "bin/validate-json"
2565 | ],
2566 | "type": "library",
2567 | "extra": {
2568 | "branch-alias": {
2569 | "dev-master": "5.0.x-dev"
2570 | }
2571 | },
2572 | "autoload": {
2573 | "psr-4": {
2574 | "JsonSchema\\": "src/JsonSchema/"
2575 | }
2576 | },
2577 | "notification-url": "https://packagist.org/downloads/",
2578 | "license": [
2579 | "MIT"
2580 | ],
2581 | "authors": [
2582 | {
2583 | "name": "Bruno Prieto Reis",
2584 | "email": "bruno.p.reis@gmail.com"
2585 | },
2586 | {
2587 | "name": "Justin Rainbow",
2588 | "email": "justin.rainbow@gmail.com"
2589 | },
2590 | {
2591 | "name": "Igor Wiedler",
2592 | "email": "igor@wiedler.ch"
2593 | },
2594 | {
2595 | "name": "Robert Schönthal",
2596 | "email": "seroscho@googlemail.com"
2597 | }
2598 | ],
2599 | "description": "A library to validate a json schema.",
2600 | "homepage": "https://github.com/justinrainbow/json-schema",
2601 | "keywords": [
2602 | "json",
2603 | "schema"
2604 | ],
2605 | "time": "2019-09-25T14:49:45+00:00"
2606 | },
2607 | {
2608 | "name": "psr/log",
2609 | "version": "1.1.2",
2610 | "source": {
2611 | "type": "git",
2612 | "url": "https://github.com/php-fig/log.git",
2613 | "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
2614 | },
2615 | "dist": {
2616 | "type": "zip",
2617 | "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
2618 | "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
2619 | "shasum": ""
2620 | },
2621 | "require": {
2622 | "php": ">=5.3.0"
2623 | },
2624 | "type": "library",
2625 | "extra": {
2626 | "branch-alias": {
2627 | "dev-master": "1.1.x-dev"
2628 | }
2629 | },
2630 | "autoload": {
2631 | "psr-4": {
2632 | "Psr\\Log\\": "Psr/Log/"
2633 | }
2634 | },
2635 | "notification-url": "https://packagist.org/downloads/",
2636 | "license": [
2637 | "MIT"
2638 | ],
2639 | "authors": [
2640 | {
2641 | "name": "PHP-FIG",
2642 | "homepage": "http://www.php-fig.org/"
2643 | }
2644 | ],
2645 | "description": "Common interface for logging libraries",
2646 | "homepage": "https://github.com/php-fig/log",
2647 | "keywords": [
2648 | "log",
2649 | "psr",
2650 | "psr-3"
2651 | ],
2652 | "time": "2019-11-01T11:05:21+00:00"
2653 | },
2654 | {
2655 | "name": "seld/jsonlint",
2656 | "version": "1.7.2",
2657 | "source": {
2658 | "type": "git",
2659 | "url": "https://github.com/Seldaek/jsonlint.git",
2660 | "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19"
2661 | },
2662 | "dist": {
2663 | "type": "zip",
2664 | "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e2e5d290e4d2a4f0eb449f510071392e00e10d19",
2665 | "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19",
2666 | "shasum": ""
2667 | },
2668 | "require": {
2669 | "php": "^5.3 || ^7.0"
2670 | },
2671 | "require-dev": {
2672 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
2673 | },
2674 | "bin": [
2675 | "bin/jsonlint"
2676 | ],
2677 | "type": "library",
2678 | "autoload": {
2679 | "psr-4": {
2680 | "Seld\\JsonLint\\": "src/Seld/JsonLint/"
2681 | }
2682 | },
2683 | "notification-url": "https://packagist.org/downloads/",
2684 | "license": [
2685 | "MIT"
2686 | ],
2687 | "authors": [
2688 | {
2689 | "name": "Jordi Boggiano",
2690 | "email": "j.boggiano@seld.be",
2691 | "homepage": "http://seld.be"
2692 | }
2693 | ],
2694 | "description": "JSON Linter",
2695 | "keywords": [
2696 | "json",
2697 | "linter",
2698 | "parser",
2699 | "validator"
2700 | ],
2701 | "time": "2019-10-24T14:27:39+00:00"
2702 | },
2703 | {
2704 | "name": "seld/phar-utils",
2705 | "version": "1.0.1",
2706 | "source": {
2707 | "type": "git",
2708 | "url": "https://github.com/Seldaek/phar-utils.git",
2709 | "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
2710 | },
2711 | "dist": {
2712 | "type": "zip",
2713 | "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
2714 | "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
2715 | "shasum": ""
2716 | },
2717 | "require": {
2718 | "php": ">=5.3"
2719 | },
2720 | "type": "library",
2721 | "extra": {
2722 | "branch-alias": {
2723 | "dev-master": "1.x-dev"
2724 | }
2725 | },
2726 | "autoload": {
2727 | "psr-4": {
2728 | "Seld\\PharUtils\\": "src/"
2729 | }
2730 | },
2731 | "notification-url": "https://packagist.org/downloads/",
2732 | "license": [
2733 | "MIT"
2734 | ],
2735 | "authors": [
2736 | {
2737 | "name": "Jordi Boggiano",
2738 | "email": "j.boggiano@seld.be"
2739 | }
2740 | ],
2741 | "description": "PHAR file format utilities, for when PHP phars you up",
2742 | "keywords": [
2743 | "phra"
2744 | ],
2745 | "time": "2015-10-13T18:44:15+00:00"
2746 | }
2747 | ],
2748 | "aliases": [],
2749 | "minimum-stability": "stable",
2750 | "stability-flags": [],
2751 | "prefer-stable": false,
2752 | "prefer-lowest": false,
2753 | "platform": {
2754 | "php": ">=7.1"
2755 | },
2756 | "platform-dev": []
2757 | }
2758 |
--------------------------------------------------------------------------------
/config/phpmd.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 | karriere.at custom ruleset for phpmd
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/phpspec-coverage.yml:
--------------------------------------------------------------------------------
1 | suites:
2 | main:
3 | namespace: Karriere\CodeQuality
4 | psr4_prefix: Karriere\CodeQuality
5 | src_path: src
6 | spec_prefix: tests\specs
7 |
8 | extensions:
9 | FriendsOfPhpSpec\PhpSpec\CodeCoverage\CodeCoverageExtension:
10 | format:
11 | - html
12 | - clover
13 | output:
14 | html: coverage
15 | clover: coverage.xml
16 |
--------------------------------------------------------------------------------
/phpspec.yml:
--------------------------------------------------------------------------------
1 | suites:
2 | main:
3 | namespace: Karriere\CodeQuality
4 | psr4_prefix: Karriere\CodeQuality
5 | src_path: src
6 | spec_prefix: tests\specs
7 |
--------------------------------------------------------------------------------
/src/CodeCoverage.php:
--------------------------------------------------------------------------------
1 | 'phpspec run --config phpspec-coverage.yml',
15 | 'jenkins' => 'phpspec run --config phpspec-coverage.yml --format=junit > junit.xml'
16 | ];
17 |
18 | public static function run(Event $event)
19 | {
20 | $eventArguments = self::getComposerScriptArguments($event->getArguments());
21 |
22 | $command = self::getArrayValueByEventArguments(self::$commands, $eventArguments, 'env');
23 |
24 | $composerIO = $event->getIO();
25 | $composerIO->write('Running ' . $command . '>');
26 |
27 | $process = new Process($command);
28 | $process->setTtyByArguments($eventArguments);
29 | $process->setProcessTimeoutByArguments($eventArguments);
30 | $process->run();
31 |
32 | return $process->getExitCode();
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/CodeStyleChecker.php:
--------------------------------------------------------------------------------
1 | 'phpcs src --standard=PSR12 --colors',
21 | 'jenkins' => 'phpcs src --standard=PSR12 --report=checkstyle --report-file=checkstyle.xml'
22 | ];
23 |
24 | public static function run(Event $event)
25 | {
26 | $eventArguments = self::getComposerScriptArguments($event->getArguments());
27 |
28 | $command = self::getArrayValueByEventArguments(self::$commands, $eventArguments, 'env');
29 |
30 | $composerIO = $event->getIO();
31 | $composerIO->write('Running ' . $command . '>');
32 |
33 | $process = new Process($command);
34 | $process->setTtyByArguments($eventArguments);
35 | $process->setProcessTimeoutByArguments($eventArguments);
36 | $process->run();
37 |
38 | $composerIO->write($process->getOutput());
39 |
40 | $exitCode = $process->getExitCode();
41 |
42 | if ($exitCode === ComposerScriptInterface::EXIT_CODE_OK) {
43 | $composerIO->write('Finished without errors!>');
44 | } elseif (self::hasParameterOption(ComposerScriptInterface::FLAG_FAIL, $eventArguments)) {
45 | throw new \Exception('Failed with exit code ' . $exitCode . '.');
46 | }
47 |
48 | return $exitCode;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/CodeStyleFixer.php:
--------------------------------------------------------------------------------
1 | getArguments());
24 |
25 | $composerIO = $event->getIO();
26 | $composerIO->write('Running ' . self::$command . '>');
27 |
28 | $process = new Process(self::$command);
29 | $process->setTtyByArguments($eventArguments);
30 | $process->setProcessTimeoutByArguments($eventArguments);
31 | $process->run();
32 |
33 | $composerIO->write($process->getOutput());
34 |
35 | // PHPCBF exit codes:
36 | // 0 = Nothing was fixed by PHPCBF.
37 | // 1 = PHPCBF fixed all fixable errors.
38 | // 2 = PHPCBF fixed some fixable errors, but others failed to fix.
39 | return $process->getExitCode();
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/ComposerScriptInterface.php:
--------------------------------------------------------------------------------
1 | getArguments()
13 | * @return array
14 | */
15 | public static function getComposerScriptArguments(array $arguments)
16 | {
17 | $keyValueArguments = array();
18 |
19 | foreach ($arguments as $argument) {
20 | list($argKey, $argValue) = (strpos($argument, '=') !== false) ? explode('=', $argument) : [$argument, null];
21 | $keyValueArguments[trim($argKey, '-')] = $argValue;
22 | }
23 |
24 | return $keyValueArguments;
25 | }
26 |
27 | /**
28 | * Gets a value from array, depending on event arguments.
29 | * If no match is found, the first item of $array is returned.
30 | *
31 | * @param array $array Array to be searched
32 | * @param array $eventArgs Event arguments from self::getComposerScriptArguments()
33 | * @param string $key Get value by a specific key.
34 | * @param bool $verbose Whether to print verbose information to console.
35 | * @return string Array value
36 | */
37 | public static function getArrayValueByEventArguments(array $array, array $eventArgs, $key = '', $verbose = true)
38 | {
39 | if ($key === '') {
40 | $matching = array_intersect_key($array, $eventArgs);
41 | $arrayValue = (count($matching) > 0) ? reset($matching) : reset($array);
42 | } elseif (array_key_exists($key, $eventArgs) && array_key_exists($eventArgs[$key], $array)) {
43 | $arrayValue = $array[$eventArgs[$key]];
44 | } elseif (array_key_exists($key, $eventArgs)) {
45 | $arrayValue = reset($array);
46 |
47 | if ($verbose) {
48 | $consoleOutput = new ConsoleOutput();
49 | $consoleOutput->writeln(
50 | 'Value ' .
51 | $eventArgs[$key] .
52 | '> is not defined. Using ' .
53 | key($array) . '>.'
54 | );
55 | }
56 | } else {
57 | $arrayValue = reset($array);
58 | }
59 |
60 | return $arrayValue;
61 | }
62 |
63 | /**
64 | * Check if a parameter was supplied with command.
65 | *
66 | * @param string $parameter
67 | * @param array $eventArguments
68 | * @return bool
69 | */
70 | public static function hasParameterOption($parameter, array $eventArguments)
71 | {
72 | return array_key_exists($parameter, $eventArguments);
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/src/MessDetector.php:
--------------------------------------------------------------------------------
1 | 'phpmd src text ' . __DIR__ . '/../config/phpmd.xml',
15 | 'jenkins' => 'phpmd src xml ' . __DIR__ . '/../config/phpmd.xml --reportfile phpmd.xml'
16 | ];
17 |
18 | public static function run(Event $event)
19 | {
20 | $eventArguments = self::getComposerScriptArguments($event->getArguments());
21 |
22 | $command = self::getArrayValueByEventArguments(self::$commands, $eventArguments, 'env');
23 |
24 | $composerIO = $event->getIO();
25 | $composerIO->write('Running ' . $command . '>');
26 |
27 | $process = new Process($command);
28 | $process->setTtyByArguments($eventArguments);
29 | $process->setProcessTimeoutByArguments($eventArguments);
30 | $process->run();
31 |
32 | return $process->getExitCode();
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/Process/Process.php:
--------------------------------------------------------------------------------
1 | setTty(false);
42 | } else {
43 | // We have to try, because enabling TTY on an environment without TTY support will throw an exception.
44 | // This can be changed to `Process::isTtySupported()` if we only support symfony/process v4.1 and upwards.
45 | try {
46 | $this->setTty(true);
47 | } catch (RuntimeException $e) {
48 | return false;
49 | }
50 | }
51 |
52 | return true;
53 | }
54 |
55 | /**
56 | * Check if the process was started with a 'ptimeout' flag, if not, use default 60s timeout
57 | *
58 | * @param array $eventArguments
59 | * @return bool
60 | */
61 | public function setProcessTimeoutByArguments($eventArguments)
62 | {
63 | if (self::hasParameterOption(self::PROCESS_TIMEOUT, $eventArguments)) {
64 | $this->setTimeout($eventArguments[self::PROCESS_TIMEOUT]);
65 | }
66 |
67 | return true;
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/src/SpecificationTest.php:
--------------------------------------------------------------------------------
1 | 'phpspec run',
20 | 'verbose' => 'phpspec run -v',
21 | 'v' => 'phpspec run -v'
22 | ];
23 |
24 | public static function run(Event $event)
25 | {
26 | $eventArguments = self::getComposerScriptArguments($event->getArguments());
27 |
28 | $command = self::getArrayValueByEventArguments(self::$commands, $eventArguments);
29 |
30 | $composerIO = $event->getIO();
31 | $composerIO->write('Running ' . $command . '>');
32 |
33 | $process = new Process($command);
34 | $process->setTtyByArguments($eventArguments);
35 | $process->setProcessTimeoutByArguments($eventArguments);
36 | $process->run();
37 |
38 | $composerIO->write($process->getOutput());
39 |
40 | $exitCode = $process->getExitCode();
41 |
42 | $fail = self::hasParameterOption(ComposerScriptInterface::FLAG_FAIL, $eventArguments);
43 |
44 | if ($exitCode !== ComposerScriptInterface::EXIT_CODE_OK && $fail) {
45 | throw new \Exception('Failed with exit code ' . $exitCode . '.');
46 | }
47 |
48 | return $exitCode;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/tests/specs/CodeCoverageSpec.php:
--------------------------------------------------------------------------------
1 | shouldHaveType('Karriere\CodeQuality\CodeCoverage');
13 | }
14 |
15 | function it_implements_the_correct_interface()
16 | {
17 | $this->shouldImplement('Karriere\CodeQuality\ComposerScriptInterface');
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/tests/specs/CodeStyleCheckerSpec.php:
--------------------------------------------------------------------------------
1 | shouldHaveType('Karriere\CodeQuality\CodeStyleChecker');
13 | }
14 |
15 | function it_implements_the_correct_interface()
16 | {
17 | $this->shouldImplement('Karriere\CodeQuality\ComposerScriptInterface');
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/tests/specs/CodeStyleFixerSpec.php:
--------------------------------------------------------------------------------
1 | shouldHaveType('Karriere\CodeQuality\CodeStyleFixer');
15 | }
16 |
17 | function it_implements_the_correct_interface()
18 | {
19 | $this->shouldImplement('Karriere\CodeQuality\ComposerScriptInterface');
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/specs/Console/ScriptArgumentsTraitSpec.php:
--------------------------------------------------------------------------------
1 | beAnInstanceOf('tests\specs\Karriere\CodeQuality\Console\ScriptArgumentsTraitStub');
14 | }
15 |
16 | function it_returns_an_empty_array()
17 | {
18 | self::getComposerScriptArguments(array())
19 | ->shouldReturn(array());
20 | }
21 |
22 | function it_returns_a_key_value_array()
23 | {
24 | self::getComposerScriptArguments(array('--foo'))
25 | ->shouldReturn(array('foo' => null));
26 |
27 | self::getComposerScriptArguments(array('--foo=bar'))
28 | ->shouldReturn(array('foo' => 'bar'));
29 |
30 | self::getComposerScriptArguments(array('--foo=bar foo'))
31 | ->shouldReturn(array('foo' => 'bar foo'));
32 |
33 | self::getComposerScriptArguments(array('--foo', '--bar'))
34 | ->shouldReturn(array('foo' => null, 'bar' => null));
35 |
36 | self::getComposerScriptArguments(array('--foo=bar', '--bar=foo'))
37 | ->shouldReturn(array('foo' => 'bar', 'bar' => 'foo'));
38 |
39 | self::getComposerScriptArguments(array('--foo=bar', '--bar=foo'))
40 | ->shouldReturn(array('foo' => 'bar', 'bar' => 'foo'));
41 | }
42 |
43 | function it_returns_a_default_command()
44 | {
45 | self::getArrayValueByEventArguments(
46 | [
47 | 'foo' => 'command foo',
48 | 'bar' => 'command bar'
49 | ],
50 | ['env' => 'novalidenv'],
51 | 'env',
52 | false
53 | )->shouldReturn('command foo');
54 |
55 | self::getArrayValueByEventArguments(
56 | ['foo' => 'bar'],
57 | ['bar' => 'foo'],
58 | 'env',
59 | false
60 | )->shouldReturn('bar');
61 |
62 | self::getArrayValueByEventArguments(
63 | ['foo' => 'bar'],
64 | [],
65 | 'env',
66 | false
67 | )->shouldReturn('bar');
68 |
69 | self::getArrayValueByEventArguments(
70 | [
71 | 'default' => 'command default',
72 | 'verbose' => 'command verbose'
73 | ],
74 | [],
75 | '',
76 | false
77 | )->shouldReturn('command default');
78 | }
79 |
80 | function it_returns_a_command()
81 | {
82 | self::getArrayValueByEventArguments(
83 | [
84 | 'foo' => 'command foo',
85 | 'bar' => 'command bar'
86 | ],
87 | ['env' => 'foo'],
88 | 'env'
89 | )->shouldReturn('command foo');
90 |
91 | self::getArrayValueByEventArguments(
92 | [
93 | 'foo' => 'command foo',
94 | 'bar' => 'command bar'
95 | ],
96 | ['env' => 'bar'],
97 | 'env'
98 | )->shouldReturn('command bar');
99 |
100 | self::getArrayValueByEventArguments(
101 | [
102 | 'foo' => 'command foo',
103 | 'bar' => 'command bar'
104 | ],
105 | [
106 | 'env' => 'bar',
107 | 'foo' => 'bar'
108 | ],
109 | 'env'
110 | )->shouldReturn('command bar');
111 |
112 | self::getArrayValueByEventArguments(
113 | [
114 | 'default' => 'command default',
115 | 'verbose' => 'command verbose'
116 | ],
117 | ['verbose' => null]
118 | )->shouldReturn('command verbose');
119 | }
120 |
121 | function it_returns_if_argument_exists()
122 | {
123 | self::hasParameterOption('foo', array('foo' => null))
124 | ->shouldReturn(true);
125 |
126 | self::hasParameterOption('foo', array('bar' => null))
127 | ->shouldReturn(false);
128 |
129 | self::hasParameterOption('foo', array('foo' => 'bar'))
130 | ->shouldReturn(true);
131 |
132 | self::hasParameterOption('foo', array('bar' => 'foo'))
133 | ->shouldReturn(false);
134 |
135 | self::hasParameterOption('foo', array('foo' => 'bar', 'bar' => 'foo'))
136 | ->shouldReturn(true);
137 | }
138 | }
139 |
140 | class ScriptArgumentsTraitStub
141 | {
142 | use ScriptArgumentsTrait;
143 | }
144 |
--------------------------------------------------------------------------------
/tests/specs/MessDetectorSpec.php:
--------------------------------------------------------------------------------
1 | shouldHaveType('Karriere\CodeQuality\MessDetector');
15 | }
16 |
17 | function it_implements_the_correct_interface()
18 | {
19 | $this->shouldImplement('Karriere\CodeQuality\ComposerScriptInterface');
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/specs/Process/ProcessSpec.php:
--------------------------------------------------------------------------------
1 | beConstructedWith('foo');
14 | }
15 |
16 | function it_is_initializable()
17 | {
18 | $this->shouldHaveType('Karriere\CodeQuality\Process\Process');
19 | }
20 |
21 | function it_extends_a_base_class()
22 | {
23 | $this->shouldBeAnInstanceOf('Symfony\Component\Process\Process');
24 | }
25 |
26 | function its_tty_mode_can_be_set()
27 | {
28 | $this->setTtyByArguments(array(Process::NO_TTY_FLAG => null))->shouldReturn(true);
29 | $this->shouldNotBeTty();
30 |
31 | // Since we have no TTY mode on Windows, we have to adapt our spec according to the current OS.
32 | if ('\\' === DIRECTORY_SEPARATOR) {
33 | // Windows platform
34 | $this->setTtyByArguments(array('foo' => 'bar'))->shouldReturn(false);
35 | $this->shouldNotBeTty();
36 | } else {
37 | // We could test for Unix here, but Unix environments can have TTY or not.
38 | // Testing for `true` or `false` doesn't make sense, so we skip this test.
39 | }
40 | }
41 |
42 | function its_process_timeout_can_be_set()
43 | {
44 | $this->setProcessTimeoutByArguments(array(Process::PROCESS_TIMEOUT => 3600))->shouldReturn(true);
45 |
46 | $this->getTimeout()->shouldReturn((double) 3600);
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/tests/specs/SpecificationTestSpec.php:
--------------------------------------------------------------------------------
1 | shouldHaveType('Karriere\CodeQuality\SpecificationTest');
13 | }
14 |
15 | function it_implements_the_correct_interface()
16 | {
17 | $this->shouldImplement('Karriere\CodeQuality\ComposerScriptInterface');
18 | }
19 | }
20 |
--------------------------------------------------------------------------------