mirror of
https://github.com/Jaganpro/sf-skills.git
synced 2026-09-19 07:52:00 +08:00
39801fa194
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
59 lines
1.8 KiB
Python
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"
|