Skip to content

Commit 1fa2568

Browse files
Add manual verification tests for signature help
Co-authored-by: felix-andreas-copilot <[email protected]>
1 parent e4f24fc commit 1fa2568

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
use roughly::{signature_help, tree, lsp_types::Position};
2+
use ropey::Rope;
3+
use std::collections::HashMap;
4+
5+
#[test]
6+
fn manual_signature_help_test() {
7+
let content = r#"sum(1, 2, 3)
8+
mean(c(1, 2, 3))
9+
plot(x, y)
10+
11+
base::sum(1, 2)
12+
13+
obj$method(arg1, arg2)
14+
15+
sum(mean(x), median(y))
16+
17+
sum(
18+
1,
19+
2,
20+
3
21+
)"#;
22+
23+
let rope = Rope::from_str(content);
24+
let tree = tree::parse(&mut tree::new_parser(), content, None);
25+
26+
// Test signature help at different positions
27+
let test_cases = vec![
28+
(0, 4), // Inside sum(1, 2, 3) - first parameter
29+
(0, 7), // Inside sum(1, 2, 3) - second parameter
30+
(0, 10), // Inside sum(1, 2, 3) - third parameter
31+
(1, 5), // Inside mean(c(1, 2, 3)) - first parameter
32+
(4, 11), // Inside base::sum(1, 2) - first parameter
33+
(6, 4), // Inside obj$method(arg1, arg2) - first parameter
34+
(8, 4), // Inside sum(mean(x), median(y)) - first parameter
35+
(10, 2), // Inside multiline sum - first parameter
36+
(11, 2), // Inside multiline sum - second parameter
37+
];
38+
39+
for (line, character) in test_cases {
40+
let position = Position::new(line, character);
41+
let result = signature_help::get(position, &rope, &tree, &HashMap::new());
42+
43+
println!("Position {line}:{character} -> {:?}", result.as_ref().map(|s| (s.signatures[0].label.clone(), s.active_parameter)));
44+
45+
// Basic assertions
46+
if line == 0 && character == 4 {
47+
assert!(result.is_some());
48+
let sig = result.unwrap();
49+
assert_eq!(sig.signatures[0].label, "sum(...)");
50+
assert_eq!(sig.active_parameter, Some(0));
51+
} else if line == 0 && character == 7 {
52+
assert!(result.is_some());
53+
let sig = result.unwrap();
54+
assert_eq!(sig.signatures[0].label, "sum(...)");
55+
assert_eq!(sig.active_parameter, Some(1));
56+
} else if line == 4 && character == 11 {
57+
assert!(result.is_some());
58+
let sig = result.unwrap();
59+
assert_eq!(sig.signatures[0].label, "sum(...)");
60+
assert_eq!(sig.active_parameter, Some(0));
61+
}
62+
}
63+
}

examples/test_signature_help.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
use roughly::{signature_help, tree, lsp_types::Position};
2+
use ropey::Rope;
3+
use std::collections::HashMap;
4+
5+
fn main() {
6+
let content = std::fs::read_to_string("/tmp/test_signature_help.R").unwrap();
7+
let rope = Rope::from_str(&content);
8+
let tree = tree::parse(&mut tree::new_parser(), &content, None);
9+
10+
// Test signature help at different positions
11+
let test_cases = vec![
12+
(0, 4), // Inside sum(1, 2, 3) - first parameter
13+
(0, 7), // Inside sum(1, 2, 3) - second parameter
14+
(0, 10), // Inside sum(1, 2, 3) - third parameter
15+
(1, 5), // Inside mean(c(1, 2, 3)) - first parameter
16+
(4, 11), // Inside base::sum(1, 2) - first parameter
17+
(7, 4), // Inside obj$method(arg1, arg2) - first parameter
18+
(10, 4), // Inside sum(mean(x), median(y)) - first parameter
19+
(13, 2), // Inside multiline sum - first parameter
20+
(14, 2), // Inside multiline sum - second parameter
21+
];
22+
23+
for (line, character) in test_cases {
24+
let position = Position::new(line, character);
25+
let result = signature_help::get(position, &rope, &tree, &HashMap::new());
26+
27+
println!("Position {line}:{character} -> {:?}", result.map(|s| (s.signatures[0].label.clone(), s.active_parameter)));
28+
}
29+
}

0 commit comments

Comments
 (0)