Files
kaizen/.github/CONTRIBUTING.md
irisz64 55f3024dc9 Squashed 'external/json/' changes from 60c48755e..55f93686c
55f93686c Merge branch 'release/3.12.0'
34e46d76d 🔖 set version to 3.12.0
00ecc7ed7 ⬆️ Bump github/codeql-action from 3.28.13 to 3.28.14 (#4726)
4424a0fcc 📝 update documentation (#4723)
11aa5f944 Make std::filesystem::path conversion to/from UTF-8 encoded string explicit (#4631)
79587f896 ⬆️ Bump mkdocs-material from 9.6.10 to 9.6.11 in /docs/mkdocs (#4715)
b67f8644e ⬆️ Bump actions/dependency-review-action from 4.5.0 to 4.6.0 (#4716)
71884486d ⬆️ Bump step-security/harden-runner from 2.11.0 to 2.11.1 (#4718)
9ef496738 ⬆️ Bump cpplint from 2.0.0 to 2.0.1 in /cmake/requirements (#4719)
9f40a7b45 ⬆️ Bump mkdocs-material from 9.6.9 to 9.6.10 in /docs/mkdocs (#4711)
d41ca94fa Adjust CMake minimal version (#4709)
3a5703931 ⬆️ Bump cppcheck from 1.4.8 to 1.5.0 in /cmake/requirements (#4698)
4d216e0c3 ⬆️ Bump actions/upload-artifact from 4.6.1 to 4.6.2 (#4700)
f971dd770 ⬆️ Bump github/codeql-action from 3.28.11 to 3.28.13 (#4707)
cd92c09c1 tests: Fix ignored attributes warning during build (#4670)
b477d2b95 Suppress clang-analyzer-webkit.NoUncountedMemberChecker (#4701)
11a835df8 ⬆️ Bump cppcheck from 1.4.7 to 1.4.8 in /cmake/requirements (#4697)
b592b6f2d ⬆️ Bump mkdocs-material from 9.6.8 to 9.6.9 in /docs/mkdocs (#4695)
e2c95baef ⬆️ Bump mkdocs-git-revision-date-localized-plugin (#4689)
7abcb5e9a fixes issue 4691 (#4693)
5474b2227 ⬆️ Bump mkdocs-material from 9.6.5 to 9.6.8 in /docs/mkdocs (#4688)
6e684350b ⬆️ Bump github/codeql-action from 3.28.10 to 3.28.11 (#4683)
f506d8acc ⬆️ Bump jinja2 from 3.1.5 to 3.1.6 in /tools/generate_natvis (#4680)
34665ae64 Correct typo in sax_interface.md (#4679)
f3dc4684b ⬆️ Bump github/codeql-action from 3.28.9 to 3.28.10 (#4661)
0b938993e ⬆️ Bump lukka/get-cmake from 3.31.5 to 3.31.6 (#4668)
543d8e417 ⬆️ Bump actions/upload-artifact from 4.6.0 to 4.6.1 (#4665)
f2e494686 ⬆️ Bump ossf/scorecard-action from 2.4.0 to 2.4.1 (#4664)
8215dbafb ⬆️ Bump mkdocs-material from 9.6.4 to 9.6.5 in /docs/mkdocs (#4659)
a3143f5f2 ⬆️ Bump step-security/harden-runner from 2.10.4 to 2.11.0 (#4652)
0b6881a95 Add regression test for #3810 (#4608)
a43350c4e Remove wsjcpp package manager (#4623)
8fb5d6f92 Some documentation updates (#4636)
2dc82053d ⬆️ Bump mkdocs-material from 9.5.50 to 9.6.4 in /docs/mkdocs (#4648)
bf6b1e2f4 ⬆️ Bump github/codeql-action from 3.28.6 to 3.28.9 (#4646)
606b6347e ⬆️ Bump coverallsapp/github-action from 2.3.4 to 2.3.6 (#4634)
c7d949f9f ⬆️ Bump github/codeql-action from 3.28.4 to 3.28.6 (#4635)
e90c860d5 Add note on derived return type for value function (#4628)
d0789e365 Bump lukka/get-cmake from 3.31.4 to 3.31.5 (#4625)
97dd60c22 Bump github/codeql-action from 3.28.3 to 3.28.4 (#4624)
666d06144 Bump github/codeql-action from 3.28.2 to 3.28.3 (#4620)
bf8ccc20e fix compilation issue (#4613)
786c5040e Bump github/codeql-action from 3.28.1 to 3.28.2 (#4617)
bd4fea39e Bump actions/stale from 9.0.0 to 9.1.0 (#4616)
8c7dcd3b4 Bump step-security/harden-runner from 2.10.3 to 2.10.4 (#4614)
b23cdeac2 Bump mkdocs-material from 9.5.49 to 9.5.50 in /docs/mkdocs (#4615)
1b813519c Add VisionOS support to Swift Package Manager Package.swift definition file (#4611)
f06604fce Bump the copyright years (#4606)
d23291ba2 use diagnostic positions in exceptions (#4585)
0f9e6ae09 Fix broken links (#4605)
8a882f32e Generate template functions with NLOHMANN_DEFINE_TYPE macros (#4597)
bdb8d2b7b Serialize empty tuple into '[]'  instead of null (#4594)
e72046ef9 Bump step-security/harden-runner from 2.10.2 to 2.10.3 (#4604)
4a0081a1c Bump actions/upload-artifact from 4.5.0 to 4.6.0 (#4603)
52b261421 Bump srvaroa/labeler (#4602)
f74e5c6a5 Bump github/codeql-action from 3.27.9 to 3.28.1 (#4601)
e25a82461 Bump lukka/get-cmake from 3.31.2 to 3.31.4 (#4600)
26cfec34b Clean up and document project files (#4560)
ad2ee1853 Fix coverage job (#4595)
2d42229f4 Support BSON uint64 de/serialization (#4590)
1809b3d80 Add note to Jetbrains support (#4592)
48e7b4c23 BJData Fixes (#4588)
0cb1241d5 Improve Bazel support: Switch to Bzlmod (#4584)
2e50d5b2f BJData optimized binary array type (#4513)

git-subtree-dir: external/json
git-subtree-split: 55f93686c01528224f448c19128836e7df245f72
2025-06-26 22:22:03 +02:00

223 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Contribution Guidelines
Thank you for your interest in contributing to this project! What began as an exercise to explore the exciting features
of C++11 has evolved into a [widely-used](https://json.nlohmann.me/home/customers/) JSON library. I truly appreciate all
the contributions from the community, whether it's proposing features, identifying bugs, or fixing mistakes! To ensure
that our collaboration is efficient and effective, please follow these guidelines.
Feel free to discuss or suggest improvements to this document
[by submitting a pull request](https://github.com/nlohmann/json/edit/develop/.github/CONTRIBUTING.md).
## Ways to Contribute
There are multiple ways to contribute.
### Reporting an issue
Please [create an issue](https://github.com/nlohmann/json/issues/new/choose), assuming one does not already exist, and
describe your concern. Note you need a [GitHub account](https://github.com/signup/free) for this.
Clearly describe the issue:
- If it is a bug, please describe how to **reproduce** it. If possible, attach a _complete example_ which demonstrates
the error. Please also state what you **expected** to happen instead of the error.
- If you propose a change or addition, try to give an **example** how the improved code could look like or how to use
it.
- If you found a compilation error, please tell us which **compiler** (version and operating system) you used and paste
the (relevant part of) the error messages to the ticket.
Please stick to the provided issue template
[bug report](https://github.com/nlohmann/json/blob/develop/.github/ISSUE_TEMPLATE/bug.yaml) if possible.
### Reporting a security vulnerability
You can report a security vulnerability according to our
[security policy](https://github.com/nlohmann/json/security/policy).
### Discussing a new feature
For questions, feature or support requests, please
[open a discussion](https://github.com/nlohmann/json/discussions/new). If you find a proposed answer satisfactory,
please use the "Mark as answer" button to make it easier for readers to see what helped and for the community to filter
for open questions.
### Proposing a fix or an improvement
Join an ongoing discussion or comment on an existing issue before starting to code. This can help to avoid duplicate
efforts or other frustration during the later review.
Create a [pull request](https://github.com/nlohmann/json/pulls?q=sort%3Aupdated-desc+is%3Apr+is%3Aopen) against the
`develop` branch and follow the pull request template. In particular,
- describe the changes in detail, both the what and why,
- reference existing issues where applicable,
- add tests to maintain 100% test coverage,
- update the documentation as needed, and
- ensure the source code is amalgamated.
We describe all points in detail below.
All contributions (including pull requests) must agree to the
[Developer Certificate of Origin (DCO) version 1.1](https://developercertificate.org). This is exactly the same one
created and used by the Linux kernel developers and posted on http://developercertificate.org/. This is a developer's
certification that he or she has the right to submit the patch for inclusion into the project.
## How to...
### Describe your changes
This library is primarily maintained as a spare-time project. As such, I can not make any guarantee how quickly changes
are merged and released. Therefore, it is very important to make the review as smooth as possible by explaining not only
_what_ you changed, but _why_. This rationale can be very valuable down the road when improvements or bugs are discussed
years later.
### Reference existing issues
[Link a pull request to an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue)
to clarify that a fix is forthcoming and which issue can be closed after merging. Only few cases (e.g., fixing typos)
dont require prior discussions.
### Write tests
The library has an extensive test suite that currently covers [100 %](https://coveralls.io/github/nlohmann/json) of the
library's code. These test are crucial to maintain API stability and give future contributors confidence that they do
not accidentally break things. As Titus Winters aptly put it:
> If you liked it, you should have put a test on it.
#### Run the tests
First, ensure the test suite runs before making any changes:
```sh
$ cmake -S. -B build
$ cmake --build build -j 10
$ ctest --test-dir build -j 10
```
The test suite should report:
```
100% tests passed, 0 tests failed out of 98
```
#### Add tests
The tests are located in [`tests/src/unit-*.cpp`](https://github.com/nlohmann/json/tree/develop/tests/src) and contain
[doctest assertions](https://github.com/doctest/doctest/blob/master/doc/markdown/assertions.md) like `CHECK`. The tests
are structured along the features of the library or the nature of the tests. Usually, it should be clear from the
context which existing file needs to be extended, and only very few cases require creating new test files.
When fixing a bug, edit `unit-regression2.cpp` and add a section referencing the fixed issue.
#### Exceptions
When you test exceptions, please use `CHECK_THROWS_WITH_AS` which also takes the `what()` argument of the thrown
exception into account.
#### Coverage
If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code
coverage report as artifact to the “Ubuntu” workflow.
### Update the documentation
The [main documentation](https://json.nlohmann.me) of the library is generated from the files
[`docs/mkdocs/docs`](https://github.com/nlohmann/json/blob/develop/docs/mkdocs/docs). This folder contains dedicated
pages for [certain features](https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/features), a list of
[all exceptions](https://github.com/nlohmann/json/blob/develop/docs/mkdocs/docs/home/exceptions.md), and an
[extensive API documentation](https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/api) with details on every
public API function.
Build the documentation locally using:
```shell
make install_venv -C docs/mkdocs
make serve -C docs/mkdocs
```
The documentation will then available at <http://127.0.0.1:8000/>. See the documentation of
[mkdocs](https://www.mkdocs.org) and [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) for more
information.
### Amalgamate the source code
The single-header files
[`single_include/nlohmann/json.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp) and
[`single_include/nlohmann/json_fwd.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json_fwd.hpp)
are **generated** from the source files in the
[`include/nlohmann` directory](https://github.com/nlohmann/json/tree/develop/include/nlohmann). **Do not** edit the
files directly; instead, modify the include/nlohmann sources and regenerate the files by executing:
```shell
make amalgamate
```
## Recommended documentation
- The librarys [README file](https://github.com/nlohmann/json/blob/master/README.md) is an excellent starting point to
understand its functionality.
- The [documentation page](https://json.nlohmann.me) is the reference documentation of the library.
- [RFC 8259](https://datatracker.ietf.org/doc/html/rfc8259) is the reference for the JavaScript Object Notation (JSON)
Data Interchange Format.
## Please don't...
Certain contributions are not helpful.
### Break the public API
We take pride in the library being used by
[numerous customers across various industries](https://json.nlohmann.me/home/customers/). They all rely on the
guarantees provided by [semantic versioning](https://semver.org). Please do not change the library such that the public
API of the 3.x.y version is broken. This includes:
- Changing function signatures (altering parameter types, return types, number of parameters) or changing the const-ness
of member functions.
- Removing functions.
- Renaming functions or classes.
- Changing exception handling.
- Changing exception ids.
- Changing access specifiers.
- Changing default arguments.
Although these guidelines may seem restrictive, they are essential for maintaining the librarys utility.
Breaking changes may be introduced when they are guarded with a feature macro such as
[`JSON_USE_IMPLICIT_CONVERSIONS`](https://json.nlohmann.me/api/macros/json_use_implicit_conversions/) which allows to
selectively change the behavior of the library. In next steps, the current behavior can then be deprecated. Using
feature macros then allows users to test their code against the library in the next major release.
### Break C++11 language conformance
This library is designed to work with C++11 and later. This means that any
[supported C++11 compiler](https://github.com/nlohmann/json/blob/master/README.md#supported-compilers) should compile
the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual
Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.
Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and
later against the respective [`JSON_HAS_CPP_14`](https://json.nlohmann.me/api/macros/json_has_cpp_11/) macros.
### Break JSON conformance
Please refrain from proposing changes that would **break [JSON](https://datatracker.ietf.org/doc/html/rfc8259)
conformance**. If you propose a conformant extension of JSON to be supported by the library, please motivate this
extension.
## Wanted
The following areas really need contribution and are always welcomed:
- Extending the **continuous integration** toward more exotic compilers such as Android NDK, Intel's Compiler, or the
bleeding-edge versions Clang.
- Improving the efficiency of the **JSON parser**. The current parser is implemented as a naive recursive descent parser
with hand coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That
said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep
the parser inside the `json.hpp` header, and I am not aware of approaches similar to [`re2c`](http://re2c.org) for
parsing.
- Extending and updating existing **benchmarks** to include (the most recent version of) this library. Though efficiency
is not everything, speed and memory consumption are very important characteristics for C++ developers, so having
proper comparisons would be interesting.
We look forward to your contributions and collaboration to enhance the library!