camouf 0.9.0 → 0.11.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 (29) hide show
  1. package/README.md +55 -32
  2. package/dist/cli/version.d.ts +1 -1
  3. package/dist/cli/version.d.ts.map +1 -1
  4. package/dist/cli/version.js +1 -1
  5. package/dist/cli/version.js.map +1 -1
  6. package/dist/core/rules/builtin/ai-hallucinated-imports.rule.d.ts +14 -0
  7. package/dist/core/rules/builtin/ai-hallucinated-imports.rule.d.ts.map +1 -1
  8. package/dist/core/rules/builtin/ai-hallucinated-imports.rule.js +72 -1
  9. package/dist/core/rules/builtin/ai-hallucinated-imports.rule.js.map +1 -1
  10. package/dist/core/rules/builtin/async-discrepancies.rule.d.ts +63 -0
  11. package/dist/core/rules/builtin/async-discrepancies.rule.d.ts.map +1 -0
  12. package/dist/core/rules/builtin/async-discrepancies.rule.js +452 -0
  13. package/dist/core/rules/builtin/async-discrepancies.rule.js.map +1 -0
  14. package/dist/core/rules/builtin/context-drift-patterns.rule.d.ts.map +1 -1
  15. package/dist/core/rules/builtin/context-drift-patterns.rule.js +37 -2
  16. package/dist/core/rules/builtin/context-drift-patterns.rule.js.map +1 -1
  17. package/dist/core/rules/builtin/performance-antipatterns.rule.d.ts.map +1 -1
  18. package/dist/core/rules/builtin/performance-antipatterns.rule.js +64 -11
  19. package/dist/core/rules/builtin/performance-antipatterns.rule.js.map +1 -1
  20. package/dist/core/rules/builtin/phantom-type-references.rule.d.ts.map +1 -1
  21. package/dist/core/rules/builtin/phantom-type-references.rule.js +81 -2
  22. package/dist/core/rules/builtin/phantom-type-references.rule.js.map +1 -1
  23. package/dist/core/rules/rule-engine.d.ts.map +1 -1
  24. package/dist/core/rules/rule-engine.js +2 -0
  25. package/dist/core/rules/rule-engine.js.map +1 -1
  26. package/dist/types/config.types.d.ts +2 -0
  27. package/dist/types/config.types.d.ts.map +1 -1
  28. package/dist/types/config.types.js.map +1 -1
  29. package/package.json +6 -4
package/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  [![npm downloads](https://img.shields.io/npm/dt/camouf.svg)](https://www.npmjs.com/package/camouf)
4
4
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
5
5
  [![CI](https://github.com/TheEmilz/camouf/actions/workflows/ci.yml/badge.svg)](https://github.com/TheEmilz/camouf/actions/workflows/ci.yml)
6
+ [![GitHub Action](https://img.shields.io/badge/GitHub%20Action-Marketplace-2088FF?logo=github-actions&logoColor=white)](https://github.com/marketplace/actions/camouf-ai-code-guardrails)
6
7
 
7
8
  # Camouf
8
9
 
@@ -106,7 +107,7 @@ npx camouf fix --id sig-001 # Fix a specific mismatch
106
107
 
107
108
  ## Features
108
109
 
109
- - **18 Built-in Rules**: AI-specific and architecture validation rules
110
+ - **19 Built-in Rules**: AI-specific and architecture validation rules
110
111
  - **Function/Field Matching**: Fuzzy matching to detect AI naming drift
111
112
  - **Circular Dependency Detection**: Find and break dependency cycles
112
113
  - **Real-time Watch Mode**: Continuous architecture monitoring
@@ -157,7 +158,7 @@ Running `npx camouf` or `npx camouf help` displays the full interactive help:
157
158
  ██║ ███████║██╔████╔██║██║ ██║██║ ██║█████╗
158
159
  ██║ ██╔══██║██║╚██╔╝██║██║ ██║██║ ██║██╔══╝
159
160
  ╚██████╗██║ ██║██║ ╚═╝ ██║╚██████╔╝╚██████╔╝██║
160
- ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ v0.8.0
161
+ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ v0.11.0
161
162
 
162
163
  Architecture guardrails for AI-generated code
163
164
 
@@ -234,7 +235,7 @@ Running `npx camouf` or `npx camouf help` displays the full interactive help:
234
235
 
235
236
  AI Safety: ai-hallucinated-imports, inconsistent-casing,
236
237
  orphaned-functions, phantom-type-references,
237
- context-drift-patterns
238
+ context-drift-patterns, async-discrepancies
238
239
  Architecture: layer-dependencies, circular-dependencies,
239
240
  function-signature-matching, contract-mismatch
240
241
  Code Quality: type-safety, performance-antipatterns,
@@ -374,6 +375,7 @@ This creates a **feedback loop** where AI catches its own mistakes before you se
374
375
  - [AI Agent Challenges](docs/ai-agent-challenges.md)
375
376
  - [MCP Agent Tutorial](docs/mcp-agent-tutorial.md)
376
377
  - [Configuring Rules](docs/configuring-rules.md)
378
+ - [Async Discrepancies Guide](docs/async-discrepancies.md)
377
379
  - [CI/CD Integration](docs/ci-cd-integration.md)
378
380
  - [Changelog](CHANGELOG.md)
379
381
 
@@ -495,6 +497,7 @@ These rules catch mistakes that AI coding assistants commonly make:
495
497
  | `phantom-type-references` | Catches references to types that don't exist | `warn` |
496
498
  | `inconsistent-casing` | Detects mixing of camelCase/snake_case in the same codebase | `warn` |
497
499
  | `orphaned-functions` | Finds functions declared but never called anywhere | `warn` |
500
+ | `async-discrepancies` | Detects async/await misuse: floating promises, unnecessary async, mixed patterns | `warn` |
498
501
 
499
502
  > **See examples:** Check `test-fixtures/ai-errors/` in the repository for concrete examples of what each rule catches.
500
503
 
@@ -714,6 +717,55 @@ npx camouf validate --format json --ci
714
717
 
715
718
  ## CI/CD Integration
716
719
 
720
+ ### GitHub Actions (Marketplace)
721
+
722
+ Camouf is available on the [GitHub Actions Marketplace](https://github.com/marketplace/actions/camouf-ai-code-guardrails). One step is all you need:
723
+
724
+ ```yaml
725
+ name: Architecture Check
726
+ on: [push, pull_request]
727
+
728
+ jobs:
729
+ architecture:
730
+ runs-on: ubuntu-latest
731
+ steps:
732
+ - uses: actions/checkout@v4
733
+ - uses: TheEmilz/camouf@v0.11.0
734
+ ```
735
+
736
+ Camouf auto-detects your config, runs all enabled rules, annotates changed files in PR diffs, and uploads a report artifact.
737
+
738
+ #### Target Specific Rules
739
+
740
+ ```yaml
741
+ - uses: TheEmilz/camouf@v0.11.0
742
+ with:
743
+ rules: 'async-discrepancies,contract-mismatch'
744
+ fail-on: 'warn'
745
+ ```
746
+
747
+ #### Async Safety Gate
748
+
749
+ ```yaml
750
+ name: Async Safety
751
+ on:
752
+ pull_request:
753
+ paths: ['**/*.ts', '**/*.js']
754
+
755
+ jobs:
756
+ async-check:
757
+ runs-on: ubuntu-latest
758
+ steps:
759
+ - uses: actions/checkout@v4
760
+ - uses: TheEmilz/camouf@v0.11.0
761
+ with:
762
+ rules: 'async-discrepancies'
763
+ fail-on: 'warn'
764
+ annotate: 'true'
765
+ ```
766
+
767
+ See [CI/CD Integration Guide](docs/ci-cd-integration.md) for the full input/output reference, PR comments, GitLab CI, Jenkins, and Azure DevOps examples.
768
+
717
769
  ### Non-Interactive Mode
718
770
 
719
771
  Use `--ci` flag or `CAMOUF_CI=1` environment variable for agent/CI environments:
@@ -734,35 +786,6 @@ CAMOUF_CI=1 npx camouf validate
734
786
  - `0` — No violations found
735
787
  - `1` — Violations found (or error)
736
788
 
737
- ### GitHub Actions
738
-
739
- ```yaml
740
- name: Architecture Check
741
- on: [push, pull_request]
742
-
743
- jobs:
744
- architecture:
745
- runs-on: ubuntu-latest
746
- steps:
747
- - uses: actions/checkout@v3
748
- - uses: actions/setup-node@v3
749
- with:
750
- node-version: '18'
751
- - run: npm ci
752
- - run: npx camouf validate --strict
753
- ```
754
-
755
- ### GitLab CI
756
-
757
- ```yaml
758
- architecture:
759
- stage: test
760
- image: node:18
761
- script:
762
- - npm ci
763
- - npx camouf validate --strict
764
- ```
765
-
766
789
  ## Multi-language Support
767
790
 
768
791
  | Language | Parser | Features |
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Version and metadata for Camouf CLI
3
3
  */
4
- export declare const version = "0.9.0";
4
+ export declare const version = "0.11.0";
5
5
  export declare const name = "camouf";
6
6
  export declare const description = "Architecture guardrails for AI-generated code";
7
7
  export declare const metadata: {
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,IAAI,WAAW,CAAC;AAC7B,eAAO,MAAM,WAAW,kDAAkD,CAAC;AAE3E,eAAO,MAAM,QAAQ;;;;;;;;CAQpB,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,OAAO,WAAW,CAAC;AAChC,eAAO,MAAM,IAAI,WAAW,CAAC;AAC7B,eAAO,MAAM,WAAW,kDAAkD,CAAC;AAE3E,eAAO,MAAM,QAAQ;;;;;;;;CAQpB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Version and metadata for Camouf CLI
3
3
  */
4
- export const version = '0.9.0';
4
+ export const version = '0.11.0';
5
5
  export const name = 'camouf';
6
6
  export const description = 'Architecture guardrails for AI-generated code';
7
7
  export const metadata = {
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAC7B,MAAM,CAAC,MAAM,WAAW,GAAG,+CAA+C,CAAC;AAE3E,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI;IACJ,OAAO;IACP,WAAW;IACX,QAAQ,EAAE,oCAAoC;IAC9C,UAAU,EAAE,oCAAoC;IAChD,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,YAAY;CACtB,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAChC,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAC7B,MAAM,CAAC,MAAM,WAAW,GAAG,+CAA+C,CAAC;AAE3E,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI;IACJ,OAAO;IACP,WAAW;IACX,QAAQ,EAAE,oCAAoC;IAC9C,UAAU,EAAE,oCAAoC;IAChD,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,YAAY;CACtB,CAAC"}
@@ -22,6 +22,8 @@ interface HallucinatedImportsConfig extends RuleConfig {
22
22
  ignorePatterns?: string[];
23
23
  /** Path aliases mapping (e.g., { "@/": "./src/" }) */
24
24
  pathAliases?: Record<string, string>;
25
+ /** Detected moduleResolution from tsconfig (auto-loaded) */
26
+ moduleResolution?: string;
25
27
  }
26
28
  export declare class AiHallucinatedImportsRule implements IRule {
27
29
  readonly id = "ai-hallucinated-imports";
@@ -39,7 +41,19 @@ export declare class AiHallucinatedImportsRule implements IRule {
39
41
  private loadTsConfigAliases;
40
42
  check(context: RuleContext): Promise<RuleResult>;
41
43
  checkFile(filePath: string, context: RuleContext): Promise<RuleResult>;
44
+ private readonly extensionSubstitutions;
42
45
  private loadPathAliasesFromConfig;
46
+ /**
47
+ * Check if a .js/.jsx/.mjs/.cjs extension import resolves to a .ts/.tsx/.mts/.cts
48
+ * file on disk. This is the standard behavior with moduleResolution: NodeNext/Node16.
49
+ */
50
+ private checkExtensionSubstitution;
51
+ /**
52
+ * Determines if we should try .js → .ts extension substitution.
53
+ * Always enabled when moduleResolution is nodenext/node16,
54
+ * but also applied as a fallback for any TS project to reduce false positives.
55
+ */
56
+ private shouldTryExtensionSubstitution;
43
57
  private checkFileImports;
44
58
  private extractImports;
45
59
  private isAliasImport;
@@ -1 +1 @@
1
- {"version":3,"file":"ai-hallucinated-imports.rule.d.ts","sourceRoot":"","sources":["../../../../src/core/rules/builtin/ai-hallucinated-imports.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAKlF,UAAU,yBAA0B,SAAQ,UAAU;IACpD,gCAAgC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6BAA6B;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAYD,qBAAa,yBAA0B,YAAW,KAAK;IACrD,QAAQ,CAAC,EAAE,6BAA6B;IACxC,QAAQ,CAAC,IAAI,uCAAuC;IACpD,QAAQ,CAAC,WAAW,6GAA6G;IACjI,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;IACrC,QAAQ,CAAC,IAAI,WAA8D;IAC3E,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;IAC3C,QAAQ,CAAC,mBAAmB,QAAQ;IAEpC,OAAO,CAAC,MAAM,CAQZ;IAGF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAoC7B;IAGF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAK7B;IAGF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAE3D,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI;IAO5D,OAAO,CAAC,mBAAmB;IAIrB,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAyBhD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;YAwB9D,yBAAyB;YA2BzB,gBAAgB;IAmC9B,OAAO,CAAC,cAAc;IAkEtB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,kBAAkB;YAkBZ,mBAAmB;YA2BnB,gBAAgB;YAmChB,cAAc;IAyC5B,OAAO,CAAC,gBAAgB,CAAK;IAE7B,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,kBAAkB;CAK3B"}
1
+ {"version":3,"file":"ai-hallucinated-imports.rule.d.ts","sourceRoot":"","sources":["../../../../src/core/rules/builtin/ai-hallucinated-imports.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAKlF,UAAU,yBAA0B,SAAQ,UAAU;IACpD,gCAAgC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6BAA6B;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAYD,qBAAa,yBAA0B,YAAW,KAAK;IACrD,QAAQ,CAAC,EAAE,6BAA6B;IACxC,QAAQ,CAAC,IAAI,uCAAuC;IACpD,QAAQ,CAAC,WAAW,6GAA6G;IACjI,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;IACrC,QAAQ,CAAC,IAAI,WAA8D;IAC3E,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;IAC3C,QAAQ,CAAC,mBAAmB,QAAQ;IAEpC,OAAO,CAAC,MAAM,CAQZ;IAGF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAoC7B;IAGF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAK7B;IAGF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAE3D,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI;IAO5D,OAAO,CAAC,mBAAmB;IAIrB,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAyBhD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA0B5E,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAKrC;YAEY,yBAAyB;IAuCvC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAclC;;;;OAIG;IACH,OAAO,CAAC,8BAA8B;YAWxB,gBAAgB;IAmC9B,OAAO,CAAC,cAAc;IAkEtB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,kBAAkB;YAkBZ,mBAAmB;YAgDnB,gBAAgB;YAmChB,cAAc;IAyC5B,OAAO,CAAC,gBAAgB,CAAK;IAE7B,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,kBAAkB;CAK3B"}
@@ -117,13 +117,32 @@ export class AiHallucinatedImportsRule {
117
117
  const violations = await this.checkFileImports(relativePath, content, context.config.root);
118
118
  return { violations };
119
119
  }
120
+ // Extension substitution map for moduleResolution: NodeNext/Node16
121
+ // In these modes, .js imports resolve to .ts files at compile-time
122
+ extensionSubstitutions = {
123
+ '.js': ['.ts', '.tsx'],
124
+ '.jsx': ['.tsx', '.ts'],
125
+ '.mjs': ['.mts'],
126
+ '.cjs': ['.cts'],
127
+ };
120
128
  async loadPathAliasesFromConfig(rootDir) {
121
- // Try to read tsconfig.json for path aliases
129
+ // Try to read tsconfig.json for path aliases and moduleResolution
122
130
  const tsconfigPath = path.join(rootDir, 'tsconfig.json');
123
131
  try {
124
132
  if (fs.existsSync(tsconfigPath)) {
125
133
  const tsconfigContent = fs.readFileSync(tsconfigPath, 'utf-8');
126
134
  const tsconfig = JSON.parse(tsconfigContent);
135
+ // Detect moduleResolution setting
136
+ if (tsconfig.compilerOptions?.moduleResolution) {
137
+ this.config.moduleResolution = tsconfig.compilerOptions.moduleResolution.toLowerCase();
138
+ }
139
+ // Also detect module field which implies resolution strategy
140
+ if (!this.config.moduleResolution && tsconfig.compilerOptions?.module) {
141
+ const mod = tsconfig.compilerOptions.module.toLowerCase();
142
+ if (['nodenext', 'node16'].includes(mod)) {
143
+ this.config.moduleResolution = mod;
144
+ }
145
+ }
127
146
  if (tsconfig.compilerOptions?.paths) {
128
147
  const baseUrl = tsconfig.compilerOptions.baseUrl || '.';
129
148
  for (const [alias, targets] of Object.entries(tsconfig.compilerOptions.paths)) {
@@ -141,6 +160,38 @@ export class AiHallucinatedImportsRule {
141
160
  // Ignore tsconfig parsing errors
142
161
  }
143
162
  }
163
+ /**
164
+ * Check if a .js/.jsx/.mjs/.cjs extension import resolves to a .ts/.tsx/.mts/.cts
165
+ * file on disk. This is the standard behavior with moduleResolution: NodeNext/Node16.
166
+ */
167
+ checkExtensionSubstitution(resolvedPath) {
168
+ const ext = path.extname(resolvedPath);
169
+ const substitutions = this.extensionSubstitutions[ext];
170
+ if (!substitutions)
171
+ return false;
172
+ const basePath = resolvedPath.slice(0, -ext.length);
173
+ for (const sub of substitutions) {
174
+ if (fs.existsSync(basePath + sub)) {
175
+ return true;
176
+ }
177
+ }
178
+ return false;
179
+ }
180
+ /**
181
+ * Determines if we should try .js → .ts extension substitution.
182
+ * Always enabled when moduleResolution is nodenext/node16,
183
+ * but also applied as a fallback for any TS project to reduce false positives.
184
+ */
185
+ shouldTryExtensionSubstitution() {
186
+ const mr = this.config.moduleResolution;
187
+ if (mr && ['nodenext', 'node16', 'bundler'].includes(mr)) {
188
+ return true;
189
+ }
190
+ // Fallback: always try substitution since it's a very common pattern
191
+ // and never produces false negatives (a real .js file would have been
192
+ // found already by the exact-match check)
193
+ return true;
194
+ }
144
195
  async checkFileImports(filePath, content, rootDir) {
145
196
  const violations = [];
146
197
  const imports = this.extractImports(content, filePath);
@@ -294,6 +345,26 @@ export class AiHallucinatedImportsRule {
294
345
  }
295
346
  }
296
347
  }
348
+ // NodeNext/Node16 extension substitution: .js imports resolve to .ts at compile-time
349
+ // e.g., import { foo } from './bar.js' resolves to ./bar.ts
350
+ if (this.shouldTryExtensionSubstitution()) {
351
+ if (this.checkExtensionSubstitution(resolvedPath)) {
352
+ return true;
353
+ }
354
+ // Also try index files with substitution: ./dir/index.js → ./dir/index.ts
355
+ const importExt = path.extname(importPath);
356
+ if (!importExt) {
357
+ // No extension — already handled above. But if an explicit .js extension
358
+ // points to a directory, try index substitution
359
+ for (const [jsExt, tsExts] of Object.entries(this.extensionSubstitutions)) {
360
+ for (const tsExt of tsExts) {
361
+ if (fs.existsSync(path.join(resolvedPath, `index${tsExt}`))) {
362
+ return true;
363
+ }
364
+ }
365
+ }
366
+ }
367
+ }
297
368
  return false;
298
369
  }
299
370
  async checkAliasImport(importPath, rootDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"ai-hallucinated-imports.rule.js","sourceRoot":"","sources":["../../../../src/core/rules/builtin/ai-hallucinated-imports.rule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-hallucinated-imports.rule.js","sourceRoot":"","sources":["../../../../src/core/rules/builtin/ai-hallucinated-imports.rule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Async Discrepancies Rule
3
+ *
4
+ * Detects async/await misuse patterns commonly introduced by AI coding assistants.
5
+ * These discrepancies arise when AI agents lose context about whether a function
6
+ * is synchronous or asynchronous, leading to subtle runtime bugs.
7
+ *
8
+ * Detections:
9
+ * 1. Missing `await` on async function calls
10
+ * 2. `async` functions that never use `await` (unnecessary async)
11
+ * 3. Async/sync signature drift between declaration and usage
12
+ * 4. Floating promises (async calls without await or .then/.catch)
13
+ * 5. `await` on non-async/non-promise expressions
14
+ * 6. Mixed async patterns (mixing callbacks with async/await)
15
+ */
16
+ import { IRule, RuleContext, RuleConfig, RuleResult, RuleCategory, RuleDocumentation } from '../rule.interface.js';
17
+ interface AsyncDiscrepanciesConfig extends RuleConfig {
18
+ /** Check for missing await on async calls */
19
+ checkMissingAwait?: boolean;
20
+ /** Check for unnecessary async keywords */
21
+ checkUnnecessaryAsync?: boolean;
22
+ /** Check for floating promises (unawaited async calls) */
23
+ checkFloatingPromises?: boolean;
24
+ /** Check for await on non-promise values */
25
+ checkAwaitNonPromise?: boolean;
26
+ /** Check for mixed async patterns (callbacks + async/await) */
27
+ checkMixedPatterns?: boolean;
28
+ /** File extensions to analyze */
29
+ includeExtensions?: string[];
30
+ /** Ignore patterns for function names */
31
+ ignorePatterns?: string[];
32
+ }
33
+ export declare class AsyncDiscrepanciesRule implements IRule {
34
+ readonly id = "async-discrepancies";
35
+ readonly name = "Async Discrepancies Detection";
36
+ readonly description = "Detects async/await misuse patterns commonly introduced by AI coding assistants";
37
+ readonly severity: "warning";
38
+ readonly tags: string[];
39
+ readonly category: RuleCategory;
40
+ readonly supportsIncremental = true;
41
+ readonly defaultSeverity: "warning";
42
+ private config;
43
+ private violationCounter;
44
+ /** Known async functions discovered across the project */
45
+ private knownAsyncFunctions;
46
+ configure(options: Partial<AsyncDiscrepanciesConfig>): void;
47
+ check(context: RuleContext): Promise<RuleResult>;
48
+ checkFile(filePath: string, context: RuleContext): Promise<RuleResult>;
49
+ getDocumentation(): RuleDocumentation;
50
+ private collectAsyncFunctions;
51
+ private buildAsyncFunctionInfo;
52
+ private checkUnnecessaryAsyncFunctions;
53
+ private checkFloatingPromisesAndMissingAwait;
54
+ private checkAwaitOnNonPromise;
55
+ private checkMixedAsyncPatterns;
56
+ private reportMixedPatterns;
57
+ private shouldAnalyzeFile;
58
+ private shouldIgnoreFunction;
59
+ private escapeRegex;
60
+ private createViolation;
61
+ }
62
+ export {};
63
+ //# sourceMappingURL=async-discrepancies.rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-discrepancies.rule.d.ts","sourceRoot":"","sources":["../../../../src/core/rules/builtin/async-discrepancies.rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGnH,UAAU,wBAAyB,SAAQ,UAAU;IACnD,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0DAA0D;IAC1D,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,4CAA4C;IAC5C,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAuBD,qBAAa,sBAAuB,YAAW,KAAK;IAClD,QAAQ,CAAC,EAAE,yBAAyB;IACpC,QAAQ,CAAC,IAAI,mCAAmC;IAChD,QAAQ,CAAC,WAAW,qFAAqF;IACzG,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;IACvC,QAAQ,CAAC,IAAI,WAAqD;IAClE,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAiB;IAChD,QAAQ,CAAC,mBAAmB,QAAQ;IACpC,QAAQ,CAAC,eAAe,EAAG,SAAS,CAAU;IAE9C,OAAO,CAAC,MAAM,CAiBZ;IAEF,OAAO,CAAC,gBAAgB,CAAK;IAE7B,0DAA0D;IAC1D,OAAO,CAAC,mBAAmB,CAAwC;IAEnE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,IAAI;IAIrD,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA4ChD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAK5E,gBAAgB,IAAI,iBAAiB;IAuErC,OAAO,CAAC,qBAAqB;IAuC7B,OAAO,CAAC,sBAAsB;IA4D9B,OAAO,CAAC,8BAA8B;IAwBtC,OAAO,CAAC,oCAAoC;IA0G5C,OAAO,CAAC,sBAAsB;IA2C9B,OAAO,CAAC,uBAAuB;IAiE/B,OAAO,CAAC,mBAAmB;IAiC3B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;CAkBxB"}