mirror of
https://github.com/nushell/nushell.git
synced 2025-03-13 06:58:47 +01:00
test: lsp exportable completion
This commit is contained in:
parent
a65b6eff74
commit
ecb28096f2
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -3828,6 +3828,7 @@ dependencies = [
|
||||
"nu-glob",
|
||||
"nu-parser",
|
||||
"nu-protocol",
|
||||
"nu-std",
|
||||
"nu-test-support",
|
||||
"nucleo-matcher",
|
||||
"serde",
|
||||
|
@ -27,6 +27,7 @@ url = { workspace = true }
|
||||
nu-cmd-lang = { path = "../nu-cmd-lang", version = "0.102.1" }
|
||||
nu-command = { path = "../nu-command", version = "0.102.1" }
|
||||
nu-engine = { path = "../nu-engine", version = "0.102.1" }
|
||||
nu-std = { path = "../nu-std", version = "0.102.1" }
|
||||
nu-test-support = { path = "../nu-test-support", version = "0.102.1" }
|
||||
|
||||
assert-json-diff = "2.0"
|
||||
|
@ -547,4 +547,96 @@ mod tests {
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn complete_use_arguments() {
|
||||
let (client_connection, _recv) = initialize_language_server(None, None);
|
||||
|
||||
let mut script = fixtures();
|
||||
script.push("lsp");
|
||||
script.push("completion");
|
||||
script.push("use.nu");
|
||||
let script = path_to_uri(&script);
|
||||
|
||||
open_unchecked(&client_connection, script.clone());
|
||||
let resp = send_complete_request(&client_connection, script.clone(), 4, 17);
|
||||
assert_json_include!(
|
||||
actual: result_from_message(resp),
|
||||
expected: serde_json::json!([
|
||||
{
|
||||
"label": "std-rfc",
|
||||
"labelDetails": { "description": "module" },
|
||||
"textEdit": {
|
||||
"newText": "std-rfc",
|
||||
"range": { "start": { "character": 11, "line": 4 }, "end": { "character": 17, "line": 4 } }
|
||||
},
|
||||
"kind": 9 // module kind
|
||||
}
|
||||
])
|
||||
);
|
||||
|
||||
let resp = send_complete_request(&client_connection, script.clone(), 5, 22);
|
||||
assert_json_include!(
|
||||
actual: result_from_message(resp),
|
||||
expected: serde_json::json!([
|
||||
{
|
||||
"label": "clip",
|
||||
"labelDetails": { "description": "module" },
|
||||
"textEdit": {
|
||||
"newText": "clip",
|
||||
"range": { "start": { "character": 19, "line": 5 }, "end": { "character": 23, "line": 5 } }
|
||||
},
|
||||
"kind": 9 // module kind
|
||||
}
|
||||
])
|
||||
);
|
||||
|
||||
let resp = send_complete_request(&client_connection, script.clone(), 5, 35);
|
||||
assert_json_include!(
|
||||
actual: result_from_message(resp),
|
||||
expected: serde_json::json!([
|
||||
{
|
||||
"label": "paste",
|
||||
"labelDetails": { "description": "custom" },
|
||||
"textEdit": {
|
||||
"newText": "paste",
|
||||
"range": { "start": { "character": 32, "line": 5 }, "end": { "character": 37, "line": 5 } }
|
||||
},
|
||||
"kind": 2
|
||||
}
|
||||
])
|
||||
);
|
||||
|
||||
let resp = send_complete_request(&client_connection, script.clone(), 6, 14);
|
||||
assert_json_include!(
|
||||
actual: result_from_message(resp),
|
||||
expected: serde_json::json!([
|
||||
{
|
||||
"label": "null_device ",
|
||||
"labelDetails": { "description": "variable" },
|
||||
"textEdit": {
|
||||
"newText": "null_device ",
|
||||
"range": { "start": { "character": 8, "line": 6 }, "end": { "character": 14, "line": 6 } }
|
||||
},
|
||||
"kind": 6 // variable kind
|
||||
}
|
||||
])
|
||||
);
|
||||
|
||||
let resp = send_complete_request(&client_connection, script, 7, 13);
|
||||
assert_json_include!(
|
||||
actual: result_from_message(resp),
|
||||
expected: serde_json::json!([
|
||||
{
|
||||
"label": "foo",
|
||||
"labelDetails": { "description": "variable" },
|
||||
"textEdit": {
|
||||
"newText": "foo",
|
||||
"range": { "start": { "character": 11, "line": 7 }, "end": { "character": 14, "line": 7 } }
|
||||
},
|
||||
"kind": 6 // variable kind
|
||||
}
|
||||
])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -655,6 +655,7 @@ mod tests {
|
||||
TextDocumentPositionParams, WorkDoneProgressParams,
|
||||
};
|
||||
use nu_protocol::{debugger::WithoutDebug, engine::Stack, PipelineData, ShellError, Value};
|
||||
use nu_std::load_standard_library;
|
||||
use nu_test_support::fs::fixtures;
|
||||
use std::sync::mpsc::{self, Receiver};
|
||||
use std::time::Duration;
|
||||
@ -671,6 +672,7 @@ mod tests {
|
||||
let engine_state = nu_cmd_lang::create_default_context();
|
||||
let mut engine_state = nu_command::add_shell_command_context(engine_state);
|
||||
engine_state.generate_nu_constant();
|
||||
assert!(load_standard_library(&mut engine_state).is_ok());
|
||||
let cwd = std::env::current_dir().expect("Could not get current working directory.");
|
||||
engine_state.add_env_var(
|
||||
"PWD".into(),
|
||||
|
@ -80,7 +80,17 @@ impl LanguageServer {
|
||||
if sp < last_span {
|
||||
continue;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
let mut delta_start = range.start.character;
|
||||
=======
|
||||
// in case the start position is at the end of last line
|
||||
let real_start_char = if range.end.line != range.start.line {
|
||||
0
|
||||
} else {
|
||||
range.start.character
|
||||
};
|
||||
let mut delta_start = real_start_char;
|
||||
>>>>>>> 5fa8f68d0 (test: lsp exportable completion)
|
||||
if range.end.line == last_token_line {
|
||||
delta_start -= last_token_char;
|
||||
}
|
||||
|
8
tests/fixtures/lsp/completion/use.nu
vendored
Normal file
8
tests/fixtures/lsp/completion/use.nu
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
export module "🤔🐘" {
|
||||
export const foo = "🤔🐘";
|
||||
}
|
||||
|
||||
export use std-rf
|
||||
export use std-rfc/clip [ copy, paste ]
|
||||
use std null_d
|
||||
use 🤔🐘 [ foo, ]
|
Loading…
Reference in New Issue
Block a user