diff options
author | Edwin Cheng <[email protected]> | 2019-11-19 14:56:48 +0000 |
---|---|---|
committer | Edwin Cheng <[email protected]> | 2019-11-19 14:56:48 +0000 |
commit | 4012da07fd22223660a21c65d54d10a9a632eda0 (patch) | |
tree | 1081edcfc24b16ba0d0433d40e499458039aa5f3 | |
parent | 94c63d280246971983cad4fa6ce2d333e3ba9f02 (diff) |
Change return type of expand_macro
-rw-r--r-- | crates/ra_ide_api/src/expand_macro.rs | 14 | ||||
-rw-r--r-- | crates/ra_ide_api/src/lib.rs | 3 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/handlers.rs | 7 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/req.rs | 9 | ||||
-rw-r--r-- | editors/code/src/commands/expand_macro.ts | 13 |
5 files changed, 33 insertions, 13 deletions
diff --git a/crates/ra_ide_api/src/expand_macro.rs b/crates/ra_ide_api/src/expand_macro.rs index bd557d455..44e77ba50 100644 --- a/crates/ra_ide_api/src/expand_macro.rs +++ b/crates/ra_ide_api/src/expand_macro.rs | |||
@@ -11,7 +11,12 @@ use ra_syntax::{ | |||
11 | AstNode, NodeOrToken, SyntaxKind, SyntaxNode, WalkEvent, | 11 | AstNode, NodeOrToken, SyntaxKind, SyntaxNode, WalkEvent, |
12 | }; | 12 | }; |
13 | 13 | ||
14 | pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<(String, String)> { | 14 | pub struct ExpandedMacro { |
15 | pub name: String, | ||
16 | pub expansion: String, | ||
17 | } | ||
18 | |||
19 | pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<ExpandedMacro> { | ||
15 | let parse = db.parse(position.file_id); | 20 | let parse = db.parse(position.file_id); |
16 | let file = parse.tree(); | 21 | let file = parse.tree(); |
17 | let name_ref = find_node_at_offset::<ast::NameRef>(file.syntax(), position.offset)?; | 22 | let name_ref = find_node_at_offset::<ast::NameRef>(file.syntax(), position.offset)?; |
@@ -23,8 +28,8 @@ pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option< | |||
23 | // FIXME: | 28 | // FIXME: |
24 | // macro expansion may lose all white space information | 29 | // macro expansion may lose all white space information |
25 | // But we hope someday we can use ra_fmt for that | 30 | // But we hope someday we can use ra_fmt for that |
26 | let res = insert_whitespaces(expanded); | 31 | let expansion = insert_whitespaces(expanded); |
27 | Some((name_ref.text().to_string(), res)) | 32 | Some(ExpandedMacro { name: name_ref.text().to_string(), expansion }) |
28 | } | 33 | } |
29 | 34 | ||
30 | fn expand_macro_recur( | 35 | fn expand_macro_recur( |
@@ -87,7 +92,8 @@ mod tests { | |||
87 | let (analysis, pos) = analysis_and_position(fixture); | 92 | let (analysis, pos) = analysis_and_position(fixture); |
88 | 93 | ||
89 | let result = analysis.expand_macro(pos).unwrap().unwrap(); | 94 | let result = analysis.expand_macro(pos).unwrap().unwrap(); |
90 | assert_eq!(result, (expected.0.to_string(), expected.1.to_string())); | 95 | assert_eq!(result.name, expected.0.to_string()); |
96 | assert_eq!(result.expansion, expected.1.to_string()); | ||
91 | } | 97 | } |
92 | 98 | ||
93 | #[test] | 99 | #[test] |
diff --git a/crates/ra_ide_api/src/lib.rs b/crates/ra_ide_api/src/lib.rs index d1b73ef6f..57ed97147 100644 --- a/crates/ra_ide_api/src/lib.rs +++ b/crates/ra_ide_api/src/lib.rs | |||
@@ -66,6 +66,7 @@ pub use crate::{ | |||
66 | completion::{CompletionItem, CompletionItemKind, InsertTextFormat}, | 66 | completion::{CompletionItem, CompletionItemKind, InsertTextFormat}, |
67 | diagnostics::Severity, | 67 | diagnostics::Severity, |
68 | display::{file_structure, FunctionSignature, NavigationTarget, StructureNode}, | 68 | display::{file_structure, FunctionSignature, NavigationTarget, StructureNode}, |
69 | expand_macro::ExpandedMacro, | ||
69 | feature_flags::FeatureFlags, | 70 | feature_flags::FeatureFlags, |
70 | folding_ranges::{Fold, FoldKind}, | 71 | folding_ranges::{Fold, FoldKind}, |
71 | hover::HoverResult, | 72 | hover::HoverResult, |
@@ -297,7 +298,7 @@ impl Analysis { | |||
297 | self.with_db(|db| syntax_tree::syntax_tree(&db, file_id, text_range)) | 298 | self.with_db(|db| syntax_tree::syntax_tree(&db, file_id, text_range)) |
298 | } | 299 | } |
299 | 300 | ||
300 | pub fn expand_macro(&self, position: FilePosition) -> Cancelable<Option<(String, String)>> { | 301 | pub fn expand_macro(&self, position: FilePosition) -> Cancelable<Option<ExpandedMacro>> { |
301 | self.with_db(|db| expand_macro::expand_macro(db, position)) | 302 | self.with_db(|db| expand_macro::expand_macro(db, position)) |
302 | } | 303 | } |
303 | 304 | ||
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs index 783b0a827..0461bf385 100644 --- a/crates/ra_lsp_server/src/main_loop/handlers.rs +++ b/crates/ra_lsp_server/src/main_loop/handlers.rs | |||
@@ -50,7 +50,7 @@ pub fn handle_syntax_tree(world: WorldSnapshot, params: req::SyntaxTreeParams) - | |||
50 | pub fn handle_expand_macro( | 50 | pub fn handle_expand_macro( |
51 | world: WorldSnapshot, | 51 | world: WorldSnapshot, |
52 | params: req::ExpandMacroParams, | 52 | params: req::ExpandMacroParams, |
53 | ) -> Result<Option<(String, String)>> { | 53 | ) -> Result<Option<req::ExpandedMacro>> { |
54 | let _p = profile("handle_expand_macro"); | 54 | let _p = profile("handle_expand_macro"); |
55 | let file_id = params.text_document.try_conv_with(&world)?; | 55 | let file_id = params.text_document.try_conv_with(&world)?; |
56 | let line_index = world.analysis().file_line_index(file_id)?; | 56 | let line_index = world.analysis().file_line_index(file_id)?; |
@@ -58,7 +58,10 @@ pub fn handle_expand_macro( | |||
58 | 58 | ||
59 | match offset { | 59 | match offset { |
60 | None => Ok(None), | 60 | None => Ok(None), |
61 | Some(offset) => Ok(world.analysis().expand_macro(FilePosition { file_id, offset })?), | 61 | Some(offset) => { |
62 | let res = world.analysis().expand_macro(FilePosition { file_id, offset })?; | ||
63 | Ok(res.map(|it| req::ExpandedMacro { name: it.name, expansion: it.expansion })) | ||
64 | } | ||
62 | } | 65 | } |
63 | } | 66 | } |
64 | 67 | ||
diff --git a/crates/ra_lsp_server/src/req.rs b/crates/ra_lsp_server/src/req.rs index dbc0e9624..39361b7e8 100644 --- a/crates/ra_lsp_server/src/req.rs +++ b/crates/ra_lsp_server/src/req.rs | |||
@@ -45,11 +45,18 @@ pub struct SyntaxTreeParams { | |||
45 | pub range: Option<Range>, | 45 | pub range: Option<Range>, |
46 | } | 46 | } |
47 | 47 | ||
48 | #[derive(Serialize, Debug)] | ||
49 | #[serde(rename_all = "camelCase")] | ||
50 | pub struct ExpandedMacro { | ||
51 | pub name: String, | ||
52 | pub expansion: String, | ||
53 | } | ||
54 | |||
48 | pub enum ExpandMacro {} | 55 | pub enum ExpandMacro {} |
49 | 56 | ||
50 | impl Request for ExpandMacro { | 57 | impl Request for ExpandMacro { |
51 | type Params = ExpandMacroParams; | 58 | type Params = ExpandMacroParams; |
52 | type Result = Option<(String, String)>; | 59 | type Result = Option<ExpandedMacro>; |
53 | const METHOD: &'static str = "rust-analyzer/expandMacro"; | 60 | const METHOD: &'static str = "rust-analyzer/expandMacro"; |
54 | } | 61 | } |
55 | 62 | ||
diff --git a/editors/code/src/commands/expand_macro.ts b/editors/code/src/commands/expand_macro.ts index d024a70e0..3fc3e0391 100644 --- a/editors/code/src/commands/expand_macro.ts +++ b/editors/code/src/commands/expand_macro.ts | |||
@@ -2,13 +2,16 @@ import * as vscode from 'vscode'; | |||
2 | import { Position, TextDocumentIdentifier } from 'vscode-languageclient'; | 2 | import { Position, TextDocumentIdentifier } from 'vscode-languageclient'; |
3 | import { Server } from '../server'; | 3 | import { Server } from '../server'; |
4 | 4 | ||
5 | type ExpandMacroResult = [string, string]; | 5 | interface ExpandedMacro { |
6 | name: string, | ||
7 | expansion: string, | ||
8 | } | ||
6 | 9 | ||
7 | function code_format([name, text]: [string, string]): vscode.MarkdownString { | 10 | function code_format(expanded: ExpandedMacro): vscode.MarkdownString { |
8 | const markdown = new vscode.MarkdownString( | 11 | const markdown = new vscode.MarkdownString( |
9 | `#### Recursive expansion of ${name}! macro` | 12 | `#### Recursive expansion of ${expanded.name}! macro` |
10 | ); | 13 | ); |
11 | markdown.appendCodeblock(text, 'rust'); | 14 | markdown.appendCodeblock(expanded.expansion, 'rust'); |
12 | return markdown; | 15 | return markdown; |
13 | } | 16 | } |
14 | 17 | ||
@@ -23,7 +26,7 @@ export class ExpandMacroHoverProvider implements vscode.HoverProvider { | |||
23 | textDocument: { uri: document.uri.toString() }, | 26 | textDocument: { uri: document.uri.toString() }, |
24 | position | 27 | position |
25 | }; | 28 | }; |
26 | const result = await Server.client.sendRequest<ExpandMacroResult>( | 29 | const result = await Server.client.sendRequest<ExpandedMacro>( |
27 | 'rust-analyzer/expandMacro', | 30 | 'rust-analyzer/expandMacro', |
28 | request | 31 | request |
29 | ); | 32 | ); |