Skip to content

Commit cc0a5dd

Browse files
authored
Directly include Settings struct for the server (#16042)
## Summary This PR refactors the `RuffSettings` struct to directly include the resolved `Settings` instead of including the specific fields from it. The server utilizes a lot of it already, so it makes sense to just include the entire struct for simplicity. ### `Deref` I implemented `Deref` on `RuffSettings` to return the `Settings` because `RuffSettings` is now basically a wrapper around it with the config path as the other field. This path field is only used for debugging ("printDebugInformation" command).
1 parent b54e390 commit cc0a5dd

File tree

6 files changed

+37
-76
lines changed

6 files changed

+37
-76
lines changed

crates/ruff_server/src/fix.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,14 @@ pub(crate) fn fix_all(
2727
encoding: PositionEncoding,
2828
) -> crate::Result<Fixes> {
2929
let source_kind = query.make_source_kind();
30-
31-
let file_resolver_settings = query.settings().file_resolver();
30+
let settings = query.settings();
3231
let document_path = query.file_path();
3332

3433
// If the document is excluded, return an empty list of fixes.
3534
let package = if let Some(document_path) = document_path.as_ref() {
3635
if is_document_excluded_for_linting(
3736
document_path,
38-
file_resolver_settings,
37+
&settings.file_resolver,
3938
linter_settings,
4039
query.text_document_language_id(),
4140
) {
@@ -71,7 +70,7 @@ pub(crate) fn fix_all(
7170
&query.virtual_file_path(),
7271
package,
7372
flags::Noqa::Enabled,
74-
query.settings().unsafe_fixes(),
73+
settings.unsafe_fixes,
7574
linter_settings,
7675
&source_kind,
7776
source_type,

crates/ruff_server/src/lint.rs

+6-7
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,15 @@ pub(crate) fn check(
6767
show_syntax_errors: bool,
6868
) -> DiagnosticsMap {
6969
let source_kind = query.make_source_kind();
70-
let file_resolver_settings = query.settings().file_resolver();
71-
let linter_settings = query.settings().linter();
70+
let settings = query.settings();
7271
let document_path = query.file_path();
7372

7473
// If the document is excluded, return an empty list of diagnostics.
7574
let package = if let Some(document_path) = document_path.as_ref() {
7675
if is_document_excluded_for_linting(
7776
document_path,
78-
file_resolver_settings,
79-
linter_settings,
77+
&settings.file_resolver,
78+
&settings.linter,
8079
query.text_document_language_id(),
8180
) {
8281
return DiagnosticsMap::default();
@@ -86,7 +85,7 @@ pub(crate) fn check(
8685
document_path
8786
.parent()
8887
.expect("a path to a document should have a parent path"),
89-
&linter_settings.namespace_packages,
88+
&settings.linter.namespace_packages,
9089
)
9190
.map(PackageRoot::root)
9291
} else {
@@ -118,7 +117,7 @@ pub(crate) fn check(
118117
&stylist,
119118
&indexer,
120119
&directives,
121-
linter_settings,
120+
&settings.linter,
122121
flags::Noqa::Enabled,
123122
&source_kind,
124123
source_type,
@@ -130,7 +129,7 @@ pub(crate) fn check(
130129
&diagnostics,
131130
&locator,
132131
indexer.comment_ranges(),
133-
&linter_settings.external,
132+
&settings.linter.external,
134133
&directives.noqa_line_for,
135134
stylist.line_ending(),
136135
);

crates/ruff_server/src/server/api/requests/code_action_resolve.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ pub(super) fn fix_all_edit(
9393
query: &DocumentQuery,
9494
encoding: PositionEncoding,
9595
) -> crate::Result<Fixes> {
96-
crate::fix::fix_all(query, query.settings().linter(), encoding)
96+
crate::fix::fix_all(query, &query.settings().linter, encoding)
9797
}
9898

9999
pub(super) fn resolve_edit_for_organize_imports(
@@ -110,7 +110,7 @@ pub(super) fn organize_imports_edit(
110110
query: &DocumentQuery,
111111
encoding: PositionEncoding,
112112
) -> crate::Result<Fixes> {
113-
let mut linter_settings = query.settings().linter().clone();
113+
let mut linter_settings = query.settings().linter.clone();
114114
linter_settings.rules = [
115115
Rule::UnsortedImports, // I001
116116
Rule::MissingRequiredImport, // I002

crates/ruff_server/src/server/api/requests/format.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -82,23 +82,22 @@ fn format_text_document(
8282
encoding: PositionEncoding,
8383
is_notebook: bool,
8484
) -> Result<super::FormatResponse> {
85-
let file_resolver_settings = query.settings().file_resolver();
86-
let formatter_settings = query.settings().formatter();
85+
let settings = query.settings();
8786

8887
// If the document is excluded, return early.
8988
if let Some(file_path) = query.file_path() {
9089
if is_document_excluded_for_formatting(
9190
&file_path,
92-
file_resolver_settings,
93-
formatter_settings,
91+
&settings.file_resolver,
92+
&settings.formatter,
9493
text_document.language_id(),
9594
) {
9695
return Ok(None);
9796
}
9897
}
9998

10099
let source = text_document.contents();
101-
let formatted = crate::format::format(text_document, query.source_type(), formatter_settings)
100+
let formatted = crate::format::format(text_document, query.source_type(), &settings.formatter)
102101
.with_failure_code(lsp_server::ErrorCode::InternalError)?;
103102
let Some(mut formatted) = formatted else {
104103
return Ok(None);

crates/ruff_server/src/server/api/requests/format_range.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,14 @@ fn format_text_document_range(
4646
query: &DocumentQuery,
4747
encoding: PositionEncoding,
4848
) -> Result<super::FormatResponse> {
49-
let file_resolver_settings = query.settings().file_resolver();
50-
let formatter_settings = query.settings().formatter();
49+
let settings = query.settings();
5150

5251
// If the document is excluded, return early.
5352
if let Some(file_path) = query.file_path() {
5453
if is_document_excluded_for_formatting(
5554
&file_path,
56-
file_resolver_settings,
57-
formatter_settings,
55+
&settings.file_resolver,
56+
&settings.formatter,
5857
text_document.language_id(),
5958
) {
6059
return Ok(None);
@@ -67,7 +66,7 @@ fn format_text_document_range(
6766
let formatted_range = crate::format::format_range(
6867
text_document,
6968
query.source_type(),
70-
formatter_settings,
69+
&settings.formatter,
7170
range,
7271
)
7372
.with_failure_code(lsp_server::ErrorCode::InternalError)?;

crates/ruff_server/src/session/index/ruff_settings.rs

+18-53
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
use std::collections::BTreeMap;
2+
use std::ops::Deref;
23
use std::path::{Path, PathBuf};
34
use std::sync::atomic::{AtomicBool, Ordering};
45
use std::sync::Arc;
56

67
use anyhow::Context;
78
use ignore::{WalkBuilder, WalkState};
89

9-
use ruff_linter::settings::types::UnsafeFixes;
1010
use ruff_linter::{
11-
display_settings, fs::normalize_path_to, settings::types::FilePattern,
12-
settings::types::PreviewMode,
11+
fs::normalize_path_to, settings::types::FilePattern, settings::types::PreviewMode,
1312
};
1413
use ruff_workspace::resolver::match_exclusion;
14+
use ruff_workspace::Settings;
1515
use ruff_workspace::{
1616
configuration::{Configuration, FormatConfiguration, LintConfiguration, RuleSelection},
1717
pyproject::{find_user_settings_toml, settings_toml},
@@ -24,14 +24,16 @@ pub struct RuffSettings {
2424
/// The path to this configuration file, used for debugging.
2525
/// The default fallback configuration does not have a file path.
2626
path: Option<PathBuf>,
27-
/// Toggle for unsafe fixes.
28-
unsafe_fixes: UnsafeFixes,
29-
/// Settings used to manage file inclusion and exclusion.
30-
file_resolver: ruff_workspace::FileResolverSettings,
31-
/// Settings to pass into the Ruff linter.
32-
linter: ruff_linter::settings::LinterSettings,
33-
/// Settings to pass into the Ruff formatter.
34-
formatter: ruff_workspace::FormatterSettings,
27+
/// The resolved settings.
28+
settings: Settings,
29+
}
30+
31+
impl Deref for RuffSettings {
32+
type Target = Settings;
33+
34+
fn deref(&self) -> &Settings {
35+
&self.settings
36+
}
3537
}
3638

3739
pub(super) struct RuffSettingsIndex {
@@ -42,15 +44,7 @@ pub(super) struct RuffSettingsIndex {
4244

4345
impl std::fmt::Display for RuffSettings {
4446
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
45-
display_settings! {
46-
formatter = f,
47-
fields = [
48-
self.file_resolver,
49-
self.linter,
50-
self.formatter
51-
]
52-
}
53-
Ok(())
47+
std::fmt::Display::fmt(&self.settings, f)
5448
}
5549
}
5650

@@ -80,32 +74,9 @@ impl RuffSettings {
8074

8175
RuffSettings {
8276
path,
83-
unsafe_fixes: fallback.unsafe_fixes,
84-
file_resolver: fallback.file_resolver,
85-
formatter: fallback.formatter,
86-
linter: fallback.linter,
77+
settings: fallback,
8778
}
8879
}
89-
90-
/// Return the [`ruff_workspace::FileResolverSettings`] for this [`RuffSettings`].
91-
pub(crate) fn file_resolver(&self) -> &ruff_workspace::FileResolverSettings {
92-
&self.file_resolver
93-
}
94-
95-
/// Return the [`ruff_linter::settings::LinterSettings`] for this [`RuffSettings`].
96-
pub(crate) fn linter(&self) -> &ruff_linter::settings::LinterSettings {
97-
&self.linter
98-
}
99-
100-
/// Return the [`ruff_workspace::FormatterSettings`] for this [`RuffSettings`].
101-
pub(crate) fn formatter(&self) -> &ruff_workspace::FormatterSettings {
102-
&self.formatter
103-
}
104-
105-
/// Return the [`UnsafeFixes`] for this [`RuffSettings`].
106-
pub(crate) fn unsafe_fixes(&self) -> UnsafeFixes {
107-
self.unsafe_fixes
108-
}
10980
}
11081

11182
impl RuffSettingsIndex {
@@ -152,10 +123,7 @@ impl RuffSettingsIndex {
152123
directory.to_path_buf(),
153124
Arc::new(RuffSettings {
154125
path: Some(pyproject),
155-
unsafe_fixes: settings.unsafe_fixes,
156-
file_resolver: settings.file_resolver,
157-
linter: settings.linter,
158-
formatter: settings.formatter,
126+
settings,
159127
}),
160128
);
161129
break;
@@ -210,7 +178,7 @@ impl RuffSettingsIndex {
210178
// Add any settings within the workspace itself
211179
let mut builder = WalkBuilder::new(root);
212180
builder.standard_filters(
213-
respect_gitignore.unwrap_or_else(|| fallback.file_resolver().respect_gitignore),
181+
respect_gitignore.unwrap_or_else(|| fallback.file_resolver.respect_gitignore),
214182
);
215183
builder.hidden(false);
216184
builder.threads(
@@ -277,10 +245,7 @@ impl RuffSettingsIndex {
277245
directory,
278246
Arc::new(RuffSettings {
279247
path: Some(pyproject),
280-
unsafe_fixes: settings.unsafe_fixes,
281-
file_resolver: settings.file_resolver,
282-
linter: settings.linter,
283-
formatter: settings.formatter,
248+
settings,
284249
}),
285250
);
286251
}

0 commit comments

Comments
 (0)