Skip to content

Commit bdb632f

Browse files
committed
test: external completer test & inlay hint for nu scripts loaded with user config
1 parent 0fd91ed commit bdb632f

File tree

12 files changed

+182
-51
lines changed

12 files changed

+182
-51
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/nu-lsp/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ url = { workspace = true }
2626
[dev-dependencies]
2727
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.102.1" }
2828
nu-command = { path = "../nu-command", version = "0.102.1" }
29+
nu-engine = { path = "../nu-engine", version = "0.102.1" }
2930
nu-test-support = { path = "../nu-test-support", version = "0.102.1" }
3031

3132
assert-json-diff = "2.0"

crates/nu-lsp/src/completion.rs

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ mod tests {
162162

163163
#[test]
164164
fn complete_on_variable() {
165-
let (client_connection, _recv) = initialize_language_server(None);
165+
let (client_connection, _recv) = initialize_language_server(None, None);
166166

167167
let mut script = fixtures();
168168
script.push("lsp");
@@ -191,7 +191,7 @@ mod tests {
191191

192192
#[test]
193193
fn complete_command() {
194-
let (client_connection, _recv) = initialize_language_server(None);
194+
let (client_connection, _recv) = initialize_language_server(None, None);
195195

196196
let mut script = fixtures();
197197
script.push("lsp");
@@ -278,7 +278,7 @@ mod tests {
278278

279279
#[test]
280280
fn fallback_completion() {
281-
let (client_connection, _recv) = initialize_language_server(None);
281+
let (client_connection, _recv) = initialize_language_server(None, None);
282282

283283
let mut script = fixtures();
284284
script.push("lsp");
@@ -335,7 +335,7 @@ mod tests {
335335

336336
#[test]
337337
fn complete_command_with_line() {
338-
let (client_connection, _recv) = initialize_language_server(None);
338+
let (client_connection, _recv) = initialize_language_server(None, None);
339339

340340
let mut script = fixtures();
341341
script.push("lsp");
@@ -365,7 +365,7 @@ mod tests {
365365

366366
#[test]
367367
fn complete_keyword() {
368-
let (client_connection, _recv) = initialize_language_server(None);
368+
let (client_connection, _recv) = initialize_language_server(None, None);
369369

370370
let mut script = fixtures();
371371
script.push("lsp");
@@ -394,7 +394,7 @@ mod tests {
394394

395395
#[test]
396396
fn complete_cell_path() {
397-
let (client_connection, _recv) = initialize_language_server(None);
397+
let (client_connection, _recv) = initialize_language_server(None, None);
398398

399399
let mut script = fixtures();
400400
script.push("lsp");
@@ -433,4 +433,50 @@ mod tests {
433433
])
434434
);
435435
}
436+
437+
#[test]
438+
fn complete_with_external_completer() {
439+
let config = "$env.config.completions.external.completer = {|spans| ['--background']}";
440+
let (client_connection, _recv) = initialize_language_server(Some(config), None);
441+
442+
let mut script = fixtures();
443+
script.push("lsp");
444+
script.push("completion");
445+
script.push("external.nu");
446+
let script = path_to_uri(&script);
447+
448+
open_unchecked(&client_connection, script.clone());
449+
let resp = send_complete_request(&client_connection, script.clone(), 0, 11);
450+
assert_json_include!(
451+
actual: result_from_message(resp),
452+
expected: serde_json::json!([
453+
{
454+
"label": "--background",
455+
"labelDetails": { "description": "string" },
456+
"textEdit": {
457+
"newText": "--background",
458+
"range": { "start": { "line": 0, "character": 5 }, "end": { "line": 0, "character": 11 } }
459+
},
460+
},
461+
])
462+
);
463+
464+
// fallback completer, special argument treatment for `sudo`/`doas`
465+
let resp = send_complete_request(&client_connection, script, 0, 5);
466+
assert_json_include!(
467+
actual: result_from_message(resp),
468+
expected: serde_json::json!([
469+
{
470+
"label": "alias",
471+
"labelDetails": { "description": "keyword" },
472+
"detail": "Alias a command (with optional flags) to a new name.",
473+
"textEdit": {
474+
"range": { "start": { "line": 0, "character": 5 }, "end": { "line": 0, "character": 5 }, },
475+
"newText": "alias"
476+
},
477+
"kind": 14
478+
},
479+
])
480+
);
481+
}
436482
}

crates/nu-lsp/src/diagnostics.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ mod tests {
5656

5757
#[test]
5858
fn publish_diagnostics_variable_does_not_exists() {
59-
let (client_connection, _recv) = initialize_language_server(None);
59+
let (client_connection, _recv) = initialize_language_server(None, None);
6060

6161
let mut script = fixtures();
6262
script.push("lsp");
@@ -87,7 +87,7 @@ mod tests {
8787

8888
#[test]
8989
fn publish_diagnostics_fixed_unknown_variable() {
90-
let (client_connection, _recv) = initialize_language_server(None);
90+
let (client_connection, _recv) = initialize_language_server(None, None);
9191

9292
let mut script = fixtures();
9393
script.push("lsp");
@@ -126,7 +126,7 @@ mod tests {
126126

127127
#[test]
128128
fn publish_diagnostics_none() {
129-
let (client_connection, _recv) = initialize_language_server(None);
129+
let (client_connection, _recv) = initialize_language_server(None, None);
130130

131131
let mut script = fixtures();
132132
script.push("lsp");

crates/nu-lsp/src/goto.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ mod tests {
142142

143143
#[test]
144144
fn goto_definition_for_none_existing_file() {
145-
let (client_connection, _recv) = initialize_language_server(None);
145+
let (client_connection, _recv) = initialize_language_server(None, None);
146146

147147
let mut none_existent_path = root();
148148
none_existent_path.push("none-existent.nu");
@@ -154,7 +154,7 @@ mod tests {
154154

155155
#[test]
156156
fn goto_definition_of_variable() {
157-
let (client_connection, _recv) = initialize_language_server(None);
157+
let (client_connection, _recv) = initialize_language_server(None, None);
158158

159159
let mut script = fixtures();
160160
script.push("lsp");
@@ -179,7 +179,7 @@ mod tests {
179179

180180
#[test]
181181
fn goto_definition_of_cell_path() {
182-
let (client_connection, _recv) = initialize_language_server(None);
182+
let (client_connection, _recv) = initialize_language_server(None, None);
183183

184184
let mut script = fixtures();
185185
script.push("lsp");
@@ -204,7 +204,7 @@ mod tests {
204204

205205
#[test]
206206
fn goto_definition_of_command() {
207-
let (client_connection, _recv) = initialize_language_server(None);
207+
let (client_connection, _recv) = initialize_language_server(None, None);
208208

209209
let mut script = fixtures();
210210
script.push("lsp");
@@ -229,7 +229,7 @@ mod tests {
229229

230230
#[test]
231231
fn goto_definition_of_command_unicode() {
232-
let (client_connection, _recv) = initialize_language_server(None);
232+
let (client_connection, _recv) = initialize_language_server(None, None);
233233

234234
let mut script = fixtures();
235235
script.push("lsp");
@@ -254,7 +254,7 @@ mod tests {
254254

255255
#[test]
256256
fn goto_definition_of_command_parameter() {
257-
let (client_connection, _recv) = initialize_language_server(None);
257+
let (client_connection, _recv) = initialize_language_server(None, None);
258258

259259
let mut script = fixtures();
260260
script.push("lsp");
@@ -279,7 +279,7 @@ mod tests {
279279

280280
#[test]
281281
fn goto_definition_of_variable_in_else_block() {
282-
let (client_connection, _recv) = initialize_language_server(None);
282+
let (client_connection, _recv) = initialize_language_server(None, None);
283283

284284
let mut script = fixtures();
285285
script.push("lsp");
@@ -304,7 +304,7 @@ mod tests {
304304

305305
#[test]
306306
fn goto_definition_of_variable_in_match_guard() {
307-
let (client_connection, _recv) = initialize_language_server(None);
307+
let (client_connection, _recv) = initialize_language_server(None, None);
308308

309309
let mut script = fixtures();
310310
script.push("lsp");
@@ -329,7 +329,7 @@ mod tests {
329329

330330
#[test]
331331
fn goto_definition_of_variable_in_each() {
332-
let (client_connection, _recv) = initialize_language_server(None);
332+
let (client_connection, _recv) = initialize_language_server(None, None);
333333

334334
let mut script = fixtures();
335335
script.push("lsp");
@@ -354,7 +354,7 @@ mod tests {
354354

355355
#[test]
356356
fn goto_definition_of_module() {
357-
let (client_connection, _recv) = initialize_language_server(None);
357+
let (client_connection, _recv) = initialize_language_server(None, None);
358358

359359
let mut script = fixtures();
360360
script.push("lsp");
@@ -379,7 +379,7 @@ mod tests {
379379

380380
#[test]
381381
fn goto_definition_of_module_in_another_file() {
382-
let (client_connection, _recv) = initialize_language_server(None);
382+
let (client_connection, _recv) = initialize_language_server(None, None);
383383

384384
let mut script = fixtures();
385385
script.push("lsp");
@@ -404,7 +404,7 @@ mod tests {
404404

405405
#[test]
406406
fn goto_definition_of_module_in_hide() {
407-
let (client_connection, _recv) = initialize_language_server(None);
407+
let (client_connection, _recv) = initialize_language_server(None, None);
408408

409409
let mut script = fixtures();
410410
script.push("lsp");
@@ -429,7 +429,7 @@ mod tests {
429429

430430
#[test]
431431
fn goto_definition_of_module_in_overlay() {
432-
let (client_connection, _recv) = initialize_language_server(None);
432+
let (client_connection, _recv) = initialize_language_server(None, None);
433433

434434
let mut script = fixtures();
435435
script.push("lsp");

crates/nu-lsp/src/hints.rs

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@ impl LanguageServer {
160160
}
161161
}
162162

163-
/// TODO: test for files loaded as user config
164163
#[cfg(test)]
165164
mod tests {
166165
use crate::path_to_uri;
@@ -205,7 +204,7 @@ mod tests {
205204

206205
#[test]
207206
fn inlay_hint_variable_type() {
208-
let (client_connection, _recv) = initialize_language_server(None);
207+
let (client_connection, _recv) = initialize_language_server(None, None);
209208

210209
let mut script = fixtures();
211210
script.push("lsp");
@@ -232,7 +231,7 @@ mod tests {
232231

233232
#[test]
234233
fn inlay_hint_assignment_type() {
235-
let (client_connection, _recv) = initialize_language_server(None);
234+
let (client_connection, _recv) = initialize_language_server(None, None);
236235

237236
let mut script = fixtures();
238237
script.push("lsp");
@@ -260,7 +259,7 @@ mod tests {
260259

261260
#[test]
262261
fn inlay_hint_parameter_names() {
263-
let (client_connection, _recv) = initialize_language_server(None);
262+
let (client_connection, _recv) = initialize_language_server(None, None);
264263

265264
let mut script = fixtures();
266265
script.push("lsp");
@@ -319,4 +318,34 @@ mod tests {
319318
])
320319
);
321320
}
321+
322+
#[test]
323+
/// https://github.com/nushell/nushell/pull/15071
324+
fn inlay_hint_for_nu_script_loaded_on_init() {
325+
let mut script = fixtures();
326+
script.push("lsp");
327+
script.push("hints");
328+
script.push("type.nu");
329+
let script_path_str = script.to_str();
330+
let script = path_to_uri(&script);
331+
332+
let config = format!("source {}", script_path_str.unwrap());
333+
let (client_connection, _recv) = initialize_language_server(Some(&config), None);
334+
335+
open_unchecked(&client_connection, script.clone());
336+
let resp = send_inlay_hint_request(&client_connection, script.clone());
337+
338+
assert_json_eq!(
339+
result_from_message(resp),
340+
serde_json::json!([
341+
{ "position": { "line": 0, "character": 9 }, "label": ": int", "kind": 1 },
342+
{ "position": { "line": 1, "character": 7 }, "label": ": string", "kind": 1 },
343+
{ "position": { "line": 2, "character": 8 }, "label": ": bool", "kind": 1 },
344+
{ "position": { "line": 3, "character": 9 }, "label": ": float", "kind": 1 },
345+
{ "position": { "line": 4, "character": 8 }, "label": ": list", "kind": 1 },
346+
{ "position": { "line": 5, "character": 10 }, "label": ": record", "kind": 1 },
347+
{ "position": { "line": 6, "character": 11 }, "label": ": closure", "kind": 1 }
348+
])
349+
);
350+
}
322351
}

0 commit comments

Comments
 (0)