@@ -26,7 +26,7 @@ defmodule ElixirAnalyzerDemo do
2626 """
2727
2828 alias ElixirScope.ASTRepository . { EnhancedRepository , MemoryManager }
29- alias ElixirAnalyzerDemo . { AnalysisEngine , SampleDataManager , PerformanceMonitor }
29+ alias ElixirAnalyzerDemo . { SampleDataManager , PerformanceMonitor }
3030
3131 @ doc """
3232 Loads sample projects for analysis and demonstration.
@@ -280,6 +280,64 @@ defmodule ElixirAnalyzerDemo do
280280 end )
281281 end
282282
283+ defp create_complex_ast ( module_name ) , do: create_complex_ast ( module_name , [ ] )
284+ defp create_complex_ast ( module_name , opts ) do
285+ complexity = Keyword . get ( opts , :complexity , :medium )
286+
287+ case complexity do
288+ :high ->
289+ quote do
290+ defmodule unquote ( module_name ) do
291+ def complex_logic ( data ) do
292+ case data do
293+ % { type: :process , items: items } when is_list ( items ) ->
294+ items
295+ |> Enum . filter ( & valid_item? / 1 )
296+ |> Enum . group_by ( & get_category / 1 )
297+ |> Enum . map ( fn { category , items } ->
298+ { category , process_category ( category , items ) }
299+ end )
300+ |> Enum . into ( % { } )
301+
302+ % { type: :aggregate , data: data } ->
303+ aggregate_data ( data )
304+
305+ _ ->
306+ { :error , :invalid_data }
307+ end
308+ end
309+
310+ defp valid_item? ( % { id: id , value: value } ) when is_integer ( id ) and is_number ( value ) do
311+ value > 0
312+ end
313+ defp valid_item? ( _ ) , do: false
314+
315+ defp get_category ( % { category: cat } ) , do: cat
316+ defp get_category ( _ ) , do: :unknown
317+
318+ defp process_category ( :important , items ) do
319+ items |> Enum . map ( & enhance_item / 1 ) |> Enum . sort_by ( & & 1 . priority , :desc )
320+ end
321+ defp process_category ( _ , items ) , do: items
322+
323+ defp enhance_item ( item ) , do: Map . put ( item , :priority , calculate_priority ( item ) )
324+ defp calculate_priority ( % { value: value } ) , do: value * 1.5
325+
326+ defp aggregate_data ( data ) when is_list ( data ) do
327+ % {
328+ count: length ( data ) ,
329+ sum: Enum . sum ( data ) ,
330+ average: Enum . sum ( data ) / length ( data )
331+ }
332+ end
333+ end
334+ end
335+
336+ _ ->
337+ create_sample_ast ( module_name )
338+ end
339+ end
340+
283341 defp benchmark_operations do
284342 # Module lookup benchmark
285343 { time_us , _result } = :timer . tc ( fn ->
@@ -351,63 +409,6 @@ defmodule ElixirAnalyzerDemo do
351409 end
352410 end
353411
354- defp create_complex_ast ( module_name , opts \\ [ ] ) do
355- complexity = Keyword . get ( opts , :complexity , :medium )
356-
357- case complexity do
358- :high ->
359- quote do
360- defmodule unquote ( module_name ) do
361- def complex_logic ( data ) do
362- case data do
363- % { type: :process , items: items } when is_list ( items ) ->
364- items
365- |> Enum . filter ( & valid_item? / 1 )
366- |> Enum . group_by ( & get_category / 1 )
367- |> Enum . map ( fn { category , items } ->
368- { category , process_category ( category , items ) }
369- end )
370- |> Enum . into ( % { } )
371-
372- % { type: :aggregate , data: data } ->
373- aggregate_data ( data )
374-
375- _ ->
376- { :error , :invalid_data }
377- end
378- end
379-
380- defp valid_item? ( % { id: id , value: value } ) when is_integer ( id ) and is_number ( value ) do
381- value > 0
382- end
383- defp valid_item? ( _ ) , do: false
384-
385- defp get_category ( % { category: cat } ) , do: cat
386- defp get_category ( _ ) , do: :unknown
387-
388- defp process_category ( :important , items ) do
389- items |> Enum . map ( & enhance_item / 1 ) |> Enum . sort_by ( & & 1 . priority , :desc )
390- end
391- defp process_category ( _ , items ) , do: items
392-
393- defp enhance_item ( item ) , do: Map . put ( item , :priority , calculate_priority ( item ) )
394- defp calculate_priority ( % { value: value } ) , do: value * 1.5
395-
396- defp aggregate_data ( data ) when is_list ( data ) do
397- % {
398- count: length ( data ) ,
399- sum: Enum . sum ( data ) ,
400- average: Enum . sum ( data ) / length ( data )
401- }
402- end
403- end
404- end
405-
406- _ ->
407- create_sample_ast ( module_name )
408- end
409- end
410-
411412 defp format_bytes ( bytes ) when bytes < 1024 , do: "#{ bytes } B"
412413 defp format_bytes ( bytes ) when bytes < 1024 * 1024 , do: "#{ Float . round ( bytes / 1024 , 1 ) } KB"
413414 defp format_bytes ( bytes ) when bytes < 1024 * 1024 * 1024 , do: "#{ Float . round ( bytes / ( 1024 * 1024 ) , 1 ) } MB"
0 commit comments