language: Only block the foreground on buffer reparsing when necessary (#43888)
Gist is we only need to block the foreground thread for reparsing if immediate language changes are useful to the user. That is usually only the case when they edit the buffer Release Notes: - Improved performance of large project searches and project diffs Co-authored by: David Kleingeld <david@zed.dev>
This commit is contained in:
@@ -40,7 +40,7 @@ mod tests {
|
||||
});
|
||||
|
||||
cx.new(|cx| {
|
||||
let mut buffer = Buffer::local("", cx).with_language(language, cx);
|
||||
let mut buffer = Buffer::local("", cx).with_language_immediate(language, cx);
|
||||
|
||||
let expect_indents_to =
|
||||
|buffer: &mut Buffer, cx: &mut Context<Buffer>, input: &str, expected: &str| {
|
||||
|
||||
@@ -388,7 +388,7 @@ mod tests {
|
||||
let language = crate::language("c", tree_sitter_c::LANGUAGE.into());
|
||||
|
||||
cx.new(|cx| {
|
||||
let mut buffer = Buffer::local("", cx).with_language(language, cx);
|
||||
let mut buffer = Buffer::local("", cx).with_language_immediate(language, cx);
|
||||
|
||||
buffer.edit([(0..0, "int main() {}")], None, cx);
|
||||
|
||||
@@ -418,7 +418,7 @@ mod tests {
|
||||
let language = crate::language("c", tree_sitter_c::LANGUAGE.into());
|
||||
|
||||
cx.new(|cx| {
|
||||
let mut buffer = Buffer::local("", cx).with_language(language, cx);
|
||||
let mut buffer = Buffer::local("", cx).with_language_immediate(language, cx);
|
||||
|
||||
buffer.edit(
|
||||
[(
|
||||
|
||||
@@ -20,7 +20,7 @@ mod tests {
|
||||
let language = crate::language("cpp", tree_sitter_cpp::LANGUAGE.into());
|
||||
|
||||
cx.new(|cx| {
|
||||
let mut buffer = Buffer::local("", cx).with_language(language, cx);
|
||||
let mut buffer = Buffer::local("", cx).with_language_immediate(language, cx);
|
||||
|
||||
buffer.edit([(0..0, "int main() {}")], None, cx);
|
||||
|
||||
@@ -50,7 +50,7 @@ mod tests {
|
||||
let language = crate::language("cpp", tree_sitter_cpp::LANGUAGE.into());
|
||||
|
||||
cx.new(|cx| {
|
||||
let mut buffer = Buffer::local("", cx).with_language(language, cx);
|
||||
let mut buffer = Buffer::local("", cx).with_language_immediate(language, cx);
|
||||
|
||||
buffer.edit(
|
||||
[(
|
||||
|
||||
@@ -224,7 +224,8 @@ mod tests {
|
||||
"#
|
||||
.unindent();
|
||||
|
||||
let buffer = cx.new(|cx| language::Buffer::local(text, cx).with_language(language, cx));
|
||||
let buffer =
|
||||
cx.new(|cx| language::Buffer::local(text, cx).with_language_immediate(language, cx));
|
||||
let outline = buffer.read_with(cx, |buffer, _| buffer.snapshot().outline(None));
|
||||
assert_eq!(
|
||||
outline
|
||||
|
||||
+22
-14
@@ -868,8 +868,9 @@ mod tests {
|
||||
}
|
||||
"#;
|
||||
|
||||
let buffer = cx
|
||||
.new(|cx| crate::Buffer::local(testify_suite, cx).with_language(language.clone(), cx));
|
||||
let buffer = cx.new(|cx| {
|
||||
crate::Buffer::local(testify_suite, cx).with_language_immediate(language.clone(), cx)
|
||||
});
|
||||
cx.executor().run_until_parked();
|
||||
|
||||
let runnables: Vec<_> = buffer.update(cx, |buffer, _| {
|
||||
@@ -926,7 +927,8 @@ mod tests {
|
||||
"#;
|
||||
|
||||
let buffer = cx.new(|cx| {
|
||||
crate::Buffer::local(interpreted_string_subtest, cx).with_language(language.clone(), cx)
|
||||
crate::Buffer::local(interpreted_string_subtest, cx)
|
||||
.with_language_immediate(language.clone(), cx)
|
||||
});
|
||||
cx.executor().run_until_parked();
|
||||
|
||||
@@ -955,7 +957,8 @@ mod tests {
|
||||
);
|
||||
|
||||
let buffer = cx.new(|cx| {
|
||||
crate::Buffer::local(raw_string_subtest, cx).with_language(language.clone(), cx)
|
||||
crate::Buffer::local(raw_string_subtest, cx)
|
||||
.with_language_immediate(language.clone(), cx)
|
||||
});
|
||||
cx.executor().run_until_parked();
|
||||
|
||||
@@ -999,8 +1002,9 @@ mod tests {
|
||||
}
|
||||
"#;
|
||||
|
||||
let buffer =
|
||||
cx.new(|cx| crate::Buffer::local(example_test, cx).with_language(language.clone(), cx));
|
||||
let buffer = cx.new(|cx| {
|
||||
crate::Buffer::local(example_test, cx).with_language_immediate(language.clone(), cx)
|
||||
});
|
||||
cx.executor().run_until_parked();
|
||||
|
||||
let runnables: Vec<_> = buffer.update(cx, |buffer, _| {
|
||||
@@ -1070,8 +1074,9 @@ mod tests {
|
||||
}
|
||||
"#;
|
||||
|
||||
let buffer =
|
||||
cx.new(|cx| crate::Buffer::local(table_test, cx).with_language(language.clone(), cx));
|
||||
let buffer = cx.new(|cx| {
|
||||
crate::Buffer::local(table_test, cx).with_language_immediate(language.clone(), cx)
|
||||
});
|
||||
cx.executor().run_until_parked();
|
||||
|
||||
let runnables: Vec<_> = buffer.update(cx, |buffer, _| {
|
||||
@@ -1138,8 +1143,9 @@ mod tests {
|
||||
}
|
||||
"#;
|
||||
|
||||
let buffer =
|
||||
cx.new(|cx| crate::Buffer::local(table_test, cx).with_language(language.clone(), cx));
|
||||
let buffer = cx.new(|cx| {
|
||||
crate::Buffer::local(table_test, cx).with_language_immediate(language.clone(), cx)
|
||||
});
|
||||
cx.executor().run_until_parked();
|
||||
|
||||
let runnables: Vec<_> = buffer.update(cx, |buffer, _| {
|
||||
@@ -1210,8 +1216,9 @@ mod tests {
|
||||
}
|
||||
"#;
|
||||
|
||||
let buffer =
|
||||
cx.new(|cx| crate::Buffer::local(table_test, cx).with_language(language.clone(), cx));
|
||||
let buffer = cx.new(|cx| {
|
||||
crate::Buffer::local(table_test, cx).with_language_immediate(language.clone(), cx)
|
||||
});
|
||||
cx.executor().run_until_parked();
|
||||
|
||||
let runnables: Vec<_> = buffer.update(cx, |buffer, _| {
|
||||
@@ -1277,8 +1284,9 @@ mod tests {
|
||||
}
|
||||
"#;
|
||||
|
||||
let buffer =
|
||||
cx.new(|cx| crate::Buffer::local(table_test, cx).with_language(language.clone(), cx));
|
||||
let buffer = cx.new(|cx| {
|
||||
crate::Buffer::local(table_test, cx).with_language_immediate(language.clone(), cx)
|
||||
});
|
||||
cx.executor().run_until_parked();
|
||||
|
||||
let runnables: Vec<_> = buffer.update(cx, |buffer, _| {
|
||||
|
||||
@@ -2326,7 +2326,7 @@ mod tests {
|
||||
});
|
||||
|
||||
cx.new(|cx| {
|
||||
let mut buffer = Buffer::local("", cx).with_language(language, cx);
|
||||
let mut buffer = Buffer::local("", cx).with_language_immediate(language, cx);
|
||||
let append = |buffer: &mut Buffer, text: &str, cx: &mut Context<Buffer>| {
|
||||
let ix = buffer.len();
|
||||
buffer.edit([(ix..ix, text)], Some(AutoindentMode::EachLine), cx);
|
||||
|
||||
@@ -1430,7 +1430,7 @@ mod tests {
|
||||
let language = crate::language("rust", tree_sitter_rust::LANGUAGE.into());
|
||||
|
||||
cx.new(|cx| {
|
||||
let mut buffer = Buffer::local("", cx).with_language(language, cx);
|
||||
let mut buffer = Buffer::local("", cx).with_language_immediate(language, cx);
|
||||
|
||||
// indent between braces
|
||||
buffer.set_text("fn a() {}", cx);
|
||||
|
||||
@@ -895,7 +895,8 @@ mod tests {
|
||||
"#
|
||||
.unindent();
|
||||
|
||||
let buffer = cx.new(|cx| language::Buffer::local(text, cx).with_language(language, cx));
|
||||
let buffer = cx
|
||||
.new(|cx| language::Buffer::local(text, cx).with_language_immediate(language, cx));
|
||||
let outline = buffer.read_with(cx, |buffer, _| buffer.snapshot().outline(None));
|
||||
assert_eq!(
|
||||
outline
|
||||
@@ -954,7 +955,8 @@ mod tests {
|
||||
"#
|
||||
.unindent();
|
||||
|
||||
let buffer = cx.new(|cx| language::Buffer::local(text, cx).with_language(language, cx));
|
||||
let buffer = cx
|
||||
.new(|cx| language::Buffer::local(text, cx).with_language_immediate(language, cx));
|
||||
let outline = buffer.read_with(cx, |buffer, _| buffer.snapshot().outline(None));
|
||||
assert_eq!(
|
||||
outline
|
||||
@@ -1026,7 +1028,8 @@ mod tests {
|
||||
"#
|
||||
.unindent();
|
||||
|
||||
let buffer = cx.new(|cx| language::Buffer::local(text, cx).with_language(language, cx));
|
||||
let buffer = cx
|
||||
.new(|cx| language::Buffer::local(text, cx).with_language_immediate(language, cx));
|
||||
let outline = buffer.read_with(cx, |buffer, _| buffer.snapshot().outline(None));
|
||||
assert_eq!(
|
||||
outline
|
||||
@@ -1106,7 +1109,8 @@ mod tests {
|
||||
"#
|
||||
.unindent();
|
||||
|
||||
let buffer = cx.new(|cx| language::Buffer::local(text, cx).with_language(language, cx));
|
||||
let buffer = cx
|
||||
.new(|cx| language::Buffer::local(text, cx).with_language_immediate(language, cx));
|
||||
let outline = buffer.read_with(cx, |buffer, _| buffer.snapshot().outline(None));
|
||||
assert_eq!(
|
||||
outline
|
||||
@@ -1177,7 +1181,8 @@ mod tests {
|
||||
"#
|
||||
.unindent();
|
||||
|
||||
let buffer = cx.new(|cx| language::Buffer::local(text, cx).with_language(language, cx));
|
||||
let buffer =
|
||||
cx.new(|cx| language::Buffer::local(text, cx).with_language_immediate(language, cx));
|
||||
let outline = buffer.read_with(cx, |buffer, _| buffer.snapshot().outline(None));
|
||||
assert_eq!(
|
||||
outline
|
||||
|
||||
Reference in New Issue
Block a user