teo_parser/search/
search_identifier_path.rs1use std::sync::Arc;
2use crate::ast::node::Node;
3use crate::availability::Availability;
4use crate::expr::ExprInfo;
5use crate::ast::schema::Schema;
6use crate::ast::source::Source;
7use crate::resolver::resolve_identifier::{resolve_identifier_path_names_with_filter_to_top, resolve_identifier_path_names_with_filter_to_top_multiple, top_to_expr_info};
8use crate::traits::identifiable::Identifiable;
9use crate::traits::resolved::Resolve;
10
11pub fn search_identifier_path_names_with_filter_to_expr_info(
12 identifier_path_names: &Vec<&str>,
13 schema: &Schema,
14 source: &Source,
15 namespace_str_path: &Vec<&str>,
16 filter: &Arc<dyn Fn(&Node) -> bool>,
17 availability: Availability,
18) -> Option<ExprInfo> {
19 search_identifier_path_names_with_filter_to_top(
20 identifier_path_names,
21 schema,
22 source,
23 namespace_str_path,
24 filter,
25 availability
26 ).map(|t| top_to_expr_info(t, None))
27}
28
29pub fn search_identifier_path_names_with_filter_to_path(
30 identifier_path_names: &Vec<&str>,
31 schema: &Schema,
32 source: &Source,
33 namespace_str_path: &Vec<&str>,
34 filter: &Arc<dyn Fn(&Node) -> bool>,
35 availability: Availability,
36) -> Option<Vec<usize>> {
37 search_identifier_path_names_with_filter_to_top(
38 identifier_path_names,
39 schema,
40 source,
41 namespace_str_path,
42 filter,
43 availability
44 ).map(|t| t.path().clone())
45}
46
47pub fn search_identifier_path_names_with_filter_to_top<'a>(
48 identifier_path_names: &Vec<&str>,
49 schema: &'a Schema,
50 source: &'a Source,
51 namespace_str_path: &Vec<&str>,
52 filter: &Arc<dyn Fn(&Node) -> bool>,
53 availability: Availability,
54) -> Option<&'a Node> {
55 resolve_identifier_path_names_with_filter_to_top(
56 identifier_path_names,
57 schema,
58 source,
59 namespace_str_path,
60 filter,
61 availability,
62 )
63}
64
65pub fn search_identifier_path_names_with_filter_to_expr_info_multiple(
66 identifier_path_names: &Vec<&str>,
67 schema: &Schema,
68 source: &Source,
69 namespace_str_path: &Vec<&str>,
70 filter: &Arc<dyn Fn(&Node) -> bool>,
71 availability: Availability,
72) -> Vec<ExprInfo> {
73 search_identifier_path_names_with_filter_to_top_multiple(
74 identifier_path_names,
75 schema,
76 source,
77 namespace_str_path,
78 filter,
79 availability
80 ).iter().map(|t| top_to_expr_info(t, None)).collect()
81}
82
83pub fn search_identifier_path_names_with_filter_to_path_multiple(
84 identifier_path_names: &Vec<&str>,
85 schema: &Schema,
86 source: &Source,
87 namespace_str_path: &Vec<&str>,
88 filter: &Arc<dyn Fn(&Node) -> bool>,
89 availability: Availability,
90) -> Vec<Vec<usize>> {
91 search_identifier_path_names_with_filter_to_top_multiple(
92 identifier_path_names,
93 schema,
94 source,
95 namespace_str_path,
96 filter,
97 availability
98 ).iter().map(|t| t.path().clone()).collect()
99}
100
101pub fn search_identifier_path_names_with_filter_to_top_multiple<'a>(
102 identifier_path_names: &Vec<&str>,
103 schema: &'a Schema,
104 source: &'a Source,
105 namespace_str_path: &Vec<&str>,
106 filter: &Arc<dyn Fn(&Node) -> bool>,
107 availability: Availability,
108) -> Vec<&'a Node> {
109 resolve_identifier_path_names_with_filter_to_top_multiple(
110 identifier_path_names,
111 schema,
112 source,
113 namespace_str_path,
114 filter,
115 availability,
116 )
117}