-
Notifications
You must be signed in to change notification settings - Fork 3
/
complete.c
70 lines (58 loc) · 1.83 KB
/
complete.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "lib/cmsl_complete.hpp"
#include <stdio.h>
int complete_and_print_results(struct cmsl_parsed_source* parsed_source,
unsigned position)
{
struct cmsl_complete_results* results =
cmsl_complete_at(parsed_source, position);
if (!results) {
return 1;
}
int i;
for (i = 0; i < results->num_results; ++i) {
printf("%s\n", results->results[i]);
}
cmsl_destroy_complete_results(results);
return 0;
}
int main()
{
const char* source = "class hello_complete_world"
"{};"
""
"int foo() {}"
""
"int bar;"
""
"int main(int param_1, list<string> param_2) {}"
""
"int baz() {}"
""
"class last_class"
"{};";
struct cmsl_parsed_source* parsed_source = cmsl_parse_source(source, NULL);
if (!parsed_source) {
return 1;
}
const unsigned before_main_declaration_pos = 49u;
const unsigned main_body_pos = 94u;
const unsigned last_class_body_pos = 124u;
printf("Completion just before the main function: \n");
if (complete_and_print_results(parsed_source, before_main_declaration_pos) !=
0) {
cmsl_destroy_parsed_source(parsed_source);
return 2;
}
printf("\n\nCompletion inside the main function: \n");
if (complete_and_print_results(parsed_source, main_body_pos) != 0) {
cmsl_destroy_parsed_source(parsed_source);
return 2;
}
printf("\n\nCompletion inside the last_class body: \n");
if (complete_and_print_results(parsed_source, last_class_body_pos) != 0) {
cmsl_destroy_parsed_source(parsed_source);
return 2;
}
cmsl_destroy_parsed_source(parsed_source);
return 0;
}