Don't require module docs for Features and Assists

This commit is contained in:
Aleksey Kladov 2020-05-31 09:59:38 +02:00
parent f593393ebb
commit 8915183d7d
16 changed files with 140 additions and 45 deletions

View file

@ -4,9 +4,9 @@ use test_utils::mark;
use crate::{utils::FamousDefs, AssistContext, AssistId, Assists}; use crate::{utils::FamousDefs, AssistContext, AssistId, Assists};
// Assist add_from_impl_for_enum // Assist: add_from_impl_for_enum
// //
// Adds a From impl for an enum variant with one tuple field // Adds a From impl for an enum variant with one tuple field.
// //
// ``` // ```
// enum A { <|>One(u32) } // enum A { <|>One(u32) }

View file

@ -58,6 +58,25 @@ fn main() {
) )
} }
#[test]
fn doctest_add_from_impl_for_enum() {
check_doc_test(
"add_from_impl_for_enum",
r#####"
enum A { <|>One(u32) }
"#####,
r#####"
enum A { One(u32) }
impl From<u32> for A {
fn from(v: u32) -> Self {
A::One(v)
}
}
"#####,
)
}
#[test] #[test]
fn doctest_add_function() { fn doctest_add_function() {
check_doc_test( check_doc_test(

View file

@ -1,10 +1,6 @@
//! FIXME: write short doc here
use crate::TextRange;
use ra_syntax::{ use ra_syntax::{
ast::{self, AttrsOwner, NameOwner, TypeAscriptionOwner, TypeParamsOwner}, ast::{self, AttrsOwner, NameOwner, TypeAscriptionOwner, TypeParamsOwner},
match_ast, AstNode, SourceFile, SyntaxKind, SyntaxNode, WalkEvent, match_ast, AstNode, SourceFile, SyntaxKind, SyntaxNode, TextRange, WalkEvent,
}; };
#[derive(Debug, Clone)] #[derive(Debug, Clone)]

View file

@ -1,5 +1,3 @@
//! FIXME: write short doc here
use std::iter::successors; use std::iter::successors;
use hir::Semantics; use hir::Semantics;

View file

@ -1,5 +1,3 @@
//! FIXME: write short doc here
use hir::Semantics; use hir::Semantics;
use ra_ide_db::{ use ra_ide_db::{
defs::{classify_name, classify_name_ref}, defs::{classify_name, classify_name_ref},

View file

@ -1,5 +1,3 @@
//! FIXME: write short doc here
use hir::{Crate, ImplDef, Semantics}; use hir::{Crate, ImplDef, Semantics};
use ra_ide_db::RootDatabase; use ra_ide_db::RootDatabase;
use ra_syntax::{algo::find_node_at_offset, ast, AstNode}; use ra_syntax::{algo::find_node_at_offset, ast, AstNode};

View file

@ -1,5 +1,3 @@
//! FIXME: write short doc here
use ra_ide_db::RootDatabase; use ra_ide_db::RootDatabase;
use ra_syntax::{ast, match_ast, AstNode, SyntaxKind::*, SyntaxToken, TokenAtOffset}; use ra_syntax::{ast, match_ast, AstNode, SyntaxKind::*, SyntaxToken, TokenAtOffset};

View file

@ -1,5 +1,3 @@
//! FIXME: write short doc here
use itertools::Itertools; use itertools::Itertools;
use ra_fmt::{compute_ws, extract_trivial_expression}; use ra_fmt::{compute_ws, extract_trivial_expression};
use ra_syntax::{ use ra_syntax::{
@ -11,6 +9,15 @@ use ra_syntax::{
}; };
use ra_text_edit::{TextEdit, TextEditBuilder}; use ra_text_edit::{TextEdit, TextEditBuilder};
// Feature: Join Lines
//
// Join selected lines into one, smartly fixing up whitespace, trailing commas, and braces.
//
// |===
// | Editor | Action Name
//
// | VS Code | **Rust Analyzer: Join lines**
// |===
pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit { pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit {
let range = if range.is_empty() { let range = if range.is_empty() {
let syntax = file.syntax(); let syntax = file.syntax();

View file

@ -1,7 +1,16 @@
//! FIXME: write short doc here
use ra_syntax::{ast::AstNode, SourceFile, SyntaxKind, TextSize, T}; use ra_syntax::{ast::AstNode, SourceFile, SyntaxKind, TextSize, T};
// Feature: Matching Brace
//
// If the cursor is on any brace (`<>(){}[]`) which is a part of a brace-pair,
// moves cursor to the matching brace. It uses the actual parser to determine
// braces, so it won't confuse generics with comparisons.
//
// |===
// | Editor | Action Name
//
// | VS Code | **Rust Analyzer: Find matching brace**
// |===
pub fn matching_brace(file: &SourceFile, offset: TextSize) -> Option<TextSize> { pub fn matching_brace(file: &SourceFile, offset: TextSize) -> Option<TextSize> {
const BRACES: &[SyntaxKind] = const BRACES: &[SyntaxKind] =
&[T!['{'], T!['}'], T!['['], T![']'], T!['('], T![')'], T![<], T![>]]; &[T!['{'], T!['}'], T!['['], T![']'], T!['('], T![')'], T![<], T![>]];

View file

@ -1,5 +1,3 @@
//! FIXME: write short doc here
use hir::Semantics; use hir::Semantics;
use ra_db::{CrateId, FileId, FilePosition}; use ra_db::{CrateId, FileId, FilePosition};
use ra_ide_db::RootDatabase; use ra_ide_db::RootDatabase;
@ -11,6 +9,16 @@ use test_utils::mark;
use crate::NavigationTarget; use crate::NavigationTarget;
// Feature: Parent Module
//
// Navigates to the parent module of the current module.
//
// |===
// | Editor | Action Name
//
// | VS Code | **Rust Analyzer: Locate parent module**
// |===
/// This returns `Vec` because a module may be included from several places. We /// This returns `Vec` because a module may be included from several places. We
/// don't handle this case yet though, so the Vec has length at most one. /// don't handle this case yet though, so the Vec has length at most one.
pub(crate) fn parent_module(db: &RootDatabase, position: FilePosition) -> Vec<NavigationTarget> { pub(crate) fn parent_module(db: &RootDatabase, position: FilePosition) -> Vec<NavigationTarget> {

View file

@ -1,5 +1,3 @@
//! FIXME: write short doc here
use hir::{AsAssocItem, Attrs, HirFileId, InFile, Semantics}; use hir::{AsAssocItem, Attrs, HirFileId, InFile, Semantics};
use itertools::Itertools; use itertools::Itertools;
use ra_ide_db::RootDatabase; use ra_ide_db::RootDatabase;

View file

@ -1,5 +1,3 @@
//! FIXME: write short doc here
use ra_db::SourceDatabase; use ra_db::SourceDatabase;
use ra_ide_db::RootDatabase; use ra_ide_db::RootDatabase;
use ra_syntax::{ use ra_syntax::{
@ -8,8 +6,16 @@ use ra_syntax::{
SyntaxToken, TextRange, TextSize, SyntaxToken, TextRange, TextSize,
}; };
pub use ra_db::FileId; // Feature: Show Syntax Tree
//
// Shows the parse tree of the current file. It exists mostly for debugging
// rust-analyzer itself.
//
// |===
// | Editor | Action Name
//
// | VS Code | **Rust Analyzer: Show Syntax Tree**
// |===
pub(crate) fn syntax_tree( pub(crate) fn syntax_tree(
db: &RootDatabase, db: &RootDatabase,
file_id: FileId, file_id: FileId,

View file

@ -56,6 +56,24 @@ fn main() {
} }
``` ```
## `add_from_impl_for_enum`
Adds a From impl for an enum variant with one tuple field.
```rust
// BEFORE
enum A { ┃One(u32) }
// AFTER
enum A { One(u32) }
impl From<u32> for A {
fn from(v: u32) -> Self {
A::One(v)
}
}
```
## `add_function` ## `add_function`
Adds a stub function with a signature matching the function under the cursor. Adds a stub function with a signature matching the function under the cursor.

View file

@ -4,24 +4,8 @@ you can use <kbd>Ctrl+Shift+P</kbd> to search for the corresponding action.
### Commands <kbd>ctrl+shift+p</kbd> ### Commands <kbd>ctrl+shift+p</kbd>
#### Parent Module
Navigates to the parent module of the current module.
#### Matching Brace
If the cursor is on any brace (`<>(){}[]`) which is a part of a brace-pair,
moves cursor to the matching brace. It uses the actual parser to determine
braces, so it won't confuse generics with comparisons.
#### Join Lines
Join selected lines into one, smartly fixing up whitespace and trailing commas.
#### Show Syntax Tree
Shows the parse tree of the current file. It exists mostly for debugging
rust-analyzer itself.
#### Expand Macro Recursively #### Expand Macro Recursively

View file

@ -68,6 +68,34 @@ Navigates to the type of an identifier.
|=== |===
=== Join Lines
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/join_lines.rs[join_lines.rs]
Join selected lines into one, smartly fixing up whitespace, trailing commas, and braces.
|===
| Editor | Action Name
| VS Code | **Rust Analyzer: Join lines**
|===
=== Matching Brace
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/matching_brace.rs[matching_brace.rs]
If the cursor is on any brace (`<>(){}[]`) which is a part of a brace-pair,
moves cursor to the matching brace. It uses the actual parser to determine
braces, so it won't confuse generics with comparisons.
|===
| Editor | Action Name
| VS Code | **Rust Analyzer: Find matching brace**
|===
=== On Typing Assists === On Typing Assists
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/typing.rs[typing.rs] **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/typing.rs[typing.rs]
@ -79,6 +107,19 @@ Some features trigger on typing certain characters:
- typing `.` in a chain method call auto-indents - typing `.` in a chain method call auto-indents
=== Parent Module
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/parent_module.rs[parent_module.rs]
Navigates to the parent module of the current module.
|===
| Editor | Action Name
| VS Code | **Rust Analyzer: Locate parent module**
|===
=== Run === Run
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/runnables.rs[runnables.rs] **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/runnables.rs[runnables.rs]
@ -94,6 +135,20 @@ to a shortcut!
|=== |===
=== Show Syntax Tree
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/syntax_tree.rs[syntax_tree.rs]
Shows the parse tree of the current file. It exists mostly for debugging
rust-analyzer itself.
|===
| Editor | Action Name
| VS Code | **Rust Analyzer: Show Syntax Tree**
|===
=== Workspace Symbol === Workspace Symbol
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide_db/src/symbol_index.rs[symbol_index.rs] **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide_db/src/symbol_index.rs[symbol_index.rs]

View file

@ -102,7 +102,7 @@ impl TidyDocs {
fn visit(&mut self, path: &Path, text: &str) { fn visit(&mut self, path: &Path, text: &str) {
// Test hopefully don't really need comments, and for assists we already // Test hopefully don't really need comments, and for assists we already
// have special comments which are source of doc tests and user docs. // have special comments which are source of doc tests and user docs.
if is_exclude_dir(path, &["tests", "test_data", "handlers"]) { if is_exclude_dir(path, &["tests", "test_data"]) {
return; return;
} }
@ -117,9 +117,12 @@ impl TidyDocs {
if first_line.starts_with("//!") { if first_line.starts_with("//!") {
if first_line.contains("FIXME") { if first_line.contains("FIXME") {
self.contains_fixme.push(path.to_path_buf()) self.contains_fixme.push(path.to_path_buf());
} }
} else { } else {
if text.contains("// Feature:") || text.contains("// Assist:") {
return;
}
self.missing_docs.push(path.display().to_string()); self.missing_docs.push(path.display().to_string());
} }