mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +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
|
//! FIXME: write short doc here
|
||||||
use std::{iter, sync::Arc};
|
use std::{fmt::Write, iter, sync::Arc};
|
||||||
|
|
||||||
use arrayvec::ArrayVec;
|
use arrayvec::ArrayVec;
|
||||||
use base_db::{CrateDisplayName, CrateId, Edition, FileId};
|
use base_db::{CrateDisplayName, CrateId, Edition, FileId};
|
||||||
|
@ -729,8 +729,7 @@ impl DefWithBody {
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||||
pub struct Function {
|
pub struct Function {
|
||||||
// DO NOT MERGE: this was previously pub(crate)
|
pub(crate) id: FunctionId,
|
||||||
pub id: FunctionId,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Function {
|
impl Function {
|
||||||
|
@ -798,6 +797,19 @@ impl Function {
|
||||||
pub fn has_body(self, db: &dyn HirDatabase) -> bool {
|
pub fn has_body(self, db: &dyn HirDatabase) -> bool {
|
||||||
db.function_data(self.id).has_body
|
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.
|
// 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::{Function, Semantics};
|
||||||
use hir::db::DefDatabase;
|
|
||||||
use ide_db::base_db::FilePosition;
|
use ide_db::base_db::FilePosition;
|
||||||
use ide_db::RootDatabase;
|
use ide_db::RootDatabase;
|
||||||
use syntax::{AstNode, algo::find_node_at_offset, ast};
|
use syntax::{algo::find_node_at_offset, ast, AstNode};
|
||||||
use std::fmt::Write;
|
|
||||||
|
|
||||||
// Feature: View hir
|
// Feature: View Hir
|
||||||
//
|
//
|
||||||
// |===
|
// |===
|
||||||
// | Editor | Action Name
|
// | Editor | Action Name
|
||||||
|
@ -20,20 +18,8 @@ fn body_hir(db: &RootDatabase, position: FilePosition) -> Option<String> {
|
||||||
let sema = Semantics::new(db);
|
let sema = Semantics::new(db);
|
||||||
let source_file = sema.parse(position.file_id);
|
let source_file = sema.parse(position.file_id);
|
||||||
|
|
||||||
let function = find_node_at_offset::<ast::Fn>(
|
let function = find_node_at_offset::<ast::Fn>(source_file.syntax(), position.offset)?;
|
||||||
source_file.syntax(),
|
|
||||||
position.offset,
|
|
||||||
)?;
|
|
||||||
|
|
||||||
let function: Function = sema.to_def(&function)?;
|
let function: Function = sema.to_def(&function)?;
|
||||||
let body = db.body(function.id.into());
|
Some(function.debug_hir(db))
|
||||||
|
|
||||||
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)
|
|
||||||
}
|
}
|
|
@ -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: 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
|
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
|
rust code that it refers to and the rust editor will also highlight the proper
|
||||||
text range.
|
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
|
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:
|
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.
|
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.
|
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
|
## Expand Macro
|
||||||
|
|
||||||
**Method:** `rust-analyzer/expandMacro`
|
**Method:** `rust-analyzer/expandMacro`
|
||||||
|
|
Loading…
Reference in a new issue