Files
Jaganpro 39801fa194 1 feat(shared): add Live SOQL Query Plan Analyzer
2
   3 New shared module that calls Salesforce REST API explain endpoint to provide
   4 real-time query plan analysis. Integrates with sf-soql, sf-apex, and sf-data
   5 hooks for automatic SOQL optimization feedback.
   6
   7 KEY FEATURE:
   8 Uses `sf data query --plan` to call the Salesforce explain API, returning:
   9 - relativeCost (>1.0 = non-selective, flagged as warning)
  10 - leadingOperationType (Index, TableScan, Sharing, etc.)
  11 - cardinality estimates (rows returned vs total records)
  12 - notes[] explaining WHY optimizations aren't being used
  13
  14 NEW FILES (3):
  15 - shared/code_analyzer/live_query_plan.py: Core analyzer module
  16   • LiveQueryPlanAnalyzer class with analyze() method
  17   • QueryPlanResult dataclass with selectivity metrics
  18   • Automatic bind variable replacement for API compatibility
  19   • Optimization suggestions based on plan notes
  20
  21 - shared/soql_extractor.py: SOQL extraction utility
  22   • Extracts inline [SELECT...] and Database.query() calls
  23   • Loop detection (SOQL in loops flagged)
  24   • Method context tracking for issue location
  25
  26 - sf-soql/hooks/scripts/post-tool-validate.py: Hook for .soql files
  27   • Static SOQL validation (syntax, best practices)
  28   • Live query plan analysis when org connected
  29
  30 MODIFIED FILES (4):
  31 - shared/code_analyzer/__init__.py: Export new modules
  32 - sf-soql/hooks/hooks.json: Enable post-tool-validate hook
  33 - sf-apex/hooks/scripts/post-tool-validate.py: Add Phase 2.5 live plan
  34 - sf-data/hooks/scripts/post-write-validate.py: Add live plan for .soql
  35
  36 GRACEFUL DEGRADATION:
  37 - Works without org (static analysis only)
  38 - No errors if live analysis modules unavailable
  39 - Limits queries analyzed to 5 to prevent timeout
  40
  41 Jag Valaiyapathy
2026-01-02 11:19:08 -05:00

59 lines
1.8 KiB
Python

"""
Salesforce Code Analyzer V5 Integration for sf-skills.
This module provides shared infrastructure for integrating Salesforce Code Analyzer
with Claude Code's hook system across all sf-skills (apex, flow, lwc, etc.).
Components:
- scanner: Core wrapper for sf code-analyzer CLI
- parser: JSON result normalization
- dependency_checker: Runtime dependency detection (JDK, Node, Python)
- score_merger: Combines custom scoring with CA findings
- formatter: Terminal output formatting
- live_query_plan: Real-time SOQL query plan analysis via REST API
Usage:
from code_analyzer import CodeAnalyzerScanner, SkillType, ScoreMerger
scanner = CodeAnalyzerScanner()
result = scanner.scan("/path/to/file.cls", SkillType.APEX)
merger = ScoreMerger(custom_scores, max_scores)
merged = merger.merge(result.violations)
# Live query plan analysis
from code_analyzer import LiveQueryPlanAnalyzer
analyzer = LiveQueryPlanAnalyzer()
plan = analyzer.analyze("SELECT Id FROM Account WHERE Name = 'Acme'")
"""
from .scanner import CodeAnalyzerScanner, SkillType, ScanResult
from .dependency_checker import DependencyChecker
from .score_merger import ScoreMerger, MergedScore
from .parser import parse_ca_output, normalize_violation
from .formatter import format_validation_output
from .live_query_plan import LiveQueryPlanAnalyzer, QueryPlanResult, PlanNote
__all__ = [
# Scanner
"CodeAnalyzerScanner",
"SkillType",
"ScanResult",
# Dependencies
"DependencyChecker",
# Scoring
"ScoreMerger",
"MergedScore",
# Parser
"parse_ca_output",
"normalize_violation",
# Formatter
"format_validation_output",
# Live Query Plan
"LiveQueryPlanAnalyzer",
"QueryPlanResult",
"PlanNote",
]
__version__ = "1.1.0"