@@ -80,6 +80,7 @@ func (a *Analyzer) AnalyzePaths(paths []string) ([]php.CodeChunk, error) {
8080// analyzeWordPress performs complete WordPress analysis using both package info and AST
8181func (a * Analyzer ) analyzeWordPress (packages []* php.PackageInfo , paths []string ) * WordPressInfo {
8282 info := & WordPressInfo {}
83+ var wcAPICalls []woocommerce.WCAPICall
8384
8485 // Analyze from parsed package info (method calls)
8586 info .Hooks = a .hookAnalyzer .AnalyzeHooks (packages )
@@ -149,6 +150,12 @@ func (a *Analyzer) analyzeWordPress(packages []*php.PackageInfo, paths []string)
149150 }
150151 }
151152
153+ // WooCommerce API calls from AST
154+ wcInfo := a .woocommerceAnalyzer .Analyze (rootNode , path )
155+ if wcInfo != nil && len (wcInfo .APICalls ) > 0 {
156+ wcAPICalls = append (wcAPICalls , wcInfo .APICalls ... )
157+ }
158+
152159 return nil
153160 })
154161 }
@@ -173,8 +180,11 @@ func (a *Analyzer) analyzeWordPress(packages []*php.PackageInfo, paths []string)
173180 })
174181 }
175182 wcHooks := a .woocommerceAnalyzer .AnalyzeHooksFromWP (wcInputHooks )
176- if len (wcHooks ) > 0 {
177- wcInfo := & woocommerce.WooCommerceInfo {Hooks : wcHooks }
183+ if len (wcHooks ) > 0 || len (wcAPICalls ) > 0 {
184+ wcInfo := & woocommerce.WooCommerceInfo {
185+ Hooks : wcHooks ,
186+ APICalls : wcAPICalls ,
187+ }
178188 info .WooCommerceInfo = wcInfo
179189 }
180190
@@ -428,7 +438,7 @@ func (a *Analyzer) convertToChunks(info *WordPressInfo) []php.CodeChunk {
428438 FilePath : wcHook .FilePath ,
429439 StartLine : wcHook .StartLine ,
430440 EndLine : wcHook .EndLine ,
431- Signature : fmt . Sprintf ( "%s('%s', '%s')" , wcHook . HookType , wcHook . HookName , wcHook . Callback ),
441+ Signature : buildWCHookSignature ( wcHook ),
432442 Docstring : fmt .Sprintf ("WooCommerce %s hook (%s area): %s" , wcHook .HookType , wcHook .Area , wcHook .HookName ),
433443 Metadata : map [string ]any {
434444 "framework" : "wordpress" ,
@@ -504,6 +514,33 @@ func buildHookSignature(hook WPHook) string {
504514 }
505515}
506516
517+ // buildWCHookSignature creates a readable signature for a WooCommerce hook
518+ // using the real WordPress function names instead of raw hook type values
519+ func buildWCHookSignature (wcHook woocommerce.WCHook ) string {
520+ switch wcHook .HookType {
521+ case "action" :
522+ if wcHook .Priority > 0 {
523+ return fmt .Sprintf ("add_action('%s', '%s', %d)" , wcHook .HookName , wcHook .Callback , wcHook .Priority )
524+ }
525+ return fmt .Sprintf ("add_action('%s', '%s')" , wcHook .HookName , wcHook .Callback )
526+ case "filter" :
527+ if wcHook .Priority > 0 {
528+ return fmt .Sprintf ("add_filter('%s', '%s', %d)" , wcHook .HookName , wcHook .Callback , wcHook .Priority )
529+ }
530+ return fmt .Sprintf ("add_filter('%s', '%s')" , wcHook .HookName , wcHook .Callback )
531+ case "action_trigger" :
532+ return fmt .Sprintf ("do_action('%s')" , wcHook .HookName )
533+ case "filter_trigger" :
534+ return fmt .Sprintf ("apply_filters('%s')" , wcHook .HookName )
535+ case "action_removal" :
536+ return fmt .Sprintf ("remove_action('%s', '%s')" , wcHook .HookName , wcHook .Callback )
537+ case "filter_removal" :
538+ return fmt .Sprintf ("remove_filter('%s', '%s')" , wcHook .HookName , wcHook .Callback )
539+ default :
540+ return fmt .Sprintf ("%s('%s', '%s')" , wcHook .HookType , wcHook .HookName , wcHook .Callback )
541+ }
542+ }
543+
507544// IsWordPressProject detects if the given paths contain a WordPress project.
508545// It first checks the paths directly (directory-level indicators, plugin headers),
509546// then walks UP parent directories to find WordPress root indicators.
0 commit comments