MCPcopy Create free account
hub / github.com/PHPantom-dev/phpantom_lsp / find_in_statement

Function find_in_statement

src/code_actions/cursor_context.rs:96–175  ·  view source on GitHub ↗
(stmt: &'a Statement<'a>, cursor: u32)

Source from the content-addressed store, hash-verified

94// ── AST walk (private) ─────────────────────────────────────────────────────
95
96fn find_in_statement<'a>(stmt: &'a Statement<'a>, cursor: u32) -> CursorContext<'a> {
97 match stmt {
98 Statement::Namespace(ns) => {
99 for s in ns.statements().iter() {
100 let ctx = find_in_statement(s, cursor);
101 if !matches!(ctx, CursorContext::None) {
102 return ctx;
103 }
104 }
105 CursorContext::None
106 }
107 Statement::Function(func) => {
108 let span = func.span();
109 if cursor >= span.start.offset && cursor <= span.end.offset {
110 let body_start = func.body.left_brace.start.offset;
111 let in_body = cursor >= body_start;
112 CursorContext::InFunction(func, in_body)
113 } else {
114 CursorContext::None
115 }
116 }
117 Statement::Class(class) => {
118 let span = class.span();
119 if cursor >= span.start.offset && cursor <= span.end.offset {
120 let member = find_member_at_cursor(class.members.iter(), cursor);
121 CursorContext::InClassLike {
122 kind: ClassLikeContextKind::Class,
123 class_readonly: class.modifiers.contains_readonly(),
124 member,
125 all_members: &class.members,
126 }
127 } else {
128 CursorContext::None
129 }
130 }
131 Statement::Interface(iface) => {
132 let span = iface.span();
133 if cursor >= span.start.offset && cursor <= span.end.offset {
134 let member = find_member_at_cursor(iface.members.iter(), cursor);
135 CursorContext::InClassLike {
136 kind: ClassLikeContextKind::Interface,
137 class_readonly: false,
138 member,
139 all_members: &iface.members,
140 }
141 } else {
142 CursorContext::None
143 }
144 }
145 Statement::Trait(tr) => {
146 let span = tr.span();
147 if cursor >= span.start.offset && cursor <= span.end.offset {
148 let member = find_member_at_cursor(tr.members.iter(), cursor);
149 CursorContext::InClassLike {
150 kind: ClassLikeContextKind::Trait,
151 class_readonly: false,
152 member,
153 all_members: &tr.members,

Callers 1

find_cursor_contextFunction · 0.70

Calls 2

find_member_at_cursorFunction · 0.85
iterMethod · 0.80

Tested by

no test coverage detected