mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 23:34:48 +00:00
Add "View Crate Graph (Full)"
This commit is contained in:
parent
76d8f55952
commit
5f13fb9db9
@ -299,8 +299,8 @@ impl Analysis {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Renders the crate graph to GraphViz "dot" syntax.
|
/// Renders the crate graph to GraphViz "dot" syntax.
|
||||||
pub fn view_crate_graph(&self) -> Cancellable<Result<String, String>> {
|
pub fn view_crate_graph(&self, full: bool) -> Cancellable<Result<String, String>> {
|
||||||
self.with_db(|db| view_crate_graph::view_crate_graph(db))
|
self.with_db(|db| view_crate_graph::view_crate_graph(db, full))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn expand_macro(&self, position: FilePosition) -> Cancellable<Option<ExpandedMacro>> {
|
pub fn expand_macro(&self, position: FilePosition) -> Cancellable<Option<ExpandedMacro>> {
|
||||||
|
@ -19,14 +19,18 @@ use rustc_hash::FxHashSet;
|
|||||||
//
|
//
|
||||||
// | VS Code | **Rust Analyzer: View Crate Graph**
|
// | VS Code | **Rust Analyzer: View Crate Graph**
|
||||||
// |===
|
// |===
|
||||||
pub(crate) fn view_crate_graph(db: &RootDatabase) -> Result<String, String> {
|
pub(crate) fn view_crate_graph(db: &RootDatabase, full: bool) -> Result<String, String> {
|
||||||
let crate_graph = db.crate_graph();
|
let crate_graph = db.crate_graph();
|
||||||
let crates_to_render = crate_graph
|
let crates_to_render = crate_graph
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|krate| {
|
.filter(|krate| {
|
||||||
|
if full {
|
||||||
|
true
|
||||||
|
} else {
|
||||||
// Only render workspace crates
|
// Only render workspace crates
|
||||||
let root_id = db.file_source_root(crate_graph[*krate].root_file_id);
|
let root_id = db.file_source_root(crate_graph[*krate].root_file_id);
|
||||||
!db.source_root(root_id).is_library
|
!db.source_root(root_id).is_library
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
let graph = DotCrateGraph { graph: crate_graph, crates_to_render };
|
let graph = DotCrateGraph { graph: crate_graph, crates_to_render };
|
||||||
|
@ -38,7 +38,7 @@ use crate::{
|
|||||||
from_proto,
|
from_proto,
|
||||||
global_state::{GlobalState, GlobalStateSnapshot},
|
global_state::{GlobalState, GlobalStateSnapshot},
|
||||||
line_index::LineEndings,
|
line_index::LineEndings,
|
||||||
lsp_ext::{self, InlayHint, InlayHintsParams, WorkspaceSymbolParams},
|
lsp_ext::{self, InlayHint, InlayHintsParams, ViewCrateGraphParams, WorkspaceSymbolParams},
|
||||||
lsp_utils::all_edits_are_disjoint,
|
lsp_utils::all_edits_are_disjoint,
|
||||||
to_proto, LspError, Result,
|
to_proto, LspError, Result,
|
||||||
};
|
};
|
||||||
@ -131,9 +131,12 @@ pub(crate) fn handle_view_item_tree(
|
|||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn handle_view_crate_graph(snap: GlobalStateSnapshot, (): ()) -> Result<String> {
|
pub(crate) fn handle_view_crate_graph(
|
||||||
|
snap: GlobalStateSnapshot,
|
||||||
|
params: ViewCrateGraphParams,
|
||||||
|
) -> Result<String> {
|
||||||
let _p = profile::span("handle_view_crate_graph");
|
let _p = profile::span("handle_view_crate_graph");
|
||||||
let dot = snap.analysis.view_crate_graph()??;
|
let dot = snap.analysis.view_crate_graph(params.full)??;
|
||||||
|
|
||||||
// We shell out to `dot` to render to SVG, as there does not seem to be a pure-Rust renderer.
|
// We shell out to `dot` to render to SVG, as there does not seem to be a pure-Rust renderer.
|
||||||
let child = Command::new("dot")
|
let child = Command::new("dot")
|
||||||
|
@ -62,10 +62,17 @@ impl Request for ViewHir {
|
|||||||
const METHOD: &'static str = "rust-analyzer/viewHir";
|
const METHOD: &'static str = "rust-analyzer/viewHir";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Serialize, Debug)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct ViewCrateGraphParams {
|
||||||
|
/// Include *all* crates, not just crates in the workspace.
|
||||||
|
pub full: bool,
|
||||||
|
}
|
||||||
|
|
||||||
pub enum ViewCrateGraph {}
|
pub enum ViewCrateGraph {}
|
||||||
|
|
||||||
impl Request for ViewCrateGraph {
|
impl Request for ViewCrateGraph {
|
||||||
type Params = ();
|
type Params = ViewCrateGraphParams;
|
||||||
type Result = String;
|
type Result = String;
|
||||||
const METHOD: &'static str = "rust-analyzer/viewCrateGraph";
|
const METHOD: &'static str = "rust-analyzer/viewCrateGraph";
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!---
|
<!---
|
||||||
lsp_ext.rs hash: 49f253e4a9307d4f
|
lsp_ext.rs hash: 3f2879db0013a72
|
||||||
|
|
||||||
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:
|
||||||
@ -512,12 +512,20 @@ Returns a textual representation of the `ItemTree` of the currently open file, f
|
|||||||
|
|
||||||
**Method:** `rust-analyzer/viewCrateGraph`
|
**Method:** `rust-analyzer/viewCrateGraph`
|
||||||
|
|
||||||
**Request:** `null`
|
**Request:**
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
interface ViewCrateGraphParams {
|
||||||
|
full: boolean,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
**Response:** `string`
|
**Response:** `string`
|
||||||
|
|
||||||
Renders rust-analyzer's crate graph as an SVG image.
|
Renders rust-analyzer's crate graph as an SVG image.
|
||||||
|
|
||||||
|
If `full` is `true`, the graph includes non-workspace crates (crates.io dependencies as well as sysroot crates).
|
||||||
|
|
||||||
## Expand Macro
|
## Expand Macro
|
||||||
|
|
||||||
**Method:** `rust-analyzer/expandMacro`
|
**Method:** `rust-analyzer/expandMacro`
|
||||||
|
@ -119,6 +119,11 @@
|
|||||||
"title": "View Crate Graph",
|
"title": "View Crate Graph",
|
||||||
"category": "Rust Analyzer"
|
"category": "Rust Analyzer"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"command": "rust-analyzer.viewFullCrateGraph",
|
||||||
|
"title": "View Crate Graph (Full)",
|
||||||
|
"category": "Rust Analyzer"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"command": "rust-analyzer.expandMacro",
|
"command": "rust-analyzer.expandMacro",
|
||||||
"title": "Expand macro recursively",
|
"title": "Expand macro recursively",
|
||||||
|
@ -479,14 +479,25 @@ export function viewItemTree(ctx: Ctx): Cmd {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function viewCrateGraph(ctx: Ctx): Cmd {
|
function crateGraph(ctx: Ctx, full: boolean): Cmd {
|
||||||
return async () => {
|
return async () => {
|
||||||
const panel = vscode.window.createWebviewPanel("rust-analyzer.crate-graph", "rust-analyzer crate graph", vscode.ViewColumn.Two);
|
const panel = vscode.window.createWebviewPanel("rust-analyzer.crate-graph", "rust-analyzer crate graph", vscode.ViewColumn.Two);
|
||||||
const svg = await ctx.client.sendRequest(ra.viewCrateGraph);
|
const params = {
|
||||||
|
full: full,
|
||||||
|
};
|
||||||
|
const svg = await ctx.client.sendRequest(ra.viewCrateGraph, params);
|
||||||
panel.webview.html = svg;
|
panel.webview.html = svg;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function viewCrateGraph(ctx: Ctx): Cmd {
|
||||||
|
return crateGraph(ctx, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function viewFullCrateGraph(ctx: Ctx): Cmd {
|
||||||
|
return crateGraph(ctx, true);
|
||||||
|
}
|
||||||
|
|
||||||
// Opens the virtual file that will show the syntax tree
|
// Opens the virtual file that will show the syntax tree
|
||||||
//
|
//
|
||||||
// The contents of the file come from the `TextDocumentContentProvider`
|
// The contents of the file come from the `TextDocumentContentProvider`
|
||||||
|
@ -33,7 +33,11 @@ export interface ViewItemTreeParams {
|
|||||||
|
|
||||||
export const viewItemTree = new lc.RequestType<ViewItemTreeParams, string, void>("rust-analyzer/viewItemTree");
|
export const viewItemTree = new lc.RequestType<ViewItemTreeParams, string, void>("rust-analyzer/viewItemTree");
|
||||||
|
|
||||||
export const viewCrateGraph = new lc.RequestType0<string, void>("rust-analyzer/viewCrateGraph");
|
export interface ViewCrateGraphParams {
|
||||||
|
full: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const viewCrateGraph = new lc.RequestType<ViewCrateGraphParams, string, void>("rust-analyzer/viewCrateGraph");
|
||||||
|
|
||||||
export interface ExpandMacroParams {
|
export interface ExpandMacroParams {
|
||||||
textDocument: lc.TextDocumentIdentifier;
|
textDocument: lc.TextDocumentIdentifier;
|
||||||
|
@ -123,6 +123,7 @@ async function initCommonContext(context: vscode.ExtensionContext, ctx: Ctx) {
|
|||||||
ctx.registerCommand('viewHir', commands.viewHir);
|
ctx.registerCommand('viewHir', commands.viewHir);
|
||||||
ctx.registerCommand('viewItemTree', commands.viewItemTree);
|
ctx.registerCommand('viewItemTree', commands.viewItemTree);
|
||||||
ctx.registerCommand('viewCrateGraph', commands.viewCrateGraph);
|
ctx.registerCommand('viewCrateGraph', commands.viewCrateGraph);
|
||||||
|
ctx.registerCommand('viewFullCrateGraph', commands.viewFullCrateGraph);
|
||||||
ctx.registerCommand('expandMacro', commands.expandMacro);
|
ctx.registerCommand('expandMacro', commands.expandMacro);
|
||||||
ctx.registerCommand('run', commands.run);
|
ctx.registerCommand('run', commands.run);
|
||||||
ctx.registerCommand('copyRunCommandLine', commands.copyRunCommandLine);
|
ctx.registerCommand('copyRunCommandLine', commands.copyRunCommandLine);
|
||||||
|
Loading…
Reference in New Issue
Block a user