Thank you for contributing to the PHP Standard Library!
The code of conduct is described in CODE_OF_CONDUCT.md
We use GitHub issues to track issues within PSL.
Please ensure your description is clear and has sufficient instructions to be able to reproduce the issue.
Contributing to open-source can be scary. Don't be afraid! We are looking forward working together to improve this package!
Here is a small checklist to get you going:
- Discuss the changes you want to make first!
- Create a fork of this repository.
- Clone your own repository.
- Run
make install
to get everything set-up for you. - Checkout a new branch and make the changes you want to make.
- Run
make check
to verify your code is ok to submit. - Submit your Pull Request.
Before we can merge your Pull-Request, here are some guidelines that you need to follow.
These guidelines exist not to annoy you, but to keep the code base clean, unified and future proof.
- All functions should be typed as strictly as possible
- The library should be internally consistent
- References may not be used
- Arguments should be as general as possible. For example, for
array
functions, preferiterable
inputs where practical, falling back toarray
when needed. - Return types should be as specific as possible
- All files should contain
declare(strict_types=1);
This is not exhaustive list.
- Functions argument order should be consistent within the library
- All iterable-related functions take the iterable as the first argument ( e.g.
Dict\map
andDict\filter
) $haystack
,$needle
, and$pattern
are in the same order for all functions that take them
- All iterable-related functions take the iterable as the first argument ( e.g.
- Functions should be consistently named.
- If an operation can conceivably operate on either keys or values, the default is to operate on the values - the version that operates on keys should have
_key
suffix (e.g.Iter\last
,Iter\last_key
,Iter\contains
,Iter\contains_key
) - Iterable functions that do an operation based on a user-supplied keying function for each element should be suffixed with
_by
(e.g.Vec\sort_by
,Dict\group_by
,Math\max_by
)
PSL tries to maintain a 100% code coverage, meaning everything within the library MUST be tested.
If you are submitting a bug-fix, please add a test case to reproduce the bug. If you are submitting a new feature, please make sure to add tests for all possible code paths.
To run the tests, use make unit-tests
.
PSL follows a custom set of rules that extend PSR-12, PSR-2, and PSR-1.
To check if your code contains any issues that violate PSL rules, use make coding-standard-check
.
You may fix many of the issues using make coding-standard-fix
.
PSL uses Psalm static analysis tool to avoid type issues within the code base, and to provide a better API for the end user.
PSL is configured to pass the strictest psalm level.
To ensure that your code doesn't contain any type issues, use make static-analysis
.
To ensure that your code doesn't introduce any security issues, use make security-analysis
By contributing to the PHP Standard Library ( PSL ), you agree that your contributions will be licensed under the LICENSE file in the root directory of this source tree.
You can read more about how to report security issues in our Security Policy.