|
1 | | -//! FIXME: write short doc here |
2 | | -
|
3 | 1 | mod completion_config; |
4 | 2 | mod completion_item; |
5 | 3 | mod completion_context; |
@@ -35,6 +33,51 @@ pub use crate::completion::{ |
35 | 33 | completion_item::{CompletionItem, CompletionItemKind, CompletionScore, InsertTextFormat}, |
36 | 34 | }; |
37 | 35 |
|
| 36 | +//FIXME: split the following feature into fine-grained features. |
| 37 | + |
| 38 | +// Feature: Magic Completions |
| 39 | +// |
| 40 | +// In addition to usual reference completion, rust-analyzer provides some ✨magic✨ |
| 41 | +// completions as well: |
| 42 | +// |
| 43 | +// Keywords like `if`, `else` `while`, `loop` are completed with braces, and cursor |
| 44 | +// is placed at the appropriate position. Even though `if` is easy to type, you |
| 45 | +// still want to complete it, to get ` { }` for free! `return` is inserted with a |
| 46 | +// space or `;` depending on the return type of the function. |
| 47 | +// |
| 48 | +// When completing a function call, `()` are automatically inserted. If a function |
| 49 | +// takes arguments, the cursor is positioned inside the parenthesis. |
| 50 | +// |
| 51 | +// There are postfix completions, which can be triggered by typing something like |
| 52 | +// `foo().if`. The word after `.` determines postfix completion. Possible variants are: |
| 53 | +// |
| 54 | +// - `expr.if` -> `if expr {}` or `if let ... {}` for `Option` or `Result` |
| 55 | +// - `expr.match` -> `match expr {}` |
| 56 | +// - `expr.while` -> `while expr {}` or `while let ... {}` for `Option` or `Result` |
| 57 | +// - `expr.ref` -> `&expr` |
| 58 | +// - `expr.refm` -> `&mut expr` |
| 59 | +// - `expr.not` -> `!expr` |
| 60 | +// - `expr.dbg` -> `dbg!(expr)` |
| 61 | +// |
| 62 | +// There also snippet completions: |
| 63 | +// |
| 64 | +// .Expressions |
| 65 | +// - `pd` -> `println!("{:?}")` |
| 66 | +// - `ppd` -> `println!("{:#?}")` |
| 67 | +// |
| 68 | +// .Items |
| 69 | +// - `tfn` -> `#[test] fn f(){}` |
| 70 | +// - `tmod` -> |
| 71 | +// ```rust |
| 72 | +// #[cfg(test)] |
| 73 | +// mod tests { |
| 74 | +// use super::*; |
| 75 | +// |
| 76 | +// #[test] |
| 77 | +// fn test_fn() {} |
| 78 | +// } |
| 79 | +// ``` |
| 80 | + |
38 | 81 | /// Main entry point for completion. We run completion as a two-phase process. |
39 | 82 | /// |
40 | 83 | /// First, we look at the position and collect a so-called `CompletionContext. |
|
0 commit comments