red64-cli 0.5.0 → 0.6.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.
- package/README.md +64 -58
- package/dist/components/screens/StartScreen.d.ts.map +1 -1
- package/dist/components/screens/StartScreen.js +2 -2
- package/dist/components/screens/StartScreen.js.map +1 -1
- package/dist/services/AgentInvoker.js +4 -4
- package/dist/services/AgentInvoker.js.map +1 -1
- package/dist/services/ClaudeHealthCheck.d.ts +5 -0
- package/dist/services/ClaudeHealthCheck.d.ts.map +1 -1
- package/dist/services/ClaudeHealthCheck.js +43 -5
- package/dist/services/ClaudeHealthCheck.js.map +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/framework/stacks/c/code-quality.md +326 -0
- package/framework/stacks/c/coding-style.md +347 -0
- package/framework/stacks/c/conventions.md +513 -0
- package/framework/stacks/c/error-handling.md +350 -0
- package/framework/stacks/c/feedback.md +158 -0
- package/framework/stacks/c/memory-safety.md +408 -0
- package/framework/stacks/c/tech.md +122 -0
- package/framework/stacks/c/testing.md +472 -0
- package/framework/stacks/cpp/code-quality.md +282 -0
- package/framework/stacks/cpp/coding-style.md +363 -0
- package/framework/stacks/cpp/conventions.md +420 -0
- package/framework/stacks/cpp/error-handling.md +264 -0
- package/framework/stacks/cpp/feedback.md +104 -0
- package/framework/stacks/cpp/memory-safety.md +351 -0
- package/framework/stacks/cpp/tech.md +160 -0
- package/framework/stacks/cpp/testing.md +323 -0
- package/framework/stacks/java/code-quality.md +357 -0
- package/framework/stacks/java/coding-style.md +400 -0
- package/framework/stacks/java/conventions.md +437 -0
- package/framework/stacks/java/error-handling.md +408 -0
- package/framework/stacks/java/feedback.md +180 -0
- package/framework/stacks/java/tech.md +126 -0
- package/framework/stacks/java/testing.md +485 -0
- package/framework/stacks/javascript/async-patterns.md +216 -0
- package/framework/stacks/javascript/code-quality.md +182 -0
- package/framework/stacks/javascript/coding-style.md +293 -0
- package/framework/stacks/javascript/conventions.md +268 -0
- package/framework/stacks/javascript/error-handling.md +216 -0
- package/framework/stacks/javascript/feedback.md +80 -0
- package/framework/stacks/javascript/tech.md +114 -0
- package/framework/stacks/javascript/testing.md +209 -0
- package/framework/stacks/loco/code-quality.md +156 -0
- package/framework/stacks/loco/coding-style.md +247 -0
- package/framework/stacks/loco/error-handling.md +225 -0
- package/framework/stacks/loco/feedback.md +35 -0
- package/framework/stacks/loco/loco.md +342 -0
- package/framework/stacks/loco/structure.md +193 -0
- package/framework/stacks/loco/tech.md +129 -0
- package/framework/stacks/loco/testing.md +211 -0
- package/framework/stacks/rust/code-quality.md +370 -0
- package/framework/stacks/rust/coding-style.md +475 -0
- package/framework/stacks/rust/conventions.md +430 -0
- package/framework/stacks/rust/error-handling.md +399 -0
- package/framework/stacks/rust/feedback.md +152 -0
- package/framework/stacks/rust/memory-safety.md +398 -0
- package/framework/stacks/rust/tech.md +121 -0
- package/framework/stacks/rust/testing.md +528 -0
- package/package.json +14 -2
|
@@ -7,6 +7,40 @@ import { readFileSync, existsSync } from 'node:fs';
|
|
|
7
7
|
import { join } from 'node:path';
|
|
8
8
|
import { createClaudeErrorDetector } from './ClaudeErrorDetector.js';
|
|
9
9
|
const SANDBOX_IMAGE = 'red64-sandbox:latest';
|
|
10
|
+
/**
|
|
11
|
+
* Agent setup instructions per coding agent
|
|
12
|
+
* Returns step-by-step instructions for configuring each agent's API access
|
|
13
|
+
*/
|
|
14
|
+
export function getAgentSetupInstructions(agent) {
|
|
15
|
+
switch (agent) {
|
|
16
|
+
case 'gemini':
|
|
17
|
+
return [
|
|
18
|
+
'1. Get an API key at https://aistudio.google.com/apikey',
|
|
19
|
+
'2. Set the environment variable: export GEMINI_API_KEY=<your-key>',
|
|
20
|
+
'3. Or run: gemini (first run will prompt for login)',
|
|
21
|
+
];
|
|
22
|
+
case 'codex':
|
|
23
|
+
return [
|
|
24
|
+
'1. Get an API key at https://platform.openai.com/api-keys',
|
|
25
|
+
'2. Set the environment variable: export CODEX_API_KEY=<your-key>',
|
|
26
|
+
'3. Or set: export OPENAI_API_KEY=<your-key>',
|
|
27
|
+
];
|
|
28
|
+
default: // claude
|
|
29
|
+
return [
|
|
30
|
+
'1. Run: claude (first run will prompt for authentication)',
|
|
31
|
+
'2. Or get an API key at https://console.anthropic.com/settings/keys',
|
|
32
|
+
'3. Then set: export ANTHROPIC_API_KEY=<your-key>',
|
|
33
|
+
];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get agent-specific suggestion for unknown errors
|
|
38
|
+
*/
|
|
39
|
+
function getAgentErrorSuggestion(agent) {
|
|
40
|
+
const envVar = agent === 'gemini' ? 'GEMINI_API_KEY' : agent === 'codex' ? 'CODEX_API_KEY' : 'ANTHROPIC_API_KEY';
|
|
41
|
+
const name = agent === 'gemini' ? 'Gemini' : agent === 'codex' ? 'Codex' : 'Claude';
|
|
42
|
+
return `Verify ${name} CLI is installed and ${envVar} is set. Run "red64 help" for setup details.`;
|
|
43
|
+
}
|
|
10
44
|
/**
|
|
11
45
|
* Read API key from Claude config directory
|
|
12
46
|
*/
|
|
@@ -40,7 +74,7 @@ function readApiKeyFromConfig(configDir) {
|
|
|
40
74
|
function getApiKey(tier, agent) {
|
|
41
75
|
// Check agent-specific env vars first
|
|
42
76
|
if (agent === 'gemini') {
|
|
43
|
-
return process.env.
|
|
77
|
+
return process.env.GEMINI_API_KEY ?? process.env.GOOGLE_API_KEY ?? null;
|
|
44
78
|
}
|
|
45
79
|
if (agent === 'codex') {
|
|
46
80
|
return process.env.CODEX_API_KEY ?? process.env.OPENAI_API_KEY ?? null;
|
|
@@ -83,7 +117,7 @@ export function createClaudeHealthCheck() {
|
|
|
83
117
|
const getHealthArgs = () => {
|
|
84
118
|
switch (agent) {
|
|
85
119
|
case 'gemini':
|
|
86
|
-
return { binary: 'gemini', args: [healthPrompt] };
|
|
120
|
+
return { binary: 'gemini', args: ['-p', healthPrompt] };
|
|
87
121
|
case 'codex':
|
|
88
122
|
return { binary: 'codex', args: ['exec', healthPrompt] };
|
|
89
123
|
case 'claude':
|
|
@@ -106,7 +140,7 @@ export function createClaudeHealthCheck() {
|
|
|
106
140
|
'-v', `${process.cwd()}:/workspace`,
|
|
107
141
|
];
|
|
108
142
|
if (apiKey) {
|
|
109
|
-
const envKey = agent === 'gemini' ? '
|
|
143
|
+
const envKey = agent === 'gemini' ? 'GEMINI_API_KEY'
|
|
110
144
|
: agent === 'codex' ? 'CODEX_API_KEY'
|
|
111
145
|
: 'ANTHROPIC_API_KEY';
|
|
112
146
|
dockerArgs.push('-e', `${envKey}=${apiKey}`);
|
|
@@ -170,7 +204,7 @@ export function createClaudeHealthCheck() {
|
|
|
170
204
|
code: 'UNKNOWN',
|
|
171
205
|
message: errorLine,
|
|
172
206
|
recoverable: false,
|
|
173
|
-
suggestion:
|
|
207
|
+
suggestion: getAgentErrorSuggestion(agent)
|
|
174
208
|
},
|
|
175
209
|
message: errorLine,
|
|
176
210
|
durationMs
|
|
@@ -197,7 +231,11 @@ export function createClaudeHealthCheck() {
|
|
|
197
231
|
code: 'CLI_NOT_FOUND',
|
|
198
232
|
message: `${cliName} not found`,
|
|
199
233
|
recoverable: false,
|
|
200
|
-
suggestion:
|
|
234
|
+
suggestion: agent === 'gemini'
|
|
235
|
+
? 'Install Gemini CLI: npm install -g @google/gemini-cli'
|
|
236
|
+
: agent === 'codex'
|
|
237
|
+
? 'Install Codex CLI: npm install -g @openai/codex'
|
|
238
|
+
: 'Install Claude CLI: see https://docs.anthropic.com/en/docs/claude-code/overview'
|
|
201
239
|
},
|
|
202
240
|
message: `${cliName} is not installed`,
|
|
203
241
|
durationMs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeHealthCheck.js","sourceRoot":"","sources":["../../src/services/ClaudeHealthCheck.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ClaudeHealthCheck.js","sourceRoot":"","sources":["../../src/services/ClaudeHealthCheck.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export { createConfigService, type ConfigService, type InitConfig, type ProjectT
|
|
|
21
21
|
export { createGitHubService, GitHubFetchError, type GitHubService, type GitHubServiceConfig, type FetchOptions, type FetchProgress, type FetchResult, type GitHubErrorCode } from './GitHubService.js';
|
|
22
22
|
export { createSpecInitService, type SpecInitService, type SpecInitResult } from './SpecInitService.js';
|
|
23
23
|
export { createClaudeErrorDetector, type ClaudeErrorDetectorService, type ClaudeError, type ClaudeErrorCode } from './ClaudeErrorDetector.js';
|
|
24
|
-
export { createClaudeHealthCheck, type ClaudeHealthCheckService, type HealthCheckResult, type HealthCheckOptions } from './ClaudeHealthCheck.js';
|
|
24
|
+
export { createClaudeHealthCheck, getAgentSetupInstructions, type ClaudeHealthCheckService, type HealthCheckResult, type HealthCheckOptions } from './ClaudeHealthCheck.js';
|
|
25
25
|
export { createProjectDetector, type ProjectDetectorService, type DetectionResult } from './ProjectDetector.js';
|
|
26
26
|
export { createTestRunner, type TestRunnerService, type TestResult, type TestRunnerOptions } from './TestRunner.js';
|
|
27
27
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.js
CHANGED
|
@@ -21,7 +21,7 @@ export { createConfigService } from './ConfigService.js';
|
|
|
21
21
|
export { createGitHubService, GitHubFetchError } from './GitHubService.js';
|
|
22
22
|
export { createSpecInitService } from './SpecInitService.js';
|
|
23
23
|
export { createClaudeErrorDetector } from './ClaudeErrorDetector.js';
|
|
24
|
-
export { createClaudeHealthCheck } from './ClaudeHealthCheck.js';
|
|
24
|
+
export { createClaudeHealthCheck, getAgentSetupInstructions } from './ClaudeHealthCheck.js';
|
|
25
25
|
export { createProjectDetector } from './ProjectDetector.js';
|
|
26
26
|
export { createTestRunner } from './TestRunner.js';
|
|
27
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,UAAU,EAEX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EAIpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAEnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAGjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAKjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EAMvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EAItB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAInB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EAKtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAIpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAOjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EAGtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EAI1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,UAAU,EAEX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EAIpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAEnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAGjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAKjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EAMvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EAItB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAInB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EAKtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAIpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAOjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EAGtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EAI1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EAI1B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,qBAAqB,EAGtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAIjB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# Code Quality Standards
|
|
2
|
+
|
|
3
|
+
Project memory for code quality conventions: formatting, static analysis, sanitizers, and compiler warnings in modern C.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Philosophy
|
|
8
|
+
|
|
9
|
+
- **Shift left**: Catch bugs at compile time, not runtime
|
|
10
|
+
- **Automate enforcement**: clang-format and clang-tidy in CI, not code review
|
|
11
|
+
- **Warnings are errors**: `-Werror` in CI ensures nothing slips through
|
|
12
|
+
- **Sanitizers in test**: Run ASan/UBSan on every test run in CI
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## clang-format Configuration
|
|
17
|
+
|
|
18
|
+
### `.clang-format`
|
|
19
|
+
|
|
20
|
+
```yaml
|
|
21
|
+
BasedOnStyle: LLVM
|
|
22
|
+
Language: Cpp
|
|
23
|
+
Standard: c17
|
|
24
|
+
ColumnLimit: 100
|
|
25
|
+
IndentWidth: 4
|
|
26
|
+
UseTab: Never
|
|
27
|
+
BreakBeforeBraces: Attach
|
|
28
|
+
AllowShortFunctionsOnASingleLine: Empty
|
|
29
|
+
AllowShortIfStatementsOnASingleLine: Never
|
|
30
|
+
AllowShortLoopsOnASingleLine: false
|
|
31
|
+
PointerAlignment: Right
|
|
32
|
+
SpaceBeforeParens: ControlStatements
|
|
33
|
+
SortIncludes: CaseSensitive
|
|
34
|
+
IncludeBlocks: Regroup
|
|
35
|
+
IncludeCategories:
|
|
36
|
+
- Regex: '^".*"' # Project headers (corresponding header first)
|
|
37
|
+
Priority: 1
|
|
38
|
+
- Regex: '^<(assert|ctype|errno|float|limits|locale|math|setjmp|signal|stdarg|stddef|stdio|stdlib|string|time|stdbool|stdint|inttypes|stdalign|stdatomic|stdnoreturn|threads|uchar)\.h>'
|
|
39
|
+
Priority: 2 # C standard library
|
|
40
|
+
- Regex: '^<(sys|unistd|fcntl|pthread|netinet|arpa|dlfcn).*>'
|
|
41
|
+
Priority: 3 # POSIX / system
|
|
42
|
+
- Regex: '^<.+>' # Third-party
|
|
43
|
+
Priority: 4
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Format all source files
|
|
48
|
+
clang-format -i $(find src include -name '*.c' -o -name '*.h')
|
|
49
|
+
|
|
50
|
+
# Check formatting (CI)
|
|
51
|
+
clang-format --dry-run --Werror $(find src include -name '*.c' -o -name '*.h')
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## clang-tidy Configuration
|
|
57
|
+
|
|
58
|
+
### `.clang-tidy`
|
|
59
|
+
|
|
60
|
+
```yaml
|
|
61
|
+
Checks: >
|
|
62
|
+
-*,
|
|
63
|
+
bugprone-*,
|
|
64
|
+
cert-*,
|
|
65
|
+
misc-*,
|
|
66
|
+
readability-*,
|
|
67
|
+
performance-*,
|
|
68
|
+
clang-analyzer-*,
|
|
69
|
+
-readability-identifier-length,
|
|
70
|
+
-readability-magic-numbers,
|
|
71
|
+
-bugprone-easily-swappable-parameters,
|
|
72
|
+
-cert-err33-c
|
|
73
|
+
|
|
74
|
+
WarningsAsErrors: >
|
|
75
|
+
bugprone-*,
|
|
76
|
+
cert-str34-c,
|
|
77
|
+
cert-mem57-c,
|
|
78
|
+
clang-analyzer-security.*,
|
|
79
|
+
clang-analyzer-deadcode.*
|
|
80
|
+
|
|
81
|
+
CheckOptions:
|
|
82
|
+
- key: readability-identifier-naming.FunctionCase
|
|
83
|
+
value: lower_case
|
|
84
|
+
- key: readability-identifier-naming.VariableCase
|
|
85
|
+
value: lower_case
|
|
86
|
+
- key: readability-identifier-naming.MacroDefinitionCase
|
|
87
|
+
value: UPPER_CASE
|
|
88
|
+
- key: readability-identifier-naming.TypedefCase
|
|
89
|
+
value: lower_case
|
|
90
|
+
- key: readability-identifier-naming.TypedefSuffix
|
|
91
|
+
value: _t
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Key Check Categories
|
|
95
|
+
|
|
96
|
+
| Category | Purpose | Example Checks |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| `bugprone-*` | Common bug patterns | `sizeof-expression`, `narrowing-conversions`, `string-literal-with-embedded-nul` |
|
|
99
|
+
| `cert-*` | CERT C secure coding | `err34-c` (check return of `atoi`), `str34-c` (sign of `char`), `mem57-c` |
|
|
100
|
+
| `clang-analyzer-*` | Static analysis (deep) | `security.insecureAPI.strcpy`, `deadcode.DeadStores` |
|
|
101
|
+
| `performance-*` | Performance improvements | `type-promotion-in-math-fn` |
|
|
102
|
+
| `readability-*` | Code clarity | `identifier-naming`, `implicit-bool-conversion` |
|
|
103
|
+
| `misc-*` | Miscellaneous | `unused-parameters`, `redundant-expression` |
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Run clang-tidy (requires compile_commands.json)
|
|
107
|
+
run-clang-tidy -p build
|
|
108
|
+
|
|
109
|
+
# Single file
|
|
110
|
+
clang-tidy -p build src/main.c
|
|
111
|
+
|
|
112
|
+
# With auto-fix
|
|
113
|
+
run-clang-tidy -p build -fix
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## cppcheck (Supplementary)
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# Run with compile database
|
|
122
|
+
cppcheck --project=build/compile_commands.json \
|
|
123
|
+
--std=c17 \
|
|
124
|
+
--enable=all \
|
|
125
|
+
--suppress=missingIncludeSystem \
|
|
126
|
+
--error-exitcode=1 \
|
|
127
|
+
--inline-suppr
|
|
128
|
+
|
|
129
|
+
# Without compile database
|
|
130
|
+
cppcheck --enable=all --std=c17 \
|
|
131
|
+
--suppress=missingInclude \
|
|
132
|
+
-I include/ \
|
|
133
|
+
src/
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### cppcheck Key Checks
|
|
137
|
+
|
|
138
|
+
| Check | What It Finds |
|
|
139
|
+
|---|---|
|
|
140
|
+
| `nullPointer` | Null pointer dereference |
|
|
141
|
+
| `memleak` | Memory not freed on all paths |
|
|
142
|
+
| `bufferAccessOutOfBounds` | Array out-of-bounds access |
|
|
143
|
+
| `uninitvar` | Use of uninitialized variable |
|
|
144
|
+
| `resourceLeak` | File handle or socket not closed |
|
|
145
|
+
| `redundantAssignment` | Variable assigned then overwritten |
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Compiler Warnings
|
|
150
|
+
|
|
151
|
+
### Recommended Flags
|
|
152
|
+
|
|
153
|
+
```cmake
|
|
154
|
+
# CMakeLists.txt
|
|
155
|
+
target_compile_options(myapp PRIVATE
|
|
156
|
+
$<$<C_COMPILER_ID:GNU,Clang,AppleClang>:
|
|
157
|
+
-Wall
|
|
158
|
+
-Wextra
|
|
159
|
+
-Wpedantic
|
|
160
|
+
-Werror
|
|
161
|
+
-Wshadow
|
|
162
|
+
-Wconversion
|
|
163
|
+
-Wsign-conversion
|
|
164
|
+
-Wdouble-promotion
|
|
165
|
+
-Wformat=2
|
|
166
|
+
-Wformat-overflow=2
|
|
167
|
+
-Wformat-truncation=2
|
|
168
|
+
-Wimplicit-fallthrough
|
|
169
|
+
-Wnull-dereference
|
|
170
|
+
-Wunused
|
|
171
|
+
-Wstrict-prototypes
|
|
172
|
+
-Wold-style-definition
|
|
173
|
+
-Wmissing-prototypes
|
|
174
|
+
-Wmissing-declarations
|
|
175
|
+
-Wcast-align
|
|
176
|
+
-Wwrite-strings
|
|
177
|
+
-Wvla
|
|
178
|
+
>
|
|
179
|
+
$<$<C_COMPILER_ID:GNU>:
|
|
180
|
+
-Wlogical-op
|
|
181
|
+
-Wduplicated-cond
|
|
182
|
+
-Wduplicated-branches
|
|
183
|
+
-Wjump-misses-init
|
|
184
|
+
>
|
|
185
|
+
)
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
| Flag | Purpose |
|
|
189
|
+
|---|---|
|
|
190
|
+
| `-Wall -Wextra` | Enable most warnings |
|
|
191
|
+
| `-Wpedantic` | Enforce strict ISO C compliance |
|
|
192
|
+
| `-Werror` | Treat warnings as errors (CI) |
|
|
193
|
+
| `-Wshadow` | Warn on variable shadowing |
|
|
194
|
+
| `-Wconversion` | Warn on implicit narrowing conversions |
|
|
195
|
+
| `-Wstrict-prototypes` | Require full prototypes (not empty parens) |
|
|
196
|
+
| `-Wmissing-prototypes` | Warn if global function has no prior prototype |
|
|
197
|
+
| `-Wvla` | Forbid variable-length arrays (stack overflow risk) |
|
|
198
|
+
| `-Wformat=2` | Extra format string checks |
|
|
199
|
+
| `-Wold-style-definition` | Forbid K&R style function definitions |
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Sanitizers
|
|
204
|
+
|
|
205
|
+
### AddressSanitizer (ASan)
|
|
206
|
+
|
|
207
|
+
Detects: buffer overflows, use-after-free, use-after-scope, double-free, memory leaks.
|
|
208
|
+
|
|
209
|
+
```cmake
|
|
210
|
+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
|
|
211
|
+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### UndefinedBehaviorSanitizer (UBSan)
|
|
215
|
+
|
|
216
|
+
Detects: signed integer overflow, null pointer dereference, misaligned access, out-of-bounds shifts, type punning.
|
|
217
|
+
|
|
218
|
+
```cmake
|
|
219
|
+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined -fno-sanitize-recover=all")
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### MemorySanitizer (MSan) -- Clang Only
|
|
223
|
+
|
|
224
|
+
Detects: reads of uninitialized memory.
|
|
225
|
+
|
|
226
|
+
```cmake
|
|
227
|
+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=memory -fno-omit-frame-pointer")
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### ThreadSanitizer (TSan)
|
|
231
|
+
|
|
232
|
+
Detects: data races, deadlocks.
|
|
233
|
+
|
|
234
|
+
```cmake
|
|
235
|
+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread")
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Sanitizer CMake Preset Pattern
|
|
239
|
+
|
|
240
|
+
```json
|
|
241
|
+
{
|
|
242
|
+
"name": "asan",
|
|
243
|
+
"inherits": "debug",
|
|
244
|
+
"cacheVariables": {
|
|
245
|
+
"CMAKE_C_FLAGS": "-fsanitize=address,undefined -fno-omit-frame-pointer -fno-sanitize-recover=all"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Note**: ASan and TSan cannot be combined. Run them as separate CI jobs.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## CERT C Coding Standard References
|
|
255
|
+
|
|
256
|
+
Key CERT C rules to enforce via tooling and review:
|
|
257
|
+
|
|
258
|
+
| Rule | Description | Enforcement |
|
|
259
|
+
|---|---|---|
|
|
260
|
+
| **ERR33-C** | Detect and handle standard library errors | clang-tidy `cert-err33-c` |
|
|
261
|
+
| **STR31-C** | Guarantee null-terminated strings have sufficient space | Manual review, ASan |
|
|
262
|
+
| **MEM30-C** | Do not access freed memory | ASan, Valgrind |
|
|
263
|
+
| **MEM35-C** | Allocate sufficient memory for an object | ASan, cppcheck |
|
|
264
|
+
| **ARR38-C** | Guarantee array indices are within valid range | UBSan, ASan |
|
|
265
|
+
| **INT32-C** | Ensure signed integer operations do not overflow | UBSan |
|
|
266
|
+
| **FIO42-C** | Close files when they are no longer needed | cppcheck `resourceLeak` |
|
|
267
|
+
| **MSC24-C** | Do not use deprecated or obsolescent functions | clang-tidy, `-Wdeprecated` |
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Code Coverage
|
|
272
|
+
|
|
273
|
+
### gcov / lcov
|
|
274
|
+
|
|
275
|
+
```cmake
|
|
276
|
+
# Coverage build
|
|
277
|
+
target_compile_options(myapp_tests PRIVATE --coverage)
|
|
278
|
+
target_link_options(myapp_tests PRIVATE --coverage)
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
# Generate coverage report
|
|
283
|
+
cmake --build build-coverage
|
|
284
|
+
ctest --test-dir build-coverage
|
|
285
|
+
lcov --capture --directory build-coverage --output-file coverage.info
|
|
286
|
+
lcov --remove coverage.info '/usr/*' '*/test/*' --output-file coverage.info
|
|
287
|
+
genhtml coverage.info --output-directory coverage-report/
|
|
288
|
+
|
|
289
|
+
# Alternative: gcovr
|
|
290
|
+
gcovr --root . --html --html-details -o coverage/index.html
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## Quality Commands Summary
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
# Full quality check (CI pipeline)
|
|
299
|
+
clang-format --dry-run --Werror $(find src include -name '*.c' -o -name '*.h')
|
|
300
|
+
run-clang-tidy -p build
|
|
301
|
+
cppcheck --project=build/compile_commands.json --error-exitcode=1
|
|
302
|
+
cmake --build build-asan && ctest --test-dir build-asan --output-on-failure
|
|
303
|
+
cmake --build build-coverage && ctest --test-dir build-coverage
|
|
304
|
+
|
|
305
|
+
# Development workflow
|
|
306
|
+
clang-format -i src/**/*.c include/**/*.h # Quick format
|
|
307
|
+
cmake --build build && ctest --test-dir build # Fast feedback
|
|
308
|
+
clang-tidy -p build src/my_file.c # Focused analysis
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Anti-Patterns
|
|
314
|
+
|
|
315
|
+
| Anti-Pattern | Problem | Correct Approach |
|
|
316
|
+
|---|---|---|
|
|
317
|
+
| No `-Werror` in CI | Warnings accumulate silently | `-Werror` in CI builds |
|
|
318
|
+
| Suppressing warnings globally | Hides real bugs | Suppress per-line with comments only when justified |
|
|
319
|
+
| No sanitizers in test | Memory bugs hide until production | ASan + UBSan on every CI test run |
|
|
320
|
+
| Manual code review for style | Inconsistent, wastes reviewer time | clang-format enforces automatically |
|
|
321
|
+
| No `compile_commands.json` | clang-tidy cannot find headers | `set(CMAKE_EXPORT_COMPILE_COMMANDS ON)` |
|
|
322
|
+
| Ignoring cppcheck findings | Misses bugs clang-tidy does not catch | Run both tools; they complement each other |
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
_Focus on patterns over exhaustive rules. Code should be formatted, analyzed, and tested under sanitizers before it reaches review._
|