@salesforce/afv-skills 1.10.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/package.json +1 -1
  2. package/skills/applying-cms-brand/SKILL.md +170 -0
  3. package/skills/implementing-ui-bundle-agentforce-conversation-client/SKILL.md +114 -198
  4. package/skills/implementing-ui-bundle-agentforce-conversation-client/references/agent-id-resolution.md +46 -0
  5. package/skills/implementing-ui-bundle-agentforce-conversation-client/references/style-tokens.md +18 -6
  6. package/skills/integrating-b2b-commerce-open-code-components/SKILL.md +166 -0
  7. package/skills/running-code-analyzer/SKILL.md +499 -0
  8. package/skills/running-code-analyzer/examples/README.md +38 -0
  9. package/skills/running-code-analyzer/examples/basic-scan-output.json +92 -0
  10. package/skills/running-code-analyzer/examples/command-variations.md +333 -0
  11. package/skills/running-code-analyzer/examples/fix-application-before-after.md +142 -0
  12. package/skills/running-code-analyzer/examples/large-scan-output.json +67 -0
  13. package/skills/running-code-analyzer/examples/security-focused-output.json +95 -0
  14. package/skills/running-code-analyzer/references/command-examples.md +27 -0
  15. package/skills/running-code-analyzer/references/engine-reference.md +34 -0
  16. package/skills/running-code-analyzer/references/error-handling.md +29 -0
  17. package/skills/running-code-analyzer/references/flag-reference.md +96 -0
  18. package/skills/running-code-analyzer/references/quick-start.md +28 -0
  19. package/skills/running-code-analyzer/references/special-behaviors.md +83 -0
  20. package/skills/running-code-analyzer/references/vendor-file-handling.md +239 -0
  21. package/skills/running-code-analyzer/scripts/apply-fixes.js +86 -0
  22. package/skills/running-code-analyzer/scripts/discover-fixes.js +34 -0
  23. package/skills/running-code-analyzer/scripts/filter-violations.js +405 -0
  24. package/skills/running-code-analyzer/scripts/parse-results.js +59 -0
  25. package/skills/running-code-analyzer/scripts/summarize-fixes.js +32 -0
  26. package/skills/running-code-analyzer/scripts/verify-execution.sh +28 -0
@@ -0,0 +1,333 @@
1
+ # Common Command Variations
2
+
3
+ Real-world command patterns with explanations. Use these as reference when building commands for specific scenarios.
4
+
5
+ ---
6
+
7
+ ## Basic Scans
8
+
9
+ ### 1. Scan Entire Workspace (Default)
10
+ ```bash
11
+ sf code-analyzer run \
12
+ --rule-selector Recommended \
13
+ --output-file ./code-analyzer-results-20260519-101030.json \
14
+ --include-fixes \
15
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
16
+ ```
17
+ **When:** User says "scan my code" with no specifics.
18
+
19
+ ---
20
+
21
+ ### 2. Security-Focused Scan
22
+ ```bash
23
+ sf code-analyzer run \
24
+ --rule-selector "all:Security:(1,2)" \
25
+ --output-file ./code-analyzer-results-20260519-101030.json \
26
+ --include-fixes \
27
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
28
+ ```
29
+ **When:** User says "check for security issues", "find vulnerabilities", "AppExchange security review".
30
+ **Selector breakdown:** `all` = all engines, `:Security` = Security category only, `:(1,2)` = Critical and High severity only.
31
+
32
+ ---
33
+
34
+ ### 3. Specific Engine
35
+ ```bash
36
+ sf code-analyzer run \
37
+ --rule-selector "pmd" \
38
+ --output-file ./code-analyzer-results-20260519-101030.json \
39
+ --include-fixes \
40
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
41
+ ```
42
+ **When:** User says "run PMD", "check my Apex code".
43
+
44
+ ---
45
+
46
+ ### 4. Multiple Engines
47
+ ```bash
48
+ sf code-analyzer run \
49
+ --rule-selector "(pmd,eslint)" \
50
+ --output-file ./code-analyzer-results-20260519-101030.json \
51
+ --include-fixes \
52
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
53
+ ```
54
+ **When:** User says "scan Apex and JavaScript", "run PMD and ESLint".
55
+ **Selector breakdown:** Parentheses + comma = OR logic.
56
+
57
+ ---
58
+
59
+ ## Target-Specific Scans
60
+
61
+ ### 5. Scan Specific File
62
+ ```bash
63
+ sf code-analyzer run \
64
+ --rule-selector Recommended \
65
+ --target "force-app/main/default/classes/AccountService.cls" \
66
+ --output-file ./code-analyzer-results-20260519-101030.json \
67
+ --include-fixes \
68
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
69
+ ```
70
+ **When:** User says "scan AccountService.cls".
71
+
72
+ ---
73
+
74
+ ### 6. Scan Specific Folder
75
+ ```bash
76
+ sf code-analyzer run \
77
+ --rule-selector Recommended \
78
+ --target "force-app/main/default/lwc" \
79
+ --output-file ./code-analyzer-results-20260519-101030.json \
80
+ --include-fixes \
81
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
82
+ ```
83
+ **When:** User says "scan my LWC components", "check the lwc folder".
84
+
85
+ ---
86
+
87
+ ### 7. Scan Multiple Paths
88
+ ```bash
89
+ sf code-analyzer run \
90
+ --rule-selector Recommended \
91
+ --target "force-app/main/default/classes,force-app/main/default/triggers" \
92
+ --output-file ./code-analyzer-results-20260519-101030.json \
93
+ --include-fixes \
94
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
95
+ ```
96
+ **When:** User says "scan classes and triggers".
97
+ **Note:** Comma-separated paths in a single `--target` value.
98
+
99
+ ---
100
+
101
+ ### 8. Scan Using Glob Pattern
102
+ ```bash
103
+ sf code-analyzer run \
104
+ --rule-selector Recommended \
105
+ --target "**/*.cls,**/*.trigger" \
106
+ --output-file ./code-analyzer-results-20260519-101030.json \
107
+ --include-fixes \
108
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
109
+ ```
110
+ **When:** User says "scan all Apex files", "check all classes and triggers".
111
+ **Note:** Glob patterns must match from workspace root.
112
+
113
+ ---
114
+
115
+ ## Diff-Based Scans
116
+
117
+ ### 9. Scan Changed Files (Git Diff)
118
+ **Step 1:** Get changed files
119
+ ```bash
120
+ git diff --name-only main...HEAD
121
+ ```
122
+
123
+ **Step 2:** Filter to scannable types (`.cls`, `.trigger`, `.js`, `.ts`, `.flow-meta.xml`, etc.)
124
+
125
+ **Step 3:** Pass as `--target`
126
+ ```bash
127
+ sf code-analyzer run \
128
+ --rule-selector Recommended \
129
+ --target "force-app/main/default/classes/AccountService.cls,force-app/main/default/lwc/accountCard/accountCard.js" \
130
+ --output-file ./code-analyzer-results-20260519-101030.json \
131
+ --include-fixes \
132
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
133
+ ```
134
+ **When:** User says "scan my changes", "check what I modified", "analyze the diff".
135
+
136
+ ---
137
+
138
+ ## Advanced Scenarios
139
+
140
+ ### 10. Deep Analysis with SFGE (Data Flow)
141
+ ```bash
142
+ sf code-analyzer run \
143
+ --rule-selector "sfge" \
144
+ --workspace "force-app" \
145
+ --output-file ./code-analyzer-results-20260519-101030.json \
146
+ --include-fixes \
147
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
148
+ ```
149
+ **When:** User says "deep analysis", "data flow analysis", "path-based analysis", "find CRUD violations with certainty".
150
+ **Note:** Requires Java 11+. May take 10-20 minutes. Use `--workspace` to avoid compiling template files.
151
+ **Timeout:** Set to 1200000ms (20 minutes).
152
+
153
+ ---
154
+
155
+ ### 11. Find Code Duplicates (CPD)
156
+ ```bash
157
+ sf code-analyzer run \
158
+ --rule-selector "cpd" \
159
+ --output-file ./code-analyzer-results-20260519-101030.json \
160
+ --include-fixes \
161
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
162
+ ```
163
+ **When:** User says "find duplicates", "check for copy-paste", "detect code clones".
164
+
165
+ ---
166
+
167
+ ### 12. Check Vulnerable Libraries (RetireJS)
168
+ ```bash
169
+ sf code-analyzer run \
170
+ --rule-selector "retire-js" \
171
+ --output-file ./code-analyzer-results-20260519-101030.json \
172
+ --include-fixes \
173
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
174
+ ```
175
+ **When:** User says "check for vulnerable libraries", "scan dependencies", "find CVEs".
176
+
177
+ ---
178
+
179
+ ### 13. Analyze Flows
180
+ ```bash
181
+ sf code-analyzer run \
182
+ --rule-selector "flow" \
183
+ --target "**/*.flow-meta.xml" \
184
+ --output-file ./code-analyzer-results-20260519-101030.json \
185
+ --include-fixes \
186
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
187
+ ```
188
+ **When:** User says "analyze my Flows", "check Flow best practices".
189
+ **Note:** Requires Python 3.
190
+
191
+ ---
192
+
193
+ ### 14. Performance Analysis (ApexGuru)
194
+ ```bash
195
+ sf code-analyzer run \
196
+ --rule-selector "apexguru" \
197
+ --output-file ./code-analyzer-results-20260519-101030.json \
198
+ --include-fixes \
199
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
200
+ ```
201
+ **When:** User says "performance analysis", "find slow code", "check governor limits".
202
+ **Note:** Requires authenticated Salesforce org. See `references/special-behaviors.md` for auth setup.
203
+
204
+ ---
205
+
206
+ ## Output Format Variations
207
+
208
+ ### 15. HTML Report
209
+ ```bash
210
+ sf code-analyzer run \
211
+ --rule-selector Recommended \
212
+ --output-file ./code-analyzer-results-20260519-101030.html \
213
+ --include-fixes \
214
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
215
+ ```
216
+ **When:** User explicitly requests HTML format.
217
+ **Note:** Extension determines format. JSON is default.
218
+
219
+ ---
220
+
221
+ ### 16. SARIF (GitHub/IDE Integration)
222
+ ```bash
223
+ sf code-analyzer run \
224
+ --rule-selector Recommended \
225
+ --output-file ./code-analyzer-results-20260519-101030.sarif \
226
+ --include-fixes \
227
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
228
+ ```
229
+ **When:** User says "SARIF format", "GitHub integration", "IDE integration".
230
+
231
+ ---
232
+
233
+ ### 17. CSV (Spreadsheet)
234
+ ```bash
235
+ sf code-analyzer run \
236
+ --rule-selector Recommended \
237
+ --output-file ./code-analyzer-results-20260519-101030.csv \
238
+ --include-fixes \
239
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
240
+ ```
241
+ **When:** User says "CSV format", "export to spreadsheet", "Excel format".
242
+
243
+ ---
244
+
245
+ ## Complex Rule Selectors
246
+
247
+ ### 18. Multiple Categories
248
+ ```bash
249
+ sf code-analyzer run \
250
+ --rule-selector "all:(Security,Performance):(1,2,3)" \
251
+ --output-file ./code-analyzer-results-20260519-101030.json \
252
+ --include-fixes \
253
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
254
+ ```
255
+ **Selector breakdown:** All engines, Security OR Performance categories, Severity 1-3 (Critical to Moderate).
256
+
257
+ ---
258
+
259
+ ### 19. Specific Rule by Name
260
+ ```bash
261
+ sf code-analyzer run \
262
+ --rule-selector "pmd:ApexCRUDViolation" \
263
+ --output-file ./code-analyzer-results-20260519-101030.json \
264
+ --include-fixes \
265
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
266
+ ```
267
+ **When:** User says "check for ApexCRUDViolation", "run the CRUD rule".
268
+ **Note:** Must be exact full rule name. If uncertain, look up first: `sf code-analyzer rules --rule-selector all 2>&1 | grep -i "CRUD"`
269
+
270
+ ---
271
+
272
+ ### 20. Engine + Category + Severity
273
+ ```bash
274
+ sf code-analyzer run \
275
+ --rule-selector "(pmd,eslint):Security:(1,2)" \
276
+ --output-file ./code-analyzer-results-20260519-101030.json \
277
+ --include-fixes \
278
+ 2>&1 | tee ./code-analyzer-results-20260519-101030.log
279
+ ```
280
+ **Selector breakdown:** (PMD OR ESLint) AND Security AND (Sev 1 OR Sev 2).
281
+
282
+ ---
283
+
284
+ ## Key Patterns
285
+
286
+ | Pattern | Meaning | Example |
287
+ |---------|---------|---------|
288
+ | `:` | AND | `pmd:Security` = PMD **and** Security |
289
+ | `,` | OR | `(pmd,eslint)` = PMD **or** ESLint |
290
+ | `()` | Grouping | `(pmd,eslint):Security` = (PMD or ESLint) and Security |
291
+ | `(1,2)` | Severity range | `:(1,2)` = Severity 1 or 2 |
292
+ | `--target <path>` | Specific files/folders | Comma-separated in single arg |
293
+ | `--workspace <path>` | Compilation scope (SFGE only) | Prevents compiling template files |
294
+ | `.json`, `.html`, `.sarif`, `.csv`, `.xml` | Output format | Extension of `--output-file` |
295
+
296
+ ---
297
+
298
+ ## Anti-Patterns (DO NOT USE)
299
+
300
+ ### ❌ Using `--format` flag
301
+ ```bash
302
+ # WRONG - v3 syntax, does not exist in v4+
303
+ sf code-analyzer run --format json
304
+ ```
305
+ **Why:** The `--format` flag was removed in v4+. Use `--output-file` with extension instead.
306
+
307
+ ---
308
+
309
+ ### ❌ Using `$TIMESTAMP` variable in command
310
+ ```bash
311
+ # WRONG - variable substitution fails in permission prompts
312
+ sf code-analyzer run --output-file "./results-${TIMESTAMP}.json"
313
+ ```
314
+ **Why:** Generate timestamp first, then use literal string in command.
315
+
316
+ ---
317
+
318
+ ### ❌ Running in background for long scans
319
+ ```bash
320
+ # WRONG - loses output stream
321
+ sf code-analyzer run --rule-selector sfge &
322
+ ```
323
+ **Why:** Use foreground with high timeout (1200000ms). Backgrounding loses the output.
324
+
325
+ ---
326
+
327
+ ### ❌ Partial rule names
328
+ ```bash
329
+ # WRONG - returns 0 results
330
+ sf code-analyzer run --rule-selector "no-hardcoded-values"
331
+ ```
332
+ **Why:** Rule names must be exact. Look up first: `sf code-analyzer rules --rule-selector all | grep -i "hardcoded"`
333
+ **Correct:** `--rule-selector "@salesforce-ux/slds/no-hardcoded-values-slds2"`
@@ -0,0 +1,142 @@
1
+ # Fix Application: Before & After
2
+
3
+ This example demonstrates engine-provided auto-fix behavior on a small codebase.
4
+
5
+ ## Initial Scan Results
6
+
7
+ **Command:**
8
+ ```bash
9
+ sf code-analyzer run --rule-selector Recommended --output-file ./results.json --include-fixes
10
+ ```
11
+
12
+ **Summary:**
13
+ - Total violations: 248
14
+ - Fixable violations: 67 (27%)
15
+
16
+ ### Fixable Rules
17
+
18
+ | Rule | Engine | Severity | Count |
19
+ |------|--------|----------|-------|
20
+ | no-var | eslint | 3 | 42 |
21
+ | prefer-const | eslint | 3 | 18 |
22
+ | @salesforce-ux/slds/no-hardcoded-values-slds2 | eslint | 4 | 5 |
23
+ | no-extra-boolean-cast | eslint | 3 | 2 |
24
+
25
+ ---
26
+
27
+ ## Before Fix: Sample Violations
28
+
29
+ ### Violation 1: no-var
30
+ **File:** `force-app/main/default/lwc/accountCard/accountCard.js:12`
31
+
32
+ ```javascript
33
+ export default class AccountCard extends LightningElement {
34
+ handleClick() {
35
+ var accountId = this.recordId; // ← violation
36
+ var data = this.fetchData(accountId); // ← violation
37
+ this.processData(data);
38
+ }
39
+ }
40
+ ```
41
+
42
+ ### Violation 2: prefer-const
43
+ **File:** `force-app/main/default/lwc/utils/dataProcessor.js:8`
44
+
45
+ ```javascript
46
+ export function processRecords(records) {
47
+ let result = []; // ← violation (never reassigned)
48
+ records.forEach(r => result.push(transform(r)));
49
+ return result;
50
+ }
51
+ ```
52
+
53
+ ### Violation 3: @salesforce-ux/slds/no-hardcoded-values-slds2
54
+ **File:** `force-app/main/default/lwc/accountCard/accountCard.css:4`
55
+
56
+ ```css
57
+ .account-card {
58
+ border-radius: 4px; /* ← violation */
59
+ padding: 16px; /* ← violation */
60
+ }
61
+ ```
62
+
63
+ ---
64
+
65
+ ## Apply Fixes
66
+
67
+ **Command:**
68
+ ```bash
69
+ node <skill_dir>/scripts/apply-fixes.js ./results.json
70
+ ```
71
+
72
+ **Output:**
73
+ ```json
74
+ {
75
+ "success": true,
76
+ "filesModified": 15,
77
+ "fixesApplied": 67,
78
+ "fixesSkipped": 0
79
+ }
80
+ ```
81
+
82
+ ---
83
+
84
+ ## After Fix: Corrected Code
85
+
86
+ ### Fix 1: no-var → let
87
+ **File:** `force-app/main/default/lwc/accountCard/accountCard.js:12`
88
+
89
+ ```javascript
90
+ export default class AccountCard extends LightningElement {
91
+ handleClick() {
92
+ let accountId = this.recordId; // ✓ fixed
93
+ let data = this.fetchData(accountId); // ✓ fixed
94
+ this.processData(data);
95
+ }
96
+ }
97
+ ```
98
+
99
+ ### Fix 2: let → const
100
+ **File:** `force-app/main/default/lwc/utils/dataProcessor.js:8`
101
+
102
+ ```javascript
103
+ export function processRecords(records) {
104
+ const result = []; // ✓ fixed
105
+ records.forEach(r => result.push(transform(r)));
106
+ return result;
107
+ }
108
+ ```
109
+
110
+ ### Fix 3: Hardcoded values → SLDS tokens
111
+ **File:** `force-app/main/default/lwc/accountCard/accountCard.css:4`
112
+
113
+ ```css
114
+ .account-card {
115
+ border-radius: var(--slds-c-card-radius-border); /* ✓ fixed */
116
+ padding: var(--slds-c-card-spacing-block); /* ✓ fixed */
117
+ }
118
+ ```
119
+
120
+ ---
121
+
122
+ ## Verification Scan
123
+
124
+ **Command:**
125
+ ```bash
126
+ sf code-analyzer run --rule-selector Recommended --output-file ./results-after.json --include-fixes
127
+ ```
128
+
129
+ **Summary:**
130
+ - Total violations: 181 (↓ 67 from 248)
131
+ - Fixable violations: 0
132
+
133
+ **Result:** All 67 fixable violations resolved. Remaining 181 violations require manual fixes (e.g., ApexDoc comments, CRUD checks).
134
+
135
+ ---
136
+
137
+ ## Key Takeaways
138
+
139
+ 1. **Engine-provided fixes are safe**: They're deterministic transformations, not AI-generated code.
140
+ 2. **Apply, then verify**: Always re-scan after applying fixes to confirm no regressions.
141
+ 3. **Not all violations are fixable**: Security issues like CRUD violations require manual code review.
142
+ 4. **Files modified count ≠ fixes count**: Multiple violations in one file count as one file modification.
@@ -0,0 +1,67 @@
1
+ {
2
+ "metadata": {
3
+ "engine": "Recommended",
4
+ "executedAt": "2026-05-19T14:22:45.789Z",
5
+ "filesAnalyzed": 2818,
6
+ "violationCount": 69545
7
+ },
8
+ "violations": [
9
+ {
10
+ "rule": "@lwc/lwc/no-inner-html",
11
+ "engine": "eslint",
12
+ "severity": 2,
13
+ "message": "Disallow use of innerHTML",
14
+ "file": "StaticResourceSources/js/BDE_jqtablesorter.min.js",
15
+ "line": 3,
16
+ "column": 245,
17
+ "fix": null
18
+ },
19
+ {
20
+ "rule": "@salesforce-ux/slds/no-hardcoded-values-slds2",
21
+ "engine": "eslint",
22
+ "severity": 4,
23
+ "message": "Replace hardcoded value with SLDS design token",
24
+ "file": "StaticResourceSources/Bootstrap/css/bootstrap-s1.css",
25
+ "line": 156,
26
+ "column": 12,
27
+ "fix": {
28
+ "range": [4521, 4527],
29
+ "text": "var(--slds-c-button-radius-border)"
30
+ }
31
+ }
32
+ ],
33
+ "summary": {
34
+ "bySeverity": {
35
+ "1": 0,
36
+ "2": 6164,
37
+ "3": 24341,
38
+ "4": 30230,
39
+ "5": 8810
40
+ },
41
+ "byEngine": {
42
+ "eslint": 38542,
43
+ "pmd": 18234,
44
+ "regex": 12769
45
+ },
46
+ "topRules": [
47
+ {"rule": "@salesforce-ux/slds/no-hardcoded-values-slds2", "count": 18081},
48
+ {"rule": "no-var", "count": 9714},
49
+ {"rule": "NoTrailingWhitespace", "count": 8073},
50
+ {"rule": "ApexDoc", "count": 5533},
51
+ {"rule": "ApexUnitTestClassShouldHaveRunAs", "count": 3856},
52
+ {"rule": "NoMixedIndentation", "count": 3493},
53
+ {"rule": "AnnotationsNamingConventions", "count": 2418},
54
+ {"rule": "no-undef", "count": 1891},
55
+ {"rule": "AvoidOldSalesforceApiVersions", "count": 1336},
56
+ {"rule": "IfElseStmtsMustUseBraces", "count": 1112}
57
+ ],
58
+ "topFiles": [
59
+ {"file": "StaticResourceSources/Bootstrap/css/bootstrap-namespaced-s1.css", "count": 1354},
60
+ {"file": "force-app/main/default/staticresources/CumulusStaticResources/Bootstrap/css/bootstrap-namespaced-s1.css", "count": 1354},
61
+ {"file": "StaticResourceSources/Bootstrap/css/bootstrap-s1.css", "count": 1349},
62
+ {"file": "StaticResourceSources/Bootstrap/css/bootstrap-s1.min.css", "count": 1349},
63
+ {"file": "force-app/main/default/staticresources/CumulusStaticResources/Bootstrap/css/bootstrap-s1.css", "count": 1349}
64
+ ],
65
+ "fixableCount": 12298
66
+ }
67
+ }
@@ -0,0 +1,95 @@
1
+ {
2
+ "metadata": {
3
+ "engine": "all:Security:(1,2)",
4
+ "executedAt": "2026-05-19T16:45:12.456Z",
5
+ "filesAnalyzed": 156,
6
+ "violationCount": 43
7
+ },
8
+ "violations": [
9
+ {
10
+ "rule": "ApexCRUDViolation",
11
+ "engine": "pmd",
12
+ "severity": 2,
13
+ "message": "Validate CRUD permission before SOQL/DML operation",
14
+ "file": "force-app/main/default/classes/AccountService.cls",
15
+ "line": 42,
16
+ "column": 9,
17
+ "fix": null
18
+ },
19
+ {
20
+ "rule": "ApexSOQLInjection",
21
+ "engine": "pmd",
22
+ "severity": 1,
23
+ "message": "Avoid untrusted/unescaped variables in DML query",
24
+ "file": "force-app/main/default/classes/SearchController.cls",
25
+ "line": 18,
26
+ "column": 24,
27
+ "fix": null
28
+ },
29
+ {
30
+ "rule": "@lwc/lwc/no-inner-html",
31
+ "engine": "eslint",
32
+ "severity": 2,
33
+ "message": "Disallow use of innerHTML (XSS risk)",
34
+ "file": "force-app/main/default/lwc/riskComponent/riskComponent.js",
35
+ "line": 28,
36
+ "column": 9,
37
+ "fix": null
38
+ },
39
+ {
40
+ "rule": "ApexInsecureEndpoint",
41
+ "engine": "pmd",
42
+ "severity": 2,
43
+ "message": "Endpoint protocol should be https",
44
+ "file": "force-app/main/default/classes/ExternalApiClient.cls",
45
+ "line": 56,
46
+ "column": 20,
47
+ "fix": null
48
+ },
49
+ {
50
+ "rule": "ApexOpenRedirect",
51
+ "engine": "pmd",
52
+ "severity": 2,
53
+ "message": "Potential open redirect from user-controlled input",
54
+ "file": "force-app/main/default/classes/RedirectController.cls",
55
+ "line": 34,
56
+ "column": 16,
57
+ "fix": null
58
+ },
59
+ {
60
+ "rule": "ApexXSSFromEscapeFalse",
61
+ "engine": "pmd",
62
+ "severity": 2,
63
+ "message": "Avoid using escape=false in Visualforce pages",
64
+ "file": "force-app/main/default/pages/AccountDetail.page",
65
+ "line": 23,
66
+ "column": 45,
67
+ "fix": null
68
+ }
69
+ ],
70
+ "summary": {
71
+ "bySeverity": {
72
+ "1": 8,
73
+ "2": 35,
74
+ "3": 0,
75
+ "4": 0,
76
+ "5": 0
77
+ },
78
+ "byEngine": {
79
+ "pmd": 38,
80
+ "eslint": 5
81
+ },
82
+ "topRules": [
83
+ {"rule": "ApexCRUDViolation", "count": 18},
84
+ {"rule": "ApexInsecureEndpoint", "count": 9},
85
+ {"rule": "ApexSOQLInjection", "count": 8},
86
+ {"rule": "@lwc/lwc/no-inner-html", "count": 5},
87
+ {"rule": "ApexOpenRedirect", "count": 3}
88
+ ],
89
+ "topFiles": [
90
+ {"file": "force-app/main/default/classes/AccountService.cls", "count": 12},
91
+ {"file": "force-app/main/default/classes/SearchController.cls", "count": 8},
92
+ {"file": "force-app/main/default/classes/ExternalApiClient.cls", "count": 7}
93
+ ]
94
+ }
95
+ }
@@ -0,0 +1,27 @@
1
+ # Command Construction Examples
2
+
3
+ Full command examples for common scanning scenarios.
4
+
5
+ **Note:** All commands use `${TIMESTAMP}` which should be generated via `TIMESTAMP=$(date +%Y%m%d-%H%M%S)` before running the scan.
6
+
7
+ | User Request | Constructed Command |
8
+ |---|---|
9
+ | "Scan my code" | `sf code-analyzer run --rule-selector Recommended --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
10
+ | "Check for security issues" | `sf code-analyzer run --rule-selector Security --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
11
+ | "Run PMD on my Apex" | `sf code-analyzer run --rule-selector pmd --target "**/*.cls,**/*.trigger" --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
12
+ | "Check only my changed files" | `git diff --name-only main...HEAD \| grep -E '...' → sf code-analyzer run --target <files> --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
13
+ | "Find duplicate code" | `sf code-analyzer run --rule-selector cpd --output-file "./code-analyzer-results-${TIMESTAMP}.json"` |
14
+ | "Check vulnerable libraries" | `sf code-analyzer run --rule-selector retire-js --output-file "./code-analyzer-results-${TIMESTAMP}.json"` |
15
+ | "Run deep security analysis" | `sf code-analyzer run --rule-selector sfge --workspace "force-app" --target "force-app" --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
16
+ | "Critical PMD violations in this file" | `sf code-analyzer run --rule-selector "pmd:1" --target <file> --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
17
+ | "ESLint performance on LWC" | `sf code-analyzer run --rule-selector "eslint:Performance" --target "**/lwc/**" --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
18
+ | "AppExchange security review" | `sf code-analyzer run --rule-selector all --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
19
+ | "Generate HTML report" | `sf code-analyzer run --rule-selector Recommended --output-file "./code-analyzer-results-${TIMESTAMP}.html" --include-fixes` |
20
+ | "Scan with severity threshold 2" | `sf code-analyzer run --rule-selector Recommended --severity-threshold 2 --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
21
+ | "Run ApexCRUDViolation rule" | `sf code-analyzer run --rule-selector "pmd:ApexCRUDViolation" --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
22
+ | "Scan my Flows" | `sf code-analyzer run --rule-selector flow --output-file "./code-analyzer-results-${TIMESTAMP}.json"` |
23
+ | "Check ESLint recommended rules" | `sf code-analyzer run --rule-selector "eslint:Recommended" --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
24
+ | "Scan all with fail on high" | `sf code-analyzer run --rule-selector all --severity-threshold 2 --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
25
+ | "What rules are available for security?" | `sf code-analyzer rules --rule-selector Security --view detail` |
26
+ | "Scan this file for performance" | `sf code-analyzer run --rule-selector Performance --target <file> --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |
27
+ | "Run all rules, no suppressions" | `sf code-analyzer run --rule-selector all --no-suppressions --output-file "./code-analyzer-results-${TIMESTAMP}.json" --include-fixes` |