Support .editorconfig (#19455)
Closes https://github.com/zed-industries/zed/issues/8534 Supersedes https://github.com/zed-industries/zed/pull/16349 Potential concerns: * we do not follow up to the `/` when looking for `.editorconfig`, only up to the worktree root. Seems fine for most of the cases, and the rest should be solved generically later, as the same issue exists for settings.json * `fn language` in `AllLanguageSettings` is very hot, called very frequently during rendering. We accumulate and parse all `.editorconfig` file contents beforehand, but have to go over globs and match these against the path given + merge the properties still. This does not seem to be very bad, but needs more testing and potentially some extra caching. Release Notes: - Added .editorconfig support --------- Co-authored-by: Ulysse Buonomo <buonomo.ulysse@gmail.com>
This commit is contained in:
co-authored by
Ulysse Buonomo
parent
d95a4f8671
commit
d3cb08bf35
@@ -423,11 +423,12 @@ impl DisplayMap {
|
||||
}
|
||||
|
||||
fn tab_size(buffer: &Model<MultiBuffer>, cx: &mut ModelContext<Self>) -> NonZeroU32 {
|
||||
let buffer = buffer.read(cx).as_singleton().map(|buffer| buffer.read(cx));
|
||||
let language = buffer
|
||||
.read(cx)
|
||||
.as_singleton()
|
||||
.and_then(|buffer| buffer.read(cx).language());
|
||||
language_settings(language, None, cx).tab_size
|
||||
.and_then(|buffer| buffer.language())
|
||||
.map(|l| l.name());
|
||||
let file = buffer.and_then(|buffer| buffer.file());
|
||||
language_settings(language, file, cx).tab_size
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
@@ -90,7 +90,7 @@ pub use inline_completion_provider::*;
|
||||
pub use items::MAX_TAB_TITLE_LEN;
|
||||
use itertools::Itertools;
|
||||
use language::{
|
||||
language_settings::{self, all_language_settings, InlayHintSettings},
|
||||
language_settings::{self, all_language_settings, language_settings, InlayHintSettings},
|
||||
markdown, point_from_lsp, AutoindentMode, BracketPair, Buffer, Capability, CharKind, CodeLabel,
|
||||
CursorShape, Diagnostic, Documentation, IndentKind, IndentSize, Language, OffsetRangeExt,
|
||||
Point, Selection, SelectionGoal, TransactionId,
|
||||
@@ -428,8 +428,7 @@ impl Default for EditorStyle {
|
||||
}
|
||||
|
||||
pub fn make_inlay_hints_style(cx: &WindowContext) -> HighlightStyle {
|
||||
let show_background = all_language_settings(None, cx)
|
||||
.language(None)
|
||||
let show_background = language_settings::language_settings(None, None, cx)
|
||||
.inlay_hints
|
||||
.show_background;
|
||||
|
||||
@@ -4248,7 +4247,10 @@ impl Editor {
|
||||
.text_anchor_for_position(position, cx)?;
|
||||
|
||||
let settings = language_settings::language_settings(
|
||||
buffer.read(cx).language_at(buffer_position).as_ref(),
|
||||
buffer
|
||||
.read(cx)
|
||||
.language_at(buffer_position)
|
||||
.map(|l| l.name()),
|
||||
buffer.read(cx).file(),
|
||||
cx,
|
||||
);
|
||||
@@ -13374,11 +13376,8 @@ fn inlay_hint_settings(
|
||||
cx: &mut ViewContext<'_, Editor>,
|
||||
) -> InlayHintSettings {
|
||||
let file = snapshot.file_at(location);
|
||||
let language = snapshot.language_at(location);
|
||||
let settings = all_language_settings(file, cx);
|
||||
settings
|
||||
.language(language.map(|l| l.name()).as_ref())
|
||||
.inlay_hints
|
||||
let language = snapshot.language_at(location).map(|l| l.name());
|
||||
language_settings(language, file, cx).inlay_hints
|
||||
}
|
||||
|
||||
fn consume_contiguous_rows(
|
||||
|
||||
@@ -39,9 +39,13 @@ impl Editor {
|
||||
) -> Option<Vec<MultiBufferIndentGuide>> {
|
||||
let show_indent_guides = self.should_show_indent_guides().unwrap_or_else(|| {
|
||||
if let Some(buffer) = self.buffer().read(cx).as_singleton() {
|
||||
language_settings(buffer.read(cx).language(), buffer.read(cx).file(), cx)
|
||||
.indent_guides
|
||||
.enabled
|
||||
language_settings(
|
||||
buffer.read(cx).language().map(|l| l.name()),
|
||||
buffer.read(cx).file(),
|
||||
cx,
|
||||
)
|
||||
.indent_guides
|
||||
.enabled
|
||||
} else {
|
||||
true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user