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+ }
0 commit comments