mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 13:03:31 +00:00
Address review suggestion, fix tidy tests
This commit is contained in:
parent
077592a12f
commit
db53db8046
4 changed files with 34 additions and 23 deletions
|
@ -1,5 +1,5 @@
|
|||
//! FIXME: write short doc here
|
||||
use std::{iter, sync::Arc};
|
||||
use std::{fmt::Write, iter, sync::Arc};
|
||||
|
||||
use arrayvec::ArrayVec;
|
||||
use base_db::{CrateDisplayName, CrateId, Edition, FileId};
|
||||
|
@ -729,8 +729,7 @@ impl DefWithBody {
|
|||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct Function {
|
||||
// DO NOT MERGE: this was previously pub(crate)
|
||||
pub id: FunctionId,
|
||||
pub(crate) id: FunctionId,
|
||||
}
|
||||
|
||||
impl Function {
|
||||
|
@ -798,6 +797,19 @@ impl Function {
|
|||
pub fn has_body(self, db: &dyn HirDatabase) -> bool {
|
||||
db.function_data(self.id).has_body
|
||||
}
|
||||
|
||||
/// A textual representation of the HIR of this function for debugging purposes.
|
||||
pub fn debug_hir(self, db: &dyn HirDatabase) -> String {
|
||||
let body = db.body(self.id.into());
|
||||
|
||||
let mut result = String::new();
|
||||
writeln!(&mut result, "HIR expressions in the body of `{}`:", self.name(db)).unwrap();
|
||||
for (id, expr) in body.exprs.iter() {
|
||||
writeln!(&mut result, "{:?}: {:?}", id, expr).unwrap();
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
// Note: logically, this belongs to `hir_ty`, but we are not using it there yet.
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
use hir::{Function, Semantics};
|
||||
use hir::db::DefDatabase;
|
||||
use ide_db::base_db::FilePosition;
|
||||
use ide_db::RootDatabase;
|
||||
use syntax::{AstNode, algo::find_node_at_offset, ast};
|
||||
use std::fmt::Write;
|
||||
use syntax::{algo::find_node_at_offset, ast, AstNode};
|
||||
|
||||
// Feature: View hir
|
||||
// Feature: View Hir
|
||||
//
|
||||
// |===
|
||||
// | Editor | Action Name
|
||||
|
@ -20,20 +18,8 @@ fn body_hir(db: &RootDatabase, position: FilePosition) -> Option<String> {
|
|||
let sema = Semantics::new(db);
|
||||
let source_file = sema.parse(position.file_id);
|
||||
|
||||
let function = find_node_at_offset::<ast::Fn>(
|
||||
source_file.syntax(),
|
||||
position.offset,
|
||||
)?;
|
||||
let function = find_node_at_offset::<ast::Fn>(source_file.syntax(), position.offset)?;
|
||||
|
||||
let function: Function = sema.to_def(&function)?;
|
||||
let body = db.body(function.id.into());
|
||||
|
||||
let mut result = String::new();
|
||||
writeln!(&mut result, "== Body expressions ==").ok()?;
|
||||
|
||||
for (id, expr) in body.exprs.iter() {
|
||||
writeln!(&mut result, "{:?}: {:?}", id, expr).ok()?;
|
||||
}
|
||||
|
||||
Some(result)
|
||||
Some(function.debug_hir(db))
|
||||
}
|
|
@ -227,6 +227,8 @@ There are also two VS Code commands which might be of interest:
|
|||
|
||||
* `Rust Analyzer: Syntax Tree` shows syntax tree of the current file/selection.
|
||||
|
||||
* `Rust Analyzer: View Hir` shows the HIR expressions within the function containing the cursor.
|
||||
|
||||
You can hover over syntax nodes in the opened text file to see the appropriate
|
||||
rust code that it refers to and the rust editor will also highlight the proper
|
||||
text range.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!---
|
||||
lsp_ext.rs hash: 203fdf79b21b5987
|
||||
lsp_ext.rs hash: 91f2c62457e0a20f
|
||||
|
||||
If you need to change the above hash to make the test pass, please check if you
|
||||
need to adjust this doc as well and ping this issue:
|
||||
|
@ -449,6 +449,17 @@ interface SyntaxTeeParams {
|
|||
Returns textual representation of a parse tree for the file/selected region.
|
||||
Primarily for debugging, but very useful for all people working on rust-analyzer itself.
|
||||
|
||||
## View Hir
|
||||
|
||||
**Method:** `rust-analyzer/viewHir`
|
||||
|
||||
**Request:** `TextDocumentPositionParams`
|
||||
|
||||
**Response:** `string`
|
||||
|
||||
Returns a textual representation of the HIR of the function containing the cursor.
|
||||
For debugging or when working on rust-analyzer itself.
|
||||
|
||||
## Expand Macro
|
||||
|
||||
**Method:** `rust-analyzer/expandMacro`
|
||||
|
|
Loading…
Reference in a new issue