1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 07:14:47 -05:00

perf(lsp): format in a blocking task (#19883)

This commit is contained in:
David Sherret 2023-07-20 09:28:40 -04:00 committed by GitHub
parent 0c3bbf7acd
commit 1ee6218e48
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1638,24 +1638,33 @@ impl Inner {
return Ok(None); return Ok(None);
} }
let format_result = match document.maybe_parsed_source() { // spawn a blocking task to allow doing other work while this is occurring
Some(Ok(parsed_source)) => { let format_result = deno_core::task::spawn_blocking({
format_parsed_source(&parsed_source, &self.fmt_options.options) let fmt_options = self.fmt_options.options.clone();
let document = document.clone();
move || {
match document.maybe_parsed_source() {
Some(Ok(parsed_source)) => {
format_parsed_source(&parsed_source, &fmt_options)
}
Some(Err(err)) => Err(anyhow!("{}", err)),
None => {
// the file path is only used to determine what formatter should
// be used to format the file, so give the filepath an extension
// that matches what the user selected as the language
let file_path = document
.maybe_language_id()
.and_then(|id| id.as_extension())
.map(|ext| file_path.with_extension(ext))
.unwrap_or(file_path);
// it's not a js/ts file, so attempt to format its contents
format_file(&file_path, &document.content(), &fmt_options)
}
}
} }
Some(Err(err)) => Err(anyhow!("{}", err)), })
None => { .await
// the file path is only used to determine what formatter should .unwrap();
// be used to format the file, so give the filepath an extension
// that matches what the user selected as the language
let file_path = document
.maybe_language_id()
.and_then(|id| id.as_extension())
.map(|ext| file_path.with_extension(ext))
.unwrap_or(file_path);
// it's not a js/ts file, so attempt to format its contents
format_file(&file_path, &document.content(), &self.fmt_options.options)
}
};
let text_edits = match format_result { let text_edits = match format_result {
Ok(Some(new_text)) => Some(text::get_edits( Ok(Some(new_text)) => Some(text::get_edits(