Make language settings accessors take an arc dyn file
This commit is contained in:
parent
a2ab7c9eb9
commit
03a351fb26
10 changed files with 41 additions and 54 deletions
|
@ -1717,8 +1717,7 @@ impl LspCommand for OnTypeFormatting {
|
|||
|
||||
let tab_size = buffer.read_with(&cx, |buffer, cx| {
|
||||
let language_name = buffer.language().map(|language| language.name());
|
||||
let file = buffer.file().map(|f| f.as_ref());
|
||||
language_settings(language_name.as_deref(), file, cx).tab_size
|
||||
language_settings(language_name.as_deref(), buffer.file(), cx).tab_size
|
||||
});
|
||||
|
||||
Ok(Self {
|
||||
|
|
|
@ -693,12 +693,14 @@ impl Project {
|
|||
for buffer in self.opened_buffers.values() {
|
||||
if let Some(buffer) = buffer.upgrade(cx) {
|
||||
let buffer = buffer.read(cx);
|
||||
if let Some((file, language)) = File::from_dyn(buffer.file()).zip(buffer.language())
|
||||
{
|
||||
if let Some((file, language)) = buffer.file().zip(buffer.language()) {
|
||||
let settings =
|
||||
language_settings(Some(language.name().as_ref()), Some(file), cx);
|
||||
if settings.enable_language_server {
|
||||
language_servers_to_start.push((file.worktree.clone(), language.clone()));
|
||||
if let Some(file) = File::from_dyn(Some(file)) {
|
||||
language_servers_to_start
|
||||
.push((file.worktree.clone(), language.clone()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -714,10 +716,10 @@ impl Project {
|
|||
});
|
||||
if let Some(language) = language {
|
||||
let worktree = self.worktree_for_id(*worktree_id, cx);
|
||||
let file = worktree.and_then(|tree| tree.update(cx, |tree, cx| tree.root_file(cx)));
|
||||
// let settings =
|
||||
// language_settings(Some(language.name().as_ref()), Some(file), cx);
|
||||
if !language_settings(Some(&language.name()), file.as_ref().map(|f| f as _), cx)
|
||||
let file = worktree.and_then(|tree| {
|
||||
tree.update(cx, |tree, cx| tree.root_file(cx).map(|f| f as _))
|
||||
});
|
||||
if !language_settings(Some(&language.name()), file.as_ref(), cx)
|
||||
.enable_language_server
|
||||
{
|
||||
language_servers_to_stop.push((*worktree_id, started_lsp_name.clone()));
|
||||
|
@ -2362,8 +2364,8 @@ impl Project {
|
|||
Some(&language.name()),
|
||||
worktree
|
||||
.update(cx, |tree, cx| tree.root_file(cx))
|
||||
.as_ref()
|
||||
.map(|f| f as _),
|
||||
.map(|f| f as _)
|
||||
.as_ref(),
|
||||
cx,
|
||||
)
|
||||
.enable_language_server
|
||||
|
@ -3464,12 +3466,7 @@ impl Project {
|
|||
for (buffer, buffer_abs_path, language_server) in &buffers_with_paths_and_servers {
|
||||
let settings = buffer.read_with(&cx, |buffer, cx| {
|
||||
let language_name = buffer.language().map(|language| language.name());
|
||||
language_settings(
|
||||
language_name.as_deref(),
|
||||
buffer.file().map(|f| f.as_ref()),
|
||||
cx,
|
||||
)
|
||||
.clone()
|
||||
language_settings(language_name.as_deref(), buffer.file(), cx).clone()
|
||||
});
|
||||
|
||||
let remove_trailing_whitespace = settings.remove_trailing_whitespace_on_save;
|
||||
|
@ -4481,10 +4478,9 @@ impl Project {
|
|||
let (position, tab_size) = buffer.read_with(cx, |buffer, cx| {
|
||||
let position = position.to_point_utf16(buffer);
|
||||
let language_name = buffer.language_at(position).map(|l| l.name());
|
||||
let file = buffer.file().map(|f| f.as_ref());
|
||||
(
|
||||
position,
|
||||
language_settings(language_name.as_deref(), file, cx).tab_size,
|
||||
language_settings(language_name.as_deref(), buffer.file(), cx).tab_size,
|
||||
)
|
||||
});
|
||||
self.request_lsp(
|
||||
|
|
|
@ -99,18 +99,22 @@ async fn test_managing_project_specific_settings(
|
|||
|
||||
let settings_a = language_settings(
|
||||
None,
|
||||
Some(&File::for_entry(
|
||||
tree.entry_for_path("a/a.rs").unwrap().clone(),
|
||||
worktree.clone(),
|
||||
)),
|
||||
Some(
|
||||
&(File::for_entry(
|
||||
tree.entry_for_path("a/a.rs").unwrap().clone(),
|
||||
worktree.clone(),
|
||||
) as _),
|
||||
),
|
||||
cx,
|
||||
);
|
||||
let settings_b = language_settings(
|
||||
None,
|
||||
Some(&File::for_entry(
|
||||
tree.entry_for_path("b/b.rs").unwrap().clone(),
|
||||
worktree.clone(),
|
||||
)),
|
||||
Some(
|
||||
&(File::for_entry(
|
||||
tree.entry_for_path("b/b.rs").unwrap().clone(),
|
||||
worktree.clone(),
|
||||
) as _),
|
||||
),
|
||||
cx,
|
||||
);
|
||||
|
||||
|
|
|
@ -678,16 +678,9 @@ impl Worktree {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn root_file(&self, cx: &mut ModelContext<Self>) -> Option<File> {
|
||||
pub fn root_file(&self, cx: &mut ModelContext<Self>) -> Option<Arc<File>> {
|
||||
let entry = self.root_entry()?;
|
||||
Some(File {
|
||||
worktree: cx.handle(),
|
||||
path: entry.path.clone(),
|
||||
mtime: entry.mtime,
|
||||
entry_id: entry.id,
|
||||
is_local: self.is_local(),
|
||||
is_deleted: false,
|
||||
})
|
||||
Some(File::for_entry(entry.clone(), cx.handle()))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2463,15 +2456,15 @@ impl language::LocalFile for File {
|
|||
}
|
||||
|
||||
impl File {
|
||||
pub fn for_entry(entry: Entry, worktree: ModelHandle<Worktree>) -> Self {
|
||||
Self {
|
||||
pub fn for_entry(entry: Entry, worktree: ModelHandle<Worktree>) -> Arc<Self> {
|
||||
Arc::new(Self {
|
||||
worktree,
|
||||
path: entry.path.clone(),
|
||||
mtime: entry.mtime,
|
||||
entry_id: entry.id,
|
||||
is_local: true,
|
||||
is_deleted: false,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
pub fn from_proto(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue