mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-28 08:35:33 +03:00
Make language settings accessors take an arc dyn file
This commit is contained in:
parent
a2ab7c9eb9
commit
03a351fb26
@ -787,7 +787,7 @@ impl Copilot {
|
|||||||
let position = position.to_point_utf16(buffer);
|
let position = position.to_point_utf16(buffer);
|
||||||
let settings = language_settings(
|
let settings = language_settings(
|
||||||
buffer.language_at(position).map(|l| l.name()).as_deref(),
|
buffer.language_at(position).map(|l| l.name()).as_deref(),
|
||||||
buffer.file().map(|f| f.as_ref()),
|
buffer.file(),
|
||||||
cx,
|
cx,
|
||||||
);
|
);
|
||||||
let tab_size = settings.tab_size;
|
let tab_size = settings.tab_size;
|
||||||
|
@ -285,7 +285,7 @@ impl CopilotButton {
|
|||||||
let file = snapshot.file_at(suggestion_anchor).cloned();
|
let file = snapshot.file_at(suggestion_anchor).cloned();
|
||||||
|
|
||||||
self.editor_enabled = Some(
|
self.editor_enabled = Some(
|
||||||
all_language_settings(self.file.as_ref().map(|f| f.as_ref()), cx).copilot_enabled(
|
all_language_settings(self.file.as_ref(), cx).copilot_enabled(
|
||||||
language_name.as_deref(),
|
language_name.as_deref(),
|
||||||
file.as_ref().map(|file| file.path().as_ref()),
|
file.as_ref().map(|file| file.path().as_ref()),
|
||||||
),
|
),
|
||||||
|
@ -3211,7 +3211,7 @@ impl Editor {
|
|||||||
let language_name = snapshot
|
let language_name = snapshot
|
||||||
.language_at(location)
|
.language_at(location)
|
||||||
.map(|language| language.name());
|
.map(|language| language.name());
|
||||||
let settings = all_language_settings(file.map(|f| f.as_ref() as _), cx);
|
let settings = all_language_settings(file, cx);
|
||||||
settings.copilot_enabled(language_name.as_deref(), file.map(|f| f.path().as_ref()))
|
settings.copilot_enabled(language_name.as_deref(), file.map(|f| f.path().as_ref()))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7093,8 +7093,7 @@ impl Editor {
|
|||||||
.get("vim_mode")
|
.get("vim_mode")
|
||||||
== Some(&serde_json::Value::Bool(true));
|
== Some(&serde_json::Value::Bool(true));
|
||||||
let telemetry_settings = *settings::get::<TelemetrySettings>(cx);
|
let telemetry_settings = *settings::get::<TelemetrySettings>(cx);
|
||||||
let copilot_enabled =
|
let copilot_enabled = all_language_settings(file, cx).copilot_enabled(None, None);
|
||||||
all_language_settings(file.map(|f| f.as_ref()), cx).copilot_enabled(None, None);
|
|
||||||
let copilot_enabled_for_language = self
|
let copilot_enabled_for_language = self
|
||||||
.buffer
|
.buffer
|
||||||
.read(cx)
|
.read(cx)
|
||||||
|
@ -1382,7 +1382,7 @@ impl MultiBuffer {
|
|||||||
if let Some((buffer, offset)) = self.point_to_buffer_offset(point, cx) {
|
if let Some((buffer, offset)) = self.point_to_buffer_offset(point, cx) {
|
||||||
let buffer = buffer.read(cx);
|
let buffer = buffer.read(cx);
|
||||||
language = buffer.language_at(offset).map(|l| l.name());
|
language = buffer.language_at(offset).map(|l| l.name());
|
||||||
file = buffer.file().map(|f| f.as_ref());
|
file = buffer.file();
|
||||||
}
|
}
|
||||||
language_settings(language.as_deref(), file, cx)
|
language_settings(language.as_deref(), file, cx)
|
||||||
}
|
}
|
||||||
@ -2795,7 +2795,7 @@ impl MultiBufferSnapshot {
|
|||||||
let mut file = None;
|
let mut file = None;
|
||||||
if let Some((buffer, offset)) = self.point_to_buffer_offset(point) {
|
if let Some((buffer, offset)) = self.point_to_buffer_offset(point) {
|
||||||
language = buffer.language_at(offset).map(|l| l.name());
|
language = buffer.language_at(offset).map(|l| l.name());
|
||||||
file = buffer.file().map(|f| f.as_ref());
|
file = buffer.file();
|
||||||
}
|
}
|
||||||
language_settings(language.as_deref(), file, cx)
|
language_settings(language.as_deref(), file, cx)
|
||||||
}
|
}
|
||||||
|
@ -1808,11 +1808,7 @@ impl BufferSnapshot {
|
|||||||
|
|
||||||
pub fn language_indent_size_at<T: ToOffset>(&self, position: T, cx: &AppContext) -> IndentSize {
|
pub fn language_indent_size_at<T: ToOffset>(&self, position: T, cx: &AppContext) -> IndentSize {
|
||||||
let language_name = self.language_at(position).map(|language| language.name());
|
let language_name = self.language_at(position).map(|language| language.name());
|
||||||
let settings = language_settings(
|
let settings = language_settings(language_name.as_deref(), self.file(), cx);
|
||||||
language_name.as_deref(),
|
|
||||||
self.file().map(|f| f.as_ref()),
|
|
||||||
cx,
|
|
||||||
);
|
|
||||||
if settings.hard_tabs {
|
if settings.hard_tabs {
|
||||||
IndentSize::tab()
|
IndentSize::tab()
|
||||||
} else {
|
} else {
|
||||||
@ -2139,7 +2135,7 @@ impl BufferSnapshot {
|
|||||||
let language = self.language_at(position);
|
let language = self.language_at(position);
|
||||||
language_settings(
|
language_settings(
|
||||||
language.map(|l| l.name()).as_deref(),
|
language.map(|l| l.name()).as_deref(),
|
||||||
self.file.as_ref().map(AsRef::as_ref),
|
self.file.as_ref(),
|
||||||
cx,
|
cx,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ pub fn init(cx: &mut AppContext) {
|
|||||||
|
|
||||||
pub fn language_settings<'a>(
|
pub fn language_settings<'a>(
|
||||||
language: Option<&str>,
|
language: Option<&str>,
|
||||||
file: Option<&dyn File>,
|
file: Option<&Arc<dyn File>>,
|
||||||
cx: &'a AppContext,
|
cx: &'a AppContext,
|
||||||
) -> &'a LanguageSettings {
|
) -> &'a LanguageSettings {
|
||||||
settings::get_local::<AllLanguageSettings>(
|
settings::get_local::<AllLanguageSettings>(
|
||||||
@ -27,7 +27,7 @@ pub fn language_settings<'a>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn all_language_settings<'a>(
|
pub fn all_language_settings<'a>(
|
||||||
file: Option<&dyn File>,
|
file: Option<&Arc<dyn File>>,
|
||||||
cx: &'a AppContext,
|
cx: &'a AppContext,
|
||||||
) -> &'a AllLanguageSettings {
|
) -> &'a AllLanguageSettings {
|
||||||
settings::get_local::<AllLanguageSettings>(
|
settings::get_local::<AllLanguageSettings>(
|
||||||
|
@ -1717,8 +1717,7 @@ impl LspCommand for OnTypeFormatting {
|
|||||||
|
|
||||||
let tab_size = buffer.read_with(&cx, |buffer, cx| {
|
let tab_size = buffer.read_with(&cx, |buffer, cx| {
|
||||||
let language_name = buffer.language().map(|language| language.name());
|
let language_name = buffer.language().map(|language| language.name());
|
||||||
let file = buffer.file().map(|f| f.as_ref());
|
language_settings(language_name.as_deref(), buffer.file(), cx).tab_size
|
||||||
language_settings(language_name.as_deref(), file, cx).tab_size
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
|
@ -693,12 +693,14 @@ impl Project {
|
|||||||
for buffer in self.opened_buffers.values() {
|
for buffer in self.opened_buffers.values() {
|
||||||
if let Some(buffer) = buffer.upgrade(cx) {
|
if let Some(buffer) = buffer.upgrade(cx) {
|
||||||
let buffer = buffer.read(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 =
|
let settings =
|
||||||
language_settings(Some(language.name().as_ref()), Some(file), cx);
|
language_settings(Some(language.name().as_ref()), Some(file), cx);
|
||||||
if settings.enable_language_server {
|
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 {
|
if let Some(language) = language {
|
||||||
let worktree = self.worktree_for_id(*worktree_id, cx);
|
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 file = worktree.and_then(|tree| {
|
||||||
// let settings =
|
tree.update(cx, |tree, cx| tree.root_file(cx).map(|f| f as _))
|
||||||
// language_settings(Some(language.name().as_ref()), Some(file), cx);
|
});
|
||||||
if !language_settings(Some(&language.name()), file.as_ref().map(|f| f as _), cx)
|
if !language_settings(Some(&language.name()), file.as_ref(), cx)
|
||||||
.enable_language_server
|
.enable_language_server
|
||||||
{
|
{
|
||||||
language_servers_to_stop.push((*worktree_id, started_lsp_name.clone()));
|
language_servers_to_stop.push((*worktree_id, started_lsp_name.clone()));
|
||||||
@ -2362,8 +2364,8 @@ impl Project {
|
|||||||
Some(&language.name()),
|
Some(&language.name()),
|
||||||
worktree
|
worktree
|
||||||
.update(cx, |tree, cx| tree.root_file(cx))
|
.update(cx, |tree, cx| tree.root_file(cx))
|
||||||
.as_ref()
|
.map(|f| f as _)
|
||||||
.map(|f| f as _),
|
.as_ref(),
|
||||||
cx,
|
cx,
|
||||||
)
|
)
|
||||||
.enable_language_server
|
.enable_language_server
|
||||||
@ -3464,12 +3466,7 @@ impl Project {
|
|||||||
for (buffer, buffer_abs_path, language_server) in &buffers_with_paths_and_servers {
|
for (buffer, buffer_abs_path, language_server) in &buffers_with_paths_and_servers {
|
||||||
let settings = buffer.read_with(&cx, |buffer, cx| {
|
let settings = buffer.read_with(&cx, |buffer, cx| {
|
||||||
let language_name = buffer.language().map(|language| language.name());
|
let language_name = buffer.language().map(|language| language.name());
|
||||||
language_settings(
|
language_settings(language_name.as_deref(), buffer.file(), cx).clone()
|
||||||
language_name.as_deref(),
|
|
||||||
buffer.file().map(|f| f.as_ref()),
|
|
||||||
cx,
|
|
||||||
)
|
|
||||||
.clone()
|
|
||||||
});
|
});
|
||||||
|
|
||||||
let remove_trailing_whitespace = settings.remove_trailing_whitespace_on_save;
|
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, tab_size) = buffer.read_with(cx, |buffer, cx| {
|
||||||
let position = position.to_point_utf16(buffer);
|
let position = position.to_point_utf16(buffer);
|
||||||
let language_name = buffer.language_at(position).map(|l| l.name());
|
let language_name = buffer.language_at(position).map(|l| l.name());
|
||||||
let file = buffer.file().map(|f| f.as_ref());
|
|
||||||
(
|
(
|
||||||
position,
|
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(
|
self.request_lsp(
|
||||||
|
@ -99,18 +99,22 @@ async fn test_managing_project_specific_settings(
|
|||||||
|
|
||||||
let settings_a = language_settings(
|
let settings_a = language_settings(
|
||||||
None,
|
None,
|
||||||
Some(&File::for_entry(
|
Some(
|
||||||
|
&(File::for_entry(
|
||||||
tree.entry_for_path("a/a.rs").unwrap().clone(),
|
tree.entry_for_path("a/a.rs").unwrap().clone(),
|
||||||
worktree.clone(),
|
worktree.clone(),
|
||||||
)),
|
) as _),
|
||||||
|
),
|
||||||
cx,
|
cx,
|
||||||
);
|
);
|
||||||
let settings_b = language_settings(
|
let settings_b = language_settings(
|
||||||
None,
|
None,
|
||||||
Some(&File::for_entry(
|
Some(
|
||||||
|
&(File::for_entry(
|
||||||
tree.entry_for_path("b/b.rs").unwrap().clone(),
|
tree.entry_for_path("b/b.rs").unwrap().clone(),
|
||||||
worktree.clone(),
|
worktree.clone(),
|
||||||
)),
|
) as _),
|
||||||
|
),
|
||||||
cx,
|
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()?;
|
let entry = self.root_entry()?;
|
||||||
Some(File {
|
Some(File::for_entry(entry.clone(), cx.handle()))
|
||||||
worktree: cx.handle(),
|
|
||||||
path: entry.path.clone(),
|
|
||||||
mtime: entry.mtime,
|
|
||||||
entry_id: entry.id,
|
|
||||||
is_local: self.is_local(),
|
|
||||||
is_deleted: false,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2463,15 +2456,15 @@ impl language::LocalFile for File {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl File {
|
impl File {
|
||||||
pub fn for_entry(entry: Entry, worktree: ModelHandle<Worktree>) -> Self {
|
pub fn for_entry(entry: Entry, worktree: ModelHandle<Worktree>) -> Arc<Self> {
|
||||||
Self {
|
Arc::new(Self {
|
||||||
worktree,
|
worktree,
|
||||||
path: entry.path.clone(),
|
path: entry.path.clone(),
|
||||||
mtime: entry.mtime,
|
mtime: entry.mtime,
|
||||||
entry_id: entry.id,
|
entry_id: entry.id,
|
||||||
is_local: true,
|
is_local: true,
|
||||||
is_deleted: false,
|
is_deleted: false,
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_proto(
|
pub fn from_proto(
|
||||||
|
Loading…
Reference in New Issue
Block a user