Guidelines for contributing to the Roslyn repo.
- DO ensure submissions pass all Jenkins legs and are merge conflict free.
- DO follow the .editorconfig settings for each directory.
- DO submit language feature requests as issues in the C# language / VB language repos. Once a feature is championed and validated by LDM, a developer will be assigned to help begin a prototype on this repo inside a feature branch.
- DO NOT submit language features as PRs to this repo first, or they will likely be declined.
- DO submit issues for other features. This facilitates discussion of a feature separately from its implementation, and increases the acceptance rates for pull requests.
- DO NOT submit large code formatting changes without discussing with the team first.
When you are ready to proceed with making a change, get set up to build the code and familiarize yourself with our developer workflow.
These two blogs posts on contributing code to open source projects are good too: Open Source Contribution Etiquette by Miguel de Icaza and Don’t “Push” Your Pull Requests by Ilya Grigorik.
- DO use a descriptive title that identifies the issue to be addressed or the requested feature. For example, when describing an issue where the compiler is not behaving as expected, write your bug title in terms of what the compiler should do rather than what it is doing – “C# compiler should report CS1234 when Xyz is used in Abcd.”
- DO specify a detailed description of the issue or requested feature.
- DO provide the following for bug reports
- Describe the expected behavior and the actual behavior. If it is not self-evident such as in the case of a crash, provide an explanation for why the expected behavior is expected.
- Provide example code that reproduces the issue.
- Specify any relevant exception messages and stack traces.
- DO subscribe to notifications for the created issue in case there are any follow up questions.
The Roslyn project is a member of the .NET Foundation and follows the same developer guide. The repo also includes .editorconfig files to help enforce this convention. Contributors should ensure they follow these guidelines when making submissions.
- DO use the coding style outlined in the .NET Foundation Coding Guidelines
- DO use plain code to validate parameters at public boundaries. Do not use Contracts or magic helpers.
if (argument == null)
{
throw new ArgumentNullException(nameof(argument));
}
- DO use
Debug.Assert()
for checks not needed in retail builds. Always include a “message” string in your assert to identify failure conditions. Add assertions to document assumptions on non-local program state or parameter values, e.g. “At this point in parsing the scanner should have been advanced to a ‘.’ token by the caller”. - DO avoid allocations in compiler hot paths:
- Avoid LINQ.
- Avoid using
foreach
over collections that do not have astruct
enumerator. - Consider using an object pool. There are many usages of object pools in the compiler to see an example.
- DO apply the spirit of C# guidelines to Visual Basic when there are natural analogs.
- DO place all field declarations at the beginning of a type definition
Our team finds using this enhanced source view of Roslyn helpful when developing.