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:
parent
d95a4f8671
commit
d3cb08bf35
30 changed files with 869 additions and 263 deletions
|
@ -37,6 +37,7 @@ use smallvec::SmallVec;
|
|||
use smol::future::yield_now;
|
||||
use std::{
|
||||
any::Any,
|
||||
borrow::Cow,
|
||||
cell::Cell,
|
||||
cmp::{self, Ordering, Reverse},
|
||||
collections::BTreeMap,
|
||||
|
@ -2490,7 +2491,11 @@ impl BufferSnapshot {
|
|||
/// Returns [`IndentSize`] for a given position that respects user settings
|
||||
/// and language preferences.
|
||||
pub fn language_indent_size_at<T: ToOffset>(&self, position: T, cx: &AppContext) -> IndentSize {
|
||||
let settings = language_settings(self.language_at(position), self.file(), cx);
|
||||
let settings = language_settings(
|
||||
self.language_at(position).map(|l| l.name()),
|
||||
self.file(),
|
||||
cx,
|
||||
);
|
||||
if settings.hard_tabs {
|
||||
IndentSize::tab()
|
||||
} else {
|
||||
|
@ -2823,11 +2828,15 @@ impl BufferSnapshot {
|
|||
|
||||
/// Returns the settings for the language at the given location.
|
||||
pub fn settings_at<'a, D: ToOffset>(
|
||||
&self,
|
||||
&'a self,
|
||||
position: D,
|
||||
cx: &'a AppContext,
|
||||
) -> &'a LanguageSettings {
|
||||
language_settings(self.language_at(position), self.file.as_ref(), cx)
|
||||
) -> Cow<'a, LanguageSettings> {
|
||||
language_settings(
|
||||
self.language_at(position).map(|l| l.name()),
|
||||
self.file.as_ref(),
|
||||
cx,
|
||||
)
|
||||
}
|
||||
|
||||
pub fn char_classifier_at<T: ToOffset>(&self, point: T) -> CharClassifier {
|
||||
|
@ -3529,7 +3538,8 @@ impl BufferSnapshot {
|
|||
ignore_disabled_for_language: bool,
|
||||
cx: &AppContext,
|
||||
) -> Vec<IndentGuide> {
|
||||
let language_settings = language_settings(self.language(), self.file.as_ref(), cx);
|
||||
let language_settings =
|
||||
language_settings(self.language().map(|l| l.name()), self.file.as_ref(), cx);
|
||||
let settings = language_settings.indent_guides;
|
||||
if !ignore_disabled_for_language && !settings.enabled {
|
||||
return Vec::new();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue