@@ -2018,12 +2018,12 @@ impl JavaAnalyzer {
20182018
20192019 // Extract performance notes
20202020 for issue in & comprehensive. performance_analysis . performance_issues {
2021- performance_notes. push ( format ! ( "{:?}: {}" , issue. issue_type, issue. description) ) ;
2021+ performance_notes. push ( format ! ( "{:?}: {}" , issue. issue_type, & issue. description) ) ;
20222022 }
20232023
20242024 // Extract modern features
20252025 for lambda in & comprehensive. modern_features . lambda_expressions {
2026- modern_features. push ( format ! ( "Lambda expression: {}" , lambda. expression) ) ;
2026+ modern_features. push ( format ! ( "Lambda expression: {}" , & lambda. expression) ) ;
20272027 }
20282028
20292029 // Extract framework security recommendations
@@ -2905,7 +2905,7 @@ impl JavaAnalyzer {
29052905
29062906 // Helper methods
29072907 fn find_subclasses ( & self , content : & str , class_name : & str ) -> Vec < String > {
2908- let regex = Regex :: new ( & format ! ( r"class\s+(\w+)\s+extends\s+{}" , class_name ) ) . unwrap ( ) ;
2908+ let regex = Regex :: new ( & format ! ( r"class\s+(\w+)\s+extends\s+{class_name}" ) ) . unwrap ( ) ;
29092909 regex
29102910 . captures_iter ( content)
29112911 . filter_map ( |cap| cap. get ( 1 ) . map ( |m| m. as_str ( ) . to_string ( ) ) )
@@ -2930,7 +2930,7 @@ impl JavaAnalyzer {
29302930 }
29312931
29322932 fn find_superclass ( & self , content : & str , class_name : & str ) -> Option < String > {
2933- let regex = Regex :: new ( & format ! ( r"class\s+{}\s+extends\s+(\w+)" , class_name ) ) . unwrap ( ) ;
2933+ let regex = Regex :: new ( & format ! ( r"class\s+{class_name }\s+extends\s+(\w+)" ) ) . unwrap ( ) ;
29342934 regex
29352935 . captures ( content)
29362936 . and_then ( |cap| cap. get ( 1 ) . map ( |m| m. as_str ( ) . to_string ( ) ) )
@@ -2975,7 +2975,7 @@ impl JavaAnalyzer {
29752975 "observer" => {
29762976 "Observer pattern defines one-to-many dependency between objects" . to_string ( )
29772977 }
2978- _ => format ! ( "{} pattern detected" , pattern_type ) ,
2978+ _ => format ! ( "{pattern_type } pattern detected" ) ,
29792979 }
29802980 }
29812981
@@ -3547,8 +3547,8 @@ impl JavaAnalyzer {
35473547 let proper_encapsulation = match access_modifier {
35483548 AccessModifier :: Private => {
35493549 // Check if there are corresponding getter/setter methods
3550- let getter_pattern = format ! ( r"(?i)get{}" , field_name ) ;
3551- let setter_pattern = format ! ( r"(?i)set{}" , field_name ) ;
3550+ let getter_pattern = format ! ( r"(?i)get{field_name}" ) ;
3551+ let setter_pattern = format ! ( r"(?i)set{field_name}" ) ;
35523552 let has_getter = Regex :: new ( & getter_pattern)
35533553 . unwrap ( )
35543554 . is_match ( & class_content) ;
@@ -3701,7 +3701,7 @@ impl JavaAnalyzer {
37013701 let class_content = self . extract_class_content ( content, class_name) ;
37023702
37033703 // Check if class is declared as final
3704- let is_final_class = class_content. contains ( & format ! ( "final class {}" , class_name ) ) ;
3704+ let is_final_class = class_content. contains ( & format ! ( "final class {class_name}" ) ) ;
37053705
37063706 // Find all fields and check immutability
37073707 let field_regex = Regex :: new (
@@ -3807,7 +3807,7 @@ impl JavaAnalyzer {
38073807 }
38083808
38093809 fn find_implementing_classes ( & self , content : & str , interface_name : & str ) -> Vec < String > {
3810- let regex = Regex :: new ( & format ! ( r"class\s+(\w+).*implements.*{}" , interface_name ) ) . unwrap ( ) ;
3810+ let regex = Regex :: new ( & format ! ( r"class\s+(\w+).*implements.*{interface_name}" ) ) . unwrap ( ) ;
38113811 regex
38123812 . captures_iter ( content)
38133813 . filter_map ( |cap| cap. get ( 1 ) . map ( |m| m. as_str ( ) . to_string ( ) ) )
@@ -4189,7 +4189,7 @@ impl JavaAnalyzer {
41894189 violations. push ( SOLIDViolation {
41904190 principle : SOLIDPrinciple :: OpenClosed ,
41914191 class_name : "Switch statement" . to_string ( ) ,
4192- description : format ! ( "Large switch statement with {} cases" , case_count ) ,
4192+ description : format ! ( "Large switch statement with {case_count } cases" ) ,
41934193 severity : ViolationSeverity :: Medium ,
41944194 recommendation : "Consider using polymorphism or strategy pattern instead"
41954195 . to_string ( ) ,
@@ -4423,7 +4423,7 @@ impl JavaAnalyzer {
44234423 let mut dependencies = Vec :: new ( ) ;
44244424
44254425 // Find class boundaries
4426- let class_start = content. find ( & format ! ( "class {}" , class_name ) ) ;
4426+ let class_start = content. find ( & format ! ( "class {class_name}" ) ) ;
44274427 if class_start. is_none ( ) {
44284428 return dependencies;
44294429 }
@@ -4501,7 +4501,7 @@ impl JavaAnalyzer {
45014501 // Check for circular dependencies (simplified check)
45024502 if content. contains ( "@Autowired" )
45034503 && dependency_type. contains ( "Service" )
4504- && content. contains ( & format ! ( "class {}Service" , field_name ) )
4504+ && content. contains ( & format ! ( "class {field_name }Service" ) )
45054505 {
45064506 issues. push ( "Potential circular dependency detected" . to_string ( ) ) ;
45074507 }
@@ -4517,7 +4517,7 @@ impl JavaAnalyzer {
45174517 }
45184518
45194519 fn count_constructors ( & self , content : & str , class_name : & str ) -> usize {
4520- let constructor_regex = Regex :: new ( & format ! ( r"public\s+{}\s*\(" , class_name ) ) . unwrap ( ) ;
4520+ let constructor_regex = Regex :: new ( & format ! ( r"public\s+{class_name }\s*\(" ) ) . unwrap ( ) ;
45214521 constructor_regex. find_iter ( content) . count ( )
45224522 }
45234523
@@ -5292,7 +5292,7 @@ impl JavaAnalyzer {
52925292 "path_traversal" => "Potential path traversal vulnerability" . to_string ( ) ,
52935293 "weak_cryptography" => "Weak cryptographic algorithm detected" . to_string ( ) ,
52945294 "insecure_randomness" => "Insecure random number generation" . to_string ( ) ,
5295- _ => format ! ( "Security issue: {}" , vulnerability_type ) ,
5295+ _ => format ! ( "Security issue: {vulnerability_type}" ) ,
52965296 }
52975297 }
52985298
@@ -5540,10 +5540,10 @@ impl JavaAnalyzer {
55405540 let variable_name = captures. get ( 2 ) . unwrap ( ) . as_str ( ) . to_string ( ) ;
55415541
55425542 // Determine usage context
5543- let usage_pattern = if content. contains ( & format ! ( "return {};" , variable_name ) ) {
5543+ let usage_pattern = if content. contains ( & format ! ( "return {variable_name };" ) ) {
55445544 OptionalUsagePattern :: ReturnValue
5545- } else if content. contains ( & format ! ( "{}.map(" , variable_name ) )
5546- || content. contains ( & format ! ( "{}.flatMap(" , variable_name ) )
5545+ } else if content. contains ( & format ! ( "{variable_name }.map(" ) )
5546+ || content. contains ( & format ! ( "{variable_name }.flatMap(" ) )
55475547 {
55485548 OptionalUsagePattern :: ChainedCalls
55495549 } else {
@@ -5552,10 +5552,10 @@ impl JavaAnalyzer {
55525552
55535553 // Check for anti-patterns
55545554 let mut anti_patterns = Vec :: new ( ) ;
5555- if content. contains ( & format ! ( "{}.get()" , variable_name ) ) {
5555+ if content. contains ( & format ! ( "{variable_name }.get()" ) ) {
55565556 anti_patterns. push ( OptionalAntiPattern :: CallingGet ) ;
55575557 }
5558- if content. contains ( & format ! ( "{}.isPresent()" , variable_name ) ) {
5558+ if content. contains ( & format ! ( "{variable_name }.isPresent()" ) ) {
55595559 anti_patterns. push ( OptionalAntiPattern :: UsingIsPresent ) ;
55605560 }
55615561
@@ -5565,7 +5565,7 @@ impl JavaAnalyzer {
55655565 }
55665566
55675567 optional_usages. push ( OptionalUsageInfo {
5568- usage_context : format ! ( "Optional<{}> usage" , optional_type ) ,
5568+ usage_context : format ! ( "Optional<{optional_type }> usage" ) ,
55695569 optional_type,
55705570 usage_pattern,
55715571 anti_patterns,
@@ -5842,9 +5842,9 @@ impl JavaAnalyzer {
58425842 let initializer = captures. get ( 2 ) . unwrap ( ) . as_str ( ) . trim ( ) ;
58435843
58445844 // Determine usage context
5845- let usage_context = if content. contains ( & format ! ( "for (var {}" , var_name ) ) {
5845+ let usage_context = if content. contains ( & format ! ( "for (var {var_name}" ) ) {
58465846 VarUsageContext :: ForLoop
5847- } else if content. contains ( & format ! ( "try (var {}" , var_name ) ) {
5847+ } else if content. contains ( & format ! ( "try (var {var_name}" ) ) {
58485848 VarUsageContext :: TryWithResources
58495849 } else if initializer. contains ( "->" ) {
58505850 VarUsageContext :: LambdaParameter
@@ -5987,7 +5987,7 @@ impl JavaAnalyzer {
59875987 ] ;
59885988
59895989 for ( factory_method, collection_type) in factory_patterns {
5990- let pattern = format ! ( r"{}\s*\(([^)]*)\)" , factory_method ) ;
5990+ let pattern = format ! ( r"{factory_method }\s*\(([^)]*)\)" ) ;
59915991 let factory_regex = Regex :: new ( & pattern) . unwrap ( ) ;
59925992
59935993 for captures in factory_regex. captures_iter ( content) {
@@ -6110,13 +6110,13 @@ impl JavaAnalyzer {
61106110 fn extract_date_time_patterns ( & self , content : & str , api_name : & str ) -> Vec < String > {
61116111 let mut patterns = Vec :: new ( ) ;
61126112
6113- if content. contains ( & format ! ( "{}.now()" , api_name ) ) {
6113+ if content. contains ( & format ! ( "{api_name }.now()" ) ) {
61146114 patterns. push ( "Current time creation" . to_string ( ) ) ;
61156115 }
6116- if content. contains ( & format ! ( "{}.of(" , api_name ) ) {
6116+ if content. contains ( & format ! ( "{api_name }.of(" ) ) {
61176117 patterns. push ( "Specific time creation" . to_string ( ) ) ;
61186118 }
6119- if content. contains ( & format ! ( "{}.parse(" , api_name ) ) {
6119+ if content. contains ( & format ! ( "{api_name }.parse(" ) ) {
61206120 patterns. push ( "String parsing" . to_string ( ) ) ;
61216121 }
61226122 if content. contains ( ".format(" ) {
0 commit comments