Contributing
Runesmith follows the same rules as its sibling projects. This page lists them; CONTRIBUTING.md in the repository is the short version.
Before you start
- For a bug, open an issue with the steps to reproduce it. For a security problem, follow
SECURITY.mdinstead. - For a larger change, such as a new panel or a new project, open an issue first, so the approach is agreed on before you write the code.
- A new project in
src/must pass every item of the checklist in Projects and when to add one.
Code
- The solution builds without warnings; CI builds with
-warnaserror. - Modern C#: file-scoped namespaces, primary constructors where they fit, collection expressions,
varwhere the type is obvious. - Public types and members have XML documentation that says what they do for the caller.
- Comments explain only what the code cannot say, such as a constraint or a workaround, in one line. They never narrate how the code came to be.
- Keep classes small and focused, and add an abstraction only when something uses it today.
dotnet format whitespaceanddotnet format stylekeep the formatting; the Checks workflow fails when they would change something.BannedSymbols.txtlists calls that are easy to get wrong. Add an entry, with the reason and what to use instead, when you find another.
Documentation
When behavior, a setting, a command, a key binding or the plugin API changes, update the site in website/ in the same commit.
website/STYLE.md says how pages are written: plain and direct, sentence-case headings, no em dashes and no emoji.
Commits
Write each commit message as a Conventional Commit, such as
fix(editor): keep the caret in view after a paste. The types are feat, fix, perf, refactor, test, docs, ci, chore and
revert. The scope names the part of Runesmith, such as text, lsp, sdk, composition, workspace, languages, editor, shell,
app, csharp or templates. The Checks workflow checks every commit of a pull request.
Pull requests
Open a pull request against main and fill in the template. It asks for:
- what changes for people who use Runesmith or write plugins, and why;
- the tests that cover the change;
- updated documentation;
- for user interface changes, a check in light and dark, and docked, floating and in its own window where it can be;
- for changes to
Runesmith.Sdk, whetherRunesmithApi.Versionmust change.
License
Runesmith is licensed under the Apache License 2.0. Contributions you submit are licensed under the same terms, as section 5 of the license describes.