@@ -129,22 +129,22 @@ fn is_require_stat(stat: LuaStat, require_like_func: &[String]) -> Option<bool>
129129 LuaStat :: LocalStat ( local_stat) => {
130130 let exprs = local_stat. get_value_exprs ( ) ;
131131 for expr in exprs {
132- if is_require_expr ( expr, require_like_func) . unwrap_or ( false ) {
132+ if is_require_expr ( expr, require_like_func, 0 ) . unwrap_or ( false ) {
133133 return Some ( true ) ;
134134 }
135135 }
136136 }
137137 LuaStat :: AssignStat ( assign_stat) => {
138138 let ( _, exprs) = assign_stat. get_var_and_expr_list ( ) ;
139139 for expr in exprs {
140- if is_require_expr ( expr, require_like_func) . unwrap_or ( false ) {
140+ if is_require_expr ( expr, require_like_func, 0 ) . unwrap_or ( false ) {
141141 return Some ( true ) ;
142142 }
143143 }
144144 }
145145 LuaStat :: CallExprStat ( call_expr_stat) => {
146146 let expr = call_expr_stat. get_call_expr ( ) ?;
147- if is_require_expr ( expr. into ( ) , require_like_func) . unwrap_or ( false ) {
147+ if is_require_expr ( expr. into ( ) , require_like_func, 0 ) . unwrap_or ( false ) {
148148 return Some ( true ) ;
149149 }
150150 }
@@ -154,15 +154,38 @@ fn is_require_stat(stat: LuaStat, require_like_func: &[String]) -> Option<bool>
154154 Some ( false )
155155}
156156
157- fn is_require_expr ( expr : LuaExpr , require_like_func : & [ String ] ) -> Option < bool > {
158- if let LuaExpr :: CallExpr ( call_expr) = expr {
159- let name = call_expr. get_prefix_expr ( ) ?;
160- if let LuaExpr :: NameExpr ( name_expr) = name {
161- let name = name_expr. get_name_text ( ) ?;
162- if require_like_func. contains ( & name. to_string ( ) ) || name == "require" {
157+ fn is_require_expr ( expr : LuaExpr , require_like_func : & [ String ] , depth : usize ) -> Option < bool > {
158+ if depth > 5 {
159+ return Some ( false ) ;
160+ }
161+ match expr {
162+ LuaExpr :: CallExpr ( call_expr) => {
163+ let name = call_expr. get_prefix_expr ( ) ?;
164+ match name {
165+ LuaExpr :: NameExpr ( name_expr) => {
166+ let name = name_expr. get_name_text ( ) ?;
167+ if require_like_func. contains ( & name. to_string ( ) ) || name == "require" {
168+ return Some ( true ) ;
169+ }
170+ }
171+ LuaExpr :: CallExpr ( prefix_call_expr) => {
172+ if is_require_expr ( prefix_call_expr. into ( ) , require_like_func, depth + 1 )
173+ . unwrap_or ( false )
174+ {
175+ return Some ( true ) ;
176+ }
177+ }
178+ _ => { }
179+ }
180+ }
181+ LuaExpr :: IndexExpr ( index_expr) => {
182+ if is_require_expr ( index_expr. get_prefix_expr ( ) ?, require_like_func, depth + 1 )
183+ . unwrap_or ( false )
184+ {
163185 return Some ( true ) ;
164186 }
165187 }
188+ _ => { }
166189 }
167190
168191 Some ( false )
0 commit comments