From 678a79d45a58d20953b07ecfc0587e6448238d0c Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Tue, 11 Aug 2015 18:33:56 +0530 Subject: [PATCH] CONTRIBUTING --- CONTRIBUTING.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000000..86a2f624118 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,51 @@ +# Contributing to rust-clippy + +Hello fellow Rustacean! Great to see your interest in compiler internals and lints! + +## Getting started + +All issues on Clippy are mentored, if you want help with a bug just ask @Manishearth or @llogiq. + +Some issues are easier than others. The [E-easy](https://github.com/Manishearth/rust-clippy/labels/E-easy) +label can be used to find the easy issues. If you want to work on an issue, please leave a comment +so that we can assign it to you! + +Issues marked [T-AST](https://github.com/Manishearth/rust-clippy/labels/T-AST) involve simple +matching of the syntax tree structure, and are generally easier than +[T-middle](https://github.com/Manishearth/rust-clippy/labels/T-middle) issues, which involve types +and resolved paths. + +Issues marked [E-medium](https://github.com/Manishearth/rust-clippy/labels/E-medium) are generally +pretty easy too, though it's recommended you work on an E-easy issue first. + +[Llogiq's blog post on lints](https://llogiq.github.io/2015/06/04/workflows.html) is a nice primer +to lint-writing, though it does get into advanced stuff. Most lints consist of an implementation of +`LintPass` with one or more of its default methods overridden. See the existing lints for examples +of this. + +T-AST issues will generally need you to match against a predefined syntax structure. To figure out +how this syntax structure is encoded in the AST, it is recommended to run `rustc -Z ast-json` on an +example of the structure and compare with the +[nodes in the AST docs](http://manishearth.github.io/rust-internals-docs/syntax/ast/). Usually +the lint will end up to be a nested series of matches and ifs, +[like so](https://github.com/Manishearth/rust-clippy/blob/de5ccdfab68a5e37689f3c950ed1532ba9d652a0/src/misc.rs#L34) + +T-middle issues can be more involved and require verifying types. The +[`middle::ty`](http://manishearth.github.io/rust-internals-docs/rustc/middle/ty) module contains a +lot of methods that are useful, though one of the most useful would be `expr_ty` (gives the type of +an AST expression). `match_def_path()` in Clippy's `utils` module can also be useful. + +## Contributions + +Clippy welcomes contributions from everyone. + +Contributions to Clippy should be made in the form of GitHub pull requests. Each pull request will +be reviewed by a core contributor (someone with permission to land patches) and either landed in the +main tree or given feedback for changes that would be required. + +## Conduct + +We follow the [Rust Code of Conduct](http://www.rust-lang.org/conduct.html). + + + \ No newline at end of file