Skip to content

Commit 6e412f7

Browse files
Refactor to Ruff-inspired two-layer file architecture w/Salsa (#188)
1 parent 5749b7d commit 6e412f7

File tree

27 files changed

+3711
-650
lines changed

27 files changed

+3711
-650
lines changed

Cargo.lock

Lines changed: 437 additions & 45 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ djls-dev = { path = "crates/djls-dev" }
99
djls-project = { path = "crates/djls-project" }
1010
djls-server = { path = "crates/djls-server" }
1111
djls-templates = { path = "crates/djls-templates" }
12+
djls-workspace = { path = "crates/djls-workspace" }
1213

1314
# core deps, pin exact versions
1415
pyo3 = "0.25.0"
@@ -17,9 +18,12 @@ salsa = "0.23.0"
1718
tower-lsp-server = { version = "0.22.0", features = ["proposed"] }
1819

1920
anyhow = "1.0"
21+
camino = "1.1"
2022
clap = { version = "4.5", features = ["derive"] }
2123
config = { version ="0.15", features = ["toml"] }
24+
dashmap = "6.1"
2225
directories = "6.0"
26+
notify = "8.2"
2327
percent-encoding = "2.3"
2428
serde = { version = "1.0", features = ["derive"] }
2529
serde_json = "1.0"
@@ -29,6 +33,7 @@ toml = "0.9"
2933
tracing = "0.1"
3034
tracing-appender = "0.2"
3135
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "time"] }
36+
url = "2.5"
3237
which = "8.0"
3338

3439
# testing

crates/djls-server/Cargo.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ default = []
1111
djls-conf = { workspace = true }
1212
djls-project = { workspace = true }
1313
djls-templates = { workspace = true }
14+
djls-workspace = { workspace = true }
1415

1516
anyhow = { workspace = true }
17+
camino = { workspace = true }
18+
dashmap = { workspace = true }
1619
percent-encoding = { workspace = true }
1720
pyo3 = { workspace = true }
1821
salsa = { workspace = true }
@@ -23,9 +26,13 @@ tower-lsp-server = { workspace = true }
2326
tracing = { workspace = true }
2427
tracing-appender = { workspace = true }
2528
tracing-subscriber = { workspace = true }
29+
url = { workspace = true }
2630

2731
[build-dependencies]
2832
djls-dev = { workspace = true }
2933

34+
[dev-dependencies]
35+
tempfile = { workspace = true }
36+
3037
[lints]
3138
workspace = true

crates/djls-server/src/client.rs

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -123,45 +123,38 @@ macro_rules! request {
123123

124124
#[allow(dead_code)]
125125
pub mod messages {
126-
use tower_lsp_server::lsp_types::MessageActionItem;
127-
use tower_lsp_server::lsp_types::MessageType;
128-
use tower_lsp_server::lsp_types::ShowDocumentParams;
126+
use tower_lsp_server::lsp_types;
129127

130128
use super::get_client;
131129
use super::Display;
132130
use super::Error;
133131

134-
notify!(log_message, message_type: MessageType, message: impl Display + Send + 'static);
135-
notify!(show_message, message_type: MessageType, message: impl Display + Send + 'static);
136-
request!(show_message_request, message_type: MessageType, message: impl Display + Send + 'static, actions: Option<Vec<MessageActionItem>> ; Option<MessageActionItem>);
137-
request!(show_document, params: ShowDocumentParams ; bool);
132+
notify!(log_message, message_type: lsp_types::MessageType, message: impl Display + Send + 'static);
133+
notify!(show_message, message_type: lsp_types::MessageType, message: impl Display + Send + 'static);
134+
request!(show_message_request, message_type: lsp_types::MessageType, message: impl Display + Send + 'static, actions: Option<Vec<lsp_types::MessageActionItem>> ; Option<lsp_types::MessageActionItem>);
135+
request!(show_document, params: lsp_types::ShowDocumentParams ; bool);
138136
}
139137

140138
#[allow(dead_code)]
141139
pub mod diagnostics {
142-
use tower_lsp_server::lsp_types::Diagnostic;
143-
use tower_lsp_server::lsp_types::Uri;
140+
use tower_lsp_server::lsp_types;
144141

145142
use super::get_client;
146143

147-
notify!(publish_diagnostics, uri: Uri, diagnostics: Vec<Diagnostic>, version: Option<i32>);
144+
notify!(publish_diagnostics, uri: lsp_types::Uri, diagnostics: Vec<lsp_types::Diagnostic>, version: Option<i32>);
148145
notify_discard!(workspace_diagnostic_refresh,);
149146
}
150147

151148
#[allow(dead_code)]
152149
pub mod workspace {
153-
use tower_lsp_server::lsp_types::ApplyWorkspaceEditResponse;
154-
use tower_lsp_server::lsp_types::ConfigurationItem;
155-
use tower_lsp_server::lsp_types::LSPAny;
156-
use tower_lsp_server::lsp_types::WorkspaceEdit;
157-
use tower_lsp_server::lsp_types::WorkspaceFolder;
150+
use tower_lsp_server::lsp_types;
158151

159152
use super::get_client;
160153
use super::Error;
161154

162-
request!(apply_edit, edit: WorkspaceEdit ; ApplyWorkspaceEditResponse);
163-
request!(configuration, items: Vec<ConfigurationItem> ; Vec<LSPAny>);
164-
request!(workspace_folders, ; Option<Vec<WorkspaceFolder>>);
155+
request!(apply_edit, edit: lsp_types::WorkspaceEdit ; lsp_types::ApplyWorkspaceEditResponse);
156+
request!(configuration, items: Vec<lsp_types::ConfigurationItem> ; Vec<lsp_types::LSPAny>);
157+
request!(workspace_folders, ; Option<Vec<lsp_types::WorkspaceFolder>>);
165158
}
166159

167160
#[allow(dead_code)]
@@ -176,19 +169,18 @@ pub mod editor {
176169

177170
#[allow(dead_code)]
178171
pub mod capabilities {
179-
use tower_lsp_server::lsp_types::Registration;
180-
use tower_lsp_server::lsp_types::Unregistration;
172+
use tower_lsp_server::lsp_types;
181173

182174
use super::get_client;
183175

184-
notify_discard!(register_capability, registrations: Vec<Registration>);
185-
notify_discard!(unregister_capability, unregisterations: Vec<Unregistration>);
176+
notify_discard!(register_capability, registrations: Vec<lsp_types::Registration>);
177+
notify_discard!(unregister_capability, unregisterations: Vec<lsp_types::Unregistration>);
186178
}
187179

188180
#[allow(dead_code)]
189181
pub mod monitoring {
190182
use serde::Serialize;
191-
use tower_lsp_server::lsp_types::ProgressToken;
183+
use tower_lsp_server::lsp_types;
192184
use tower_lsp_server::Progress;
193185

194186
use super::get_client;
@@ -201,22 +193,24 @@ pub mod monitoring {
201193
}
202194
}
203195

204-
pub fn progress<T: Into<String> + Send>(token: ProgressToken, title: T) -> Option<Progress> {
196+
pub fn progress<T: Into<String> + Send>(
197+
token: lsp_types::ProgressToken,
198+
title: T,
199+
) -> Option<Progress> {
205200
get_client().map(|client| client.progress(token, title))
206201
}
207202
}
208203

209204
#[allow(dead_code)]
210205
pub mod protocol {
211-
use tower_lsp_server::lsp_types::notification::Notification;
212-
use tower_lsp_server::lsp_types::request::Request;
206+
use tower_lsp_server::lsp_types;
213207

214208
use super::get_client;
215209
use super::Error;
216210

217211
pub fn send_notification<N>(params: N::Params)
218212
where
219-
N: Notification,
213+
N: lsp_types::notification::Notification,
220214
N::Params: Send + 'static,
221215
{
222216
if let Some(client) = get_client() {
@@ -228,7 +222,7 @@ pub mod protocol {
228222

229223
pub async fn send_request<R>(params: R::Params) -> Result<R::Result, Error>
230224
where
231-
R: Request,
225+
R: lsp_types::request::Request,
232226
R::Params: Send + 'static,
233227
R::Result: Send + 'static,
234228
{

0 commit comments

Comments
 (0)