diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 43bb4830f8..afbb556daa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,10 +20,7 @@ again. All submissions, including submissions by project members, require review. We use [Dawn's Gerrit](https://dawn-review.googlesource.com/) for this purpose. -Tint generally follows the Google C++ style guide. There is a clang-format file -provided and a `tools/format` script which will run the formatter. There is also -a `tools/lint` script to run a linter. Overall try to use the same style and -convention as code around your change. +Submissions should follow the [Tint style guide](docs/style_guide.md). ## Community Guidelines diff --git a/docs/style_guide.md b/docs/style_guide.md new file mode 100644 index 0000000000..fce444146e --- /dev/null +++ b/docs/style_guide.md @@ -0,0 +1,50 @@ +# Tint style guide + +* Generally, follow the [Chromium style guide for C++](https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/c++.md) + which itself is built on the [Google C++ style guide](https://google.github.io/styleguide/cppguide.html). + +* Overall try to use the same style and convention as code around your change. + +* Code must be formatted. Use `clang-format` with the provided [.clang-format](../.clang-format) + file. The `tools/format` script runs the formatter. + +* Code should not have linting errors. + The `tools/lint` script runs the linter. So does `git cl upload`. + +* Do not use C++ exceptions + +* Do not use C++ RTTI. + Instead, use `tint::Castable::As()` from + [src/castable.h](../src/castable.h) + +* Generally, avoid `assert`. Instead, issue a [diagnostic](../src/diagnostic.h) + and fail gracefully, possibly by returning an error sentinel value. + Code that should not be reachable should call `TINT_UNREACHABLE` macro + and other internal error conditions should call the `TINT_ICE` macro. + See [src/debug.h](../src/debug.h) + +* Use `type` as part of a name only when the name refers to a type + in WGSL or another shader language processed by Tint. If the concept you are + trying to name is about distinguishing between alternatives, use `kind` instead. + +## Compiler support + +Tint requires C++14. + +Tint uses the Chromium build system and will stay synchronized with that system. +Compiler configurations beyond that baseline is on a best-effort basis. +We strive to support recent GCC and MSVC compilers. + +## Test code + +We might relax the above rules rules for test code, since test code +shouldn't ship to users. + +However, test code should still be readable and maintainable. + +For test code, the tradeoff between readability and maintainability +and other factors is weighted even more strongly toward readability +and maintainability. + + +