Skip to content

Commit b2e6ca4

Browse files
Profile completions better
1 parent c66d477 commit b2e6ca4

File tree

9 files changed

+22
-0
lines changed

9 files changed

+22
-0
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/assists/src/utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use crate::{
2525
pub use insert_use::{insert_use, ImportScope, MergeBehaviour};
2626

2727
pub fn mod_path_to_ast(path: &hir::ModPath) -> ast::Path {
28+
let _p = profile::span("mod_path_to_ast");
2829
let mut segments = Vec::new();
2930
let mut is_abs = false;
3031
match path.kind {

crates/assists/src/utils/insert_use.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ pub fn insert_use<'a>(
9595
path: ast::Path,
9696
merge: Option<MergeBehaviour>,
9797
) -> SyntaxRewriter<'a> {
98+
let _p = profile::span("mod_path_to_ast");
9899
let mut rewriter = SyntaxRewriter::default();
99100
let use_item = make::use_(make::use_tree(path.clone(), None, None, false));
100101
// merge into existing imports if possible

crates/completion/src/item.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,8 @@ pub(crate) struct Builder {
278278

279279
impl Builder {
280280
pub(crate) fn build(self) -> CompletionItem {
281+
let _p = profile::span("item::Builder::build");
282+
281283
let mut label = self.label;
282284
let mut lookup = self.lookup;
283285
let mut insert_text = self.insert_text;

crates/completion/src/render/enum_variant.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub(crate) fn render_enum_variant<'a>(
1717
variant: hir::EnumVariant,
1818
path: Option<ModPath>,
1919
) -> CompletionItem {
20+
let _p = profile::span("render_enum_variant");
2021
EnumVariantRender::new(ctx, local_name, variant, path).render(import_data)
2122
}
2223

crates/completion/src/render/function.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub(crate) fn render_fn<'a>(
1515
local_name: Option<String>,
1616
fn_: hir::Function,
1717
) -> CompletionItem {
18+
let _p = profile::span("render_fn");
1819
FunctionRender::new(ctx, local_name, fn_).render(import_data)
1920
}
2021

crates/completion/src/render/macro_.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub(crate) fn render_macro<'a>(
1616
name: String,
1717
macro_: hir::MacroDef,
1818
) -> Option<CompletionItem> {
19+
let _p = profile::span("render_macro");
1920
MacroRender::new(ctx, name, macro_).render(import_data)
2021
}
2122

crates/syntax/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ stdx = { path = "../stdx", version = "0.0.0" }
2828
text_edit = { path = "../text_edit", version = "0.0.0" }
2929
parser = { path = "../parser", version = "0.0.0" }
3030
test_utils = { path = "../test_utils", version = "0.0.0" }
31+
profile = { path = "../profile", version = "0.0.0" }
3132

3233
[dev-dependencies]
3334
walkdir = "2.3.1"

crates/syntax/src/algo.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ pub struct TreeDiff {
127127

128128
impl TreeDiff {
129129
pub fn into_text_edit(&self, builder: &mut TextEditBuilder) {
130+
let _p = profile::span("into_text_edit");
131+
130132
for (anchor, to) in self.insertions.iter() {
131133
let offset = match anchor {
132134
TreeDiffInsertPos::After(it) => it.text_range().end(),
@@ -154,6 +156,8 @@ impl TreeDiff {
154156
///
155157
/// This function tries to find a fine-grained diff.
156158
pub fn diff(from: &SyntaxNode, to: &SyntaxNode) -> TreeDiff {
159+
let _p = profile::span("diff");
160+
157161
let mut diff = TreeDiff {
158162
replacements: FxHashMap::default(),
159163
insertions: FxIndexMap::default(),
@@ -467,6 +471,8 @@ impl<'a> SyntaxRewriter<'a> {
467471
}
468472

469473
pub fn rewrite(&self, node: &SyntaxNode) -> SyntaxNode {
474+
let _p = profile::span("rewrite");
475+
470476
if self.f.is_none() && self.replacements.is_empty() && self.insertions.is_empty() {
471477
return node.clone();
472478
}
@@ -483,6 +489,7 @@ impl<'a> SyntaxRewriter<'a> {
483489
///
484490
/// Returns `None` when there are no replacements.
485491
pub fn rewrite_root(&self) -> Option<SyntaxNode> {
492+
let _p = profile::span("rewrite_root");
486493
fn element_to_node_or_parent(element: &SyntaxElement) -> SyntaxNode {
487494
match element {
488495
SyntaxElement::Node(it) => it.clone(),
@@ -517,6 +524,8 @@ impl<'a> SyntaxRewriter<'a> {
517524
}
518525

519526
fn rewrite_children(&self, node: &SyntaxNode) -> SyntaxNode {
527+
let _p = profile::span("rewrite_children");
528+
520529
// FIXME: this could be made much faster.
521530
let mut new_children = Vec::new();
522531
if let Some(elements) = self.insertions(&InsertPos::FirstChildOf(node.clone())) {
@@ -533,6 +542,8 @@ impl<'a> SyntaxRewriter<'a> {
533542
acc: &mut Vec<NodeOrToken<rowan::GreenNode, rowan::GreenToken>>,
534543
element: &SyntaxElement,
535544
) {
545+
let _p = profile::span("rewrite_self");
546+
536547
if let Some(replacement) = self.replacement(&element) {
537548
match replacement {
538549
Replacement::Single(element) => acc.push(element_to_green(element)),
@@ -588,6 +599,8 @@ fn with_children(
588599
parent: &SyntaxNode,
589600
new_children: Vec<NodeOrToken<rowan::GreenNode, rowan::GreenToken>>,
590601
) -> SyntaxNode {
602+
let _p = profile::span("with_children");
603+
591604
let len = new_children.iter().map(|it| it.text_len()).sum::<TextSize>();
592605
let new_node = rowan::GreenNode::new(rowan::SyntaxKind(parent.kind() as u16), new_children);
593606
let new_root_node = parent.replace_with(new_node);

0 commit comments

Comments
 (0)