diff options
-rw-r--r-- | crates/hir/src/code_model.rs | 18 | ||||
-rw-r--r-- | crates/ide/src/view_hir.rs | 24 | ||||
-rw-r--r-- | docs/dev/README.md | 2 | ||||
-rw-r--r-- | docs/dev/lsp-extensions.md | 13 |
4 files changed, 34 insertions, 23 deletions
diff --git a/crates/hir/src/code_model.rs b/crates/hir/src/code_model.rs index 9b78944c6..f68299d3a 100644 --- a/crates/hir/src/code_model.rs +++ b/crates/hir/src/code_model.rs | |||
@@ -1,5 +1,5 @@ | |||
1 | //! FIXME: write short doc here | 1 | //! FIXME: write short doc here |
2 | use std::{iter, sync::Arc}; | 2 | use std::{fmt::Write, iter, sync::Arc}; |
3 | 3 | ||
4 | use arrayvec::ArrayVec; | 4 | use arrayvec::ArrayVec; |
5 | use base_db::{CrateDisplayName, CrateId, Edition, FileId}; | 5 | use base_db::{CrateDisplayName, CrateId, Edition, FileId}; |
@@ -729,8 +729,7 @@ impl DefWithBody { | |||
729 | 729 | ||
730 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | 730 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
731 | pub struct Function { | 731 | pub struct Function { |
732 | // DO NOT MERGE: this was previously pub(crate) | 732 | pub(crate) id: FunctionId, |
733 | pub id: FunctionId, | ||
734 | } | 733 | } |
735 | 734 | ||
736 | impl Function { | 735 | impl Function { |
@@ -798,6 +797,19 @@ impl Function { | |||
798 | pub fn has_body(self, db: &dyn HirDatabase) -> bool { | 797 | pub fn has_body(self, db: &dyn HirDatabase) -> bool { |
799 | db.function_data(self.id).has_body | 798 | db.function_data(self.id).has_body |
800 | } | 799 | } |
800 | |||
801 | /// A textual representation of the HIR of this function for debugging purposes. | ||
802 | pub fn debug_hir(self, db: &dyn HirDatabase) -> String { | ||
803 | let body = db.body(self.id.into()); | ||
804 | |||
805 | let mut result = String::new(); | ||
806 | writeln!(&mut result, "HIR expressions in the body of `{}`:", self.name(db)).unwrap(); | ||
807 | for (id, expr) in body.exprs.iter() { | ||
808 | writeln!(&mut result, "{:?}: {:?}", id, expr).unwrap(); | ||
809 | } | ||
810 | |||
811 | result | ||
812 | } | ||
801 | } | 813 | } |
802 | 814 | ||
803 | // Note: logically, this belongs to `hir_ty`, but we are not using it there yet. | 815 | // Note: logically, this belongs to `hir_ty`, but we are not using it there yet. |
diff --git a/crates/ide/src/view_hir.rs b/crates/ide/src/view_hir.rs index e48f2cfe0..cfcfb7cfb 100644 --- a/crates/ide/src/view_hir.rs +++ b/crates/ide/src/view_hir.rs | |||
@@ -1,11 +1,9 @@ | |||
1 | use hir::{Function, Semantics}; | 1 | use hir::{Function, Semantics}; |
2 | use hir::db::DefDatabase; | ||
3 | use ide_db::base_db::FilePosition; | 2 | use ide_db::base_db::FilePosition; |
4 | use ide_db::RootDatabase; | 3 | use ide_db::RootDatabase; |
5 | use syntax::{AstNode, algo::find_node_at_offset, ast}; | 4 | use syntax::{algo::find_node_at_offset, ast, AstNode}; |
6 | use std::fmt::Write; | ||
7 | 5 | ||
8 | // Feature: View hir | 6 | // Feature: View Hir |
9 | // | 7 | // |
10 | // |=== | 8 | // |=== |
11 | // | Editor | Action Name | 9 | // | Editor | Action Name |
@@ -20,20 +18,8 @@ fn body_hir(db: &RootDatabase, position: FilePosition) -> Option<String> { | |||
20 | let sema = Semantics::new(db); | 18 | let sema = Semantics::new(db); |
21 | let source_file = sema.parse(position.file_id); | 19 | let source_file = sema.parse(position.file_id); |
22 | 20 | ||
23 | let function = find_node_at_offset::<ast::Fn>( | 21 | let function = find_node_at_offset::<ast::Fn>(source_file.syntax(), position.offset)?; |
24 | source_file.syntax(), | ||
25 | position.offset, | ||
26 | )?; | ||
27 | 22 | ||
28 | let function: Function = sema.to_def(&function)?; | 23 | let function: Function = sema.to_def(&function)?; |
29 | let body = db.body(function.id.into()); | 24 | Some(function.debug_hir(db)) |
30 | 25 | } | |
31 | let mut result = String::new(); | ||
32 | writeln!(&mut result, "== Body expressions ==").ok()?; | ||
33 | |||
34 | for (id, expr) in body.exprs.iter() { | ||
35 | writeln!(&mut result, "{:?}: {:?}", id, expr).ok()?; | ||
36 | } | ||
37 | |||
38 | Some(result) | ||
39 | } \ No newline at end of file | ||
diff --git a/docs/dev/README.md b/docs/dev/README.md index 4a2f9feb3..55527bab0 100644 --- a/docs/dev/README.md +++ b/docs/dev/README.md | |||
@@ -227,6 +227,8 @@ There are also two VS Code commands which might be of interest: | |||
227 | 227 | ||
228 | * `Rust Analyzer: Syntax Tree` shows syntax tree of the current file/selection. | 228 | * `Rust Analyzer: Syntax Tree` shows syntax tree of the current file/selection. |
229 | 229 | ||
230 | * `Rust Analyzer: View Hir` shows the HIR expressions within the function containing the cursor. | ||
231 | |||
230 | You can hover over syntax nodes in the opened text file to see the appropriate | 232 | You can hover over syntax nodes in the opened text file to see the appropriate |
231 | rust code that it refers to and the rust editor will also highlight the proper | 233 | rust code that it refers to and the rust editor will also highlight the proper |
232 | text range. | 234 | text range. |
diff --git a/docs/dev/lsp-extensions.md b/docs/dev/lsp-extensions.md index 8c01db07c..78d86f060 100644 --- a/docs/dev/lsp-extensions.md +++ b/docs/dev/lsp-extensions.md | |||
@@ -1,5 +1,5 @@ | |||
1 | <!--- | 1 | <!--- |
2 | lsp_ext.rs hash: 203fdf79b21b5987 | 2 | lsp_ext.rs hash: 91f2c62457e0a20f |
3 | 3 | ||
4 | If you need to change the above hash to make the test pass, please check if you | 4 | If you need to change the above hash to make the test pass, please check if you |
5 | need to adjust this doc as well and ping this issue: | 5 | need to adjust this doc as well and ping this issue: |
@@ -449,6 +449,17 @@ interface SyntaxTeeParams { | |||
449 | Returns textual representation of a parse tree for the file/selected region. | 449 | Returns textual representation of a parse tree for the file/selected region. |
450 | Primarily for debugging, but very useful for all people working on rust-analyzer itself. | 450 | Primarily for debugging, but very useful for all people working on rust-analyzer itself. |
451 | 451 | ||
452 | ## View Hir | ||
453 | |||
454 | **Method:** `rust-analyzer/viewHir` | ||
455 | |||
456 | **Request:** `TextDocumentPositionParams` | ||
457 | |||
458 | **Response:** `string` | ||
459 | |||
460 | Returns a textual representation of the HIR of the function containing the cursor. | ||
461 | For debugging or when working on rust-analyzer itself. | ||
462 | |||
452 | ## Expand Macro | 463 | ## Expand Macro |
453 | 464 | ||
454 | **Method:** `rust-analyzer/expandMacro` | 465 | **Method:** `rust-analyzer/expandMacro` |