@opensip-cli/checks-universal 0.1.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/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +31 -0
- package/dist/__tests__/all-checks-execute.test.d.ts +17 -0
- package/dist/__tests__/all-checks-execute.test.d.ts.map +1 -0
- package/dist/__tests__/all-checks-execute.test.js +452 -0
- package/dist/__tests__/all-checks-execute.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-10.test.d.ts +8 -0
- package/dist/__tests__/behavior-fixtures-10.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-10.test.js +200 -0
- package/dist/__tests__/behavior-fixtures-10.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-11.test.d.ts +8 -0
- package/dist/__tests__/behavior-fixtures-11.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-11.test.js +120 -0
- package/dist/__tests__/behavior-fixtures-11.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-12.test.d.ts +8 -0
- package/dist/__tests__/behavior-fixtures-12.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-12.test.js +157 -0
- package/dist/__tests__/behavior-fixtures-12.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-2.test.d.ts +8 -0
- package/dist/__tests__/behavior-fixtures-2.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-2.test.js +785 -0
- package/dist/__tests__/behavior-fixtures-2.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-3.test.d.ts +6 -0
- package/dist/__tests__/behavior-fixtures-3.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-3.test.js +663 -0
- package/dist/__tests__/behavior-fixtures-3.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-4.test.d.ts +5 -0
- package/dist/__tests__/behavior-fixtures-4.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-4.test.js +612 -0
- package/dist/__tests__/behavior-fixtures-4.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-5.test.d.ts +5 -0
- package/dist/__tests__/behavior-fixtures-5.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-5.test.js +469 -0
- package/dist/__tests__/behavior-fixtures-5.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-6.test.d.ts +8 -0
- package/dist/__tests__/behavior-fixtures-6.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-6.test.js +591 -0
- package/dist/__tests__/behavior-fixtures-6.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-7.test.d.ts +5 -0
- package/dist/__tests__/behavior-fixtures-7.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-7.test.js +662 -0
- package/dist/__tests__/behavior-fixtures-7.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-8.test.d.ts +11 -0
- package/dist/__tests__/behavior-fixtures-8.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-8.test.js +634 -0
- package/dist/__tests__/behavior-fixtures-8.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures-9.test.d.ts +11 -0
- package/dist/__tests__/behavior-fixtures-9.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures-9.test.js +271 -0
- package/dist/__tests__/behavior-fixtures-9.test.js.map +1 -0
- package/dist/__tests__/behavior-fixtures.test.d.ts +14 -0
- package/dist/__tests__/behavior-fixtures.test.d.ts.map +1 -0
- package/dist/__tests__/behavior-fixtures.test.js +1423 -0
- package/dist/__tests__/behavior-fixtures.test.js.map +1 -0
- package/dist/__tests__/checks.test.d.ts +2 -0
- package/dist/__tests__/checks.test.d.ts.map +1 -0
- package/dist/__tests__/checks.test.js +61 -0
- package/dist/__tests__/checks.test.js.map +1 -0
- package/dist/__tests__/env-var-validation.test.d.ts +14 -0
- package/dist/__tests__/env-var-validation.test.d.ts.map +1 -0
- package/dist/__tests__/env-var-validation.test.js +53 -0
- package/dist/__tests__/env-var-validation.test.js.map +1 -0
- package/dist/__tests__/file-length-limit.test.d.ts +2 -0
- package/dist/__tests__/file-length-limit.test.d.ts.map +1 -0
- package/dist/__tests__/file-length-limit.test.js +29 -0
- package/dist/__tests__/file-length-limit.test.js.map +1 -0
- package/dist/__tests__/fixture-coverage.allowlist.d.ts +18 -0
- package/dist/__tests__/fixture-coverage.allowlist.d.ts.map +1 -0
- package/dist/__tests__/fixture-coverage.allowlist.js +35 -0
- package/dist/__tests__/fixture-coverage.allowlist.js.map +1 -0
- package/dist/__tests__/fixture-coverage.test.d.ts +13 -0
- package/dist/__tests__/fixture-coverage.test.d.ts.map +1 -0
- package/dist/__tests__/fixture-coverage.test.js +57 -0
- package/dist/__tests__/fixture-coverage.test.js.map +1 -0
- package/dist/__tests__/iic.test.d.ts +15 -0
- package/dist/__tests__/iic.test.d.ts.map +1 -0
- package/dist/__tests__/iic.test.js +316 -0
- package/dist/__tests__/iic.test.js.map +1 -0
- package/dist/__tests__/no-skipped-tests.test.d.ts +14 -0
- package/dist/__tests__/no-skipped-tests.test.d.ts.map +1 -0
- package/dist/__tests__/no-skipped-tests.test.js +144 -0
- package/dist/__tests__/no-skipped-tests.test.js.map +1 -0
- package/dist/__tests__/no-todo-comments.test.d.ts +2 -0
- package/dist/__tests__/no-todo-comments.test.d.ts.map +1 -0
- package/dist/__tests__/no-todo-comments.test.js +31 -0
- package/dist/__tests__/no-todo-comments.test.js.map +1 -0
- package/dist/__tests__/no-unimplemented-markers.test.d.ts +2 -0
- package/dist/__tests__/no-unimplemented-markers.test.d.ts.map +1 -0
- package/dist/__tests__/no-unimplemented-markers.test.js +140 -0
- package/dist/__tests__/no-unimplemented-markers.test.js.map +1 -0
- package/dist/__tests__/public-api-jsdoc-scope.test.d.ts +10 -0
- package/dist/__tests__/public-api-jsdoc-scope.test.d.ts.map +1 -0
- package/dist/__tests__/public-api-jsdoc-scope.test.js +176 -0
- package/dist/__tests__/public-api-jsdoc-scope.test.js.map +1 -0
- package/dist/__tests__/resilience-fp.test.d.ts +14 -0
- package/dist/__tests__/resilience-fp.test.d.ts.map +1 -0
- package/dist/__tests__/resilience-fp.test.js +110 -0
- package/dist/__tests__/resilience-fp.test.js.map +1 -0
- package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.d.ts +2 -0
- package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.d.ts.map +1 -0
- package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.js +32 -0
- package/dist/checks/architecture/__tests__/no-kebab-option-indexing.test.js.map +1 -0
- package/dist/checks/architecture/__tests__/tool-has-manifest.test.d.ts +2 -0
- package/dist/checks/architecture/__tests__/tool-has-manifest.test.d.ts.map +1 -0
- package/dist/checks/architecture/__tests__/tool-has-manifest.test.js +152 -0
- package/dist/checks/architecture/__tests__/tool-has-manifest.test.js.map +1 -0
- package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.d.ts +2 -0
- package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.d.ts.map +1 -0
- package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.js +129 -0
- package/dist/checks/architecture/__tests__/vitest-config-required-with-tests.test.js.map +1 -0
- package/dist/checks/architecture/_yaml-doc-bindings.d.ts +23 -0
- package/dist/checks/architecture/_yaml-doc-bindings.d.ts.map +1 -0
- package/dist/checks/architecture/_yaml-doc-bindings.js +29 -0
- package/dist/checks/architecture/_yaml-doc-bindings.js.map +1 -0
- package/dist/checks/architecture/dependencies/index.d.ts +2 -0
- package/dist/checks/architecture/dependencies/index.d.ts.map +1 -0
- package/dist/checks/architecture/dependencies/index.js +2 -0
- package/dist/checks/architecture/dependencies/index.js.map +1 -0
- package/dist/checks/architecture/dependencies/no-duplicate-packages.d.ts +11 -0
- package/dist/checks/architecture/dependencies/no-duplicate-packages.d.ts.map +1 -0
- package/dist/checks/architecture/dependencies/no-duplicate-packages.js +171 -0
- package/dist/checks/architecture/dependencies/no-duplicate-packages.js.map +1 -0
- package/dist/checks/architecture/docker-best-practices.d.ts +23 -0
- package/dist/checks/architecture/docker-best-practices.d.ts.map +1 -0
- package/dist/checks/architecture/docker-best-practices.js +427 -0
- package/dist/checks/architecture/docker-best-practices.js.map +1 -0
- package/dist/checks/architecture/docker-ignore-validation.d.ts +18 -0
- package/dist/checks/architecture/docker-ignore-validation.d.ts.map +1 -0
- package/dist/checks/architecture/docker-ignore-validation.js +117 -0
- package/dist/checks/architecture/docker-ignore-validation.js.map +1 -0
- package/dist/checks/architecture/docker-version-sync.d.ts +16 -0
- package/dist/checks/architecture/docker-version-sync.d.ts.map +1 -0
- package/dist/checks/architecture/docker-version-sync.js +193 -0
- package/dist/checks/architecture/docker-version-sync.js.map +1 -0
- package/dist/checks/architecture/env-var-validation.d.ts +14 -0
- package/dist/checks/architecture/env-var-validation.d.ts.map +1 -0
- package/dist/checks/architecture/env-var-validation.js +289 -0
- package/dist/checks/architecture/env-var-validation.js.map +1 -0
- package/dist/checks/architecture/heavy-import-detection.d.ts +11 -0
- package/dist/checks/architecture/heavy-import-detection.d.ts.map +1 -0
- package/dist/checks/architecture/heavy-import-detection.js +91 -0
- package/dist/checks/architecture/heavy-import-detection.js.map +1 -0
- package/dist/checks/architecture/index.d.ts +16 -0
- package/dist/checks/architecture/index.d.ts.map +1 -0
- package/dist/checks/architecture/index.js +16 -0
- package/dist/checks/architecture/index.js.map +1 -0
- package/dist/checks/architecture/modules/empty-package-detection.d.ts +11 -0
- package/dist/checks/architecture/modules/empty-package-detection.d.ts.map +1 -0
- package/dist/checks/architecture/modules/empty-package-detection.js +277 -0
- package/dist/checks/architecture/modules/empty-package-detection.js.map +1 -0
- package/dist/checks/architecture/modules/index.d.ts +3 -0
- package/dist/checks/architecture/modules/index.d.ts.map +1 -0
- package/dist/checks/architecture/modules/index.js +3 -0
- package/dist/checks/architecture/modules/index.js.map +1 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency.d.ts +12 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency.d.ts.map +1 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency.js +555 -0
- package/dist/checks/architecture/modules/interface-implementation-consistency.js.map +1 -0
- package/dist/checks/architecture/no-custom-event-emitter.d.ts +11 -0
- package/dist/checks/architecture/no-custom-event-emitter.d.ts.map +1 -0
- package/dist/checks/architecture/no-custom-event-emitter.js +123 -0
- package/dist/checks/architecture/no-custom-event-emitter.js.map +1 -0
- package/dist/checks/architecture/no-kebab-option-indexing.d.ts +33 -0
- package/dist/checks/architecture/no-kebab-option-indexing.d.ts.map +1 -0
- package/dist/checks/architecture/no-kebab-option-indexing.js +81 -0
- package/dist/checks/architecture/no-kebab-option-indexing.js.map +1 -0
- package/dist/checks/architecture/node-version-consistency.d.ts +22 -0
- package/dist/checks/architecture/node-version-consistency.d.ts.map +1 -0
- package/dist/checks/architecture/node-version-consistency.js +225 -0
- package/dist/checks/architecture/node-version-consistency.js.map +1 -0
- package/dist/checks/architecture/project-readme-existence.d.ts +13 -0
- package/dist/checks/architecture/project-readme-existence.d.ts.map +1 -0
- package/dist/checks/architecture/project-readme-existence.js +55 -0
- package/dist/checks/architecture/project-readme-existence.js.map +1 -0
- package/dist/checks/architecture/stale-build-artifacts.d.ts +10 -0
- package/dist/checks/architecture/stale-build-artifacts.d.ts.map +1 -0
- package/dist/checks/architecture/stale-build-artifacts.js +55 -0
- package/dist/checks/architecture/stale-build-artifacts.js.map +1 -0
- package/dist/checks/architecture/tool-has-manifest.d.ts +27 -0
- package/dist/checks/architecture/tool-has-manifest.d.ts.map +1 -0
- package/dist/checks/architecture/tool-has-manifest.js +135 -0
- package/dist/checks/architecture/tool-has-manifest.js.map +1 -0
- package/dist/checks/architecture/vitest-config-extends-base.d.ts +15 -0
- package/dist/checks/architecture/vitest-config-extends-base.d.ts.map +1 -0
- package/dist/checks/architecture/vitest-config-extends-base.js +104 -0
- package/dist/checks/architecture/vitest-config-extends-base.js.map +1 -0
- package/dist/checks/architecture/vitest-config-required-with-tests.d.ts +49 -0
- package/dist/checks/architecture/vitest-config-required-with-tests.d.ts.map +1 -0
- package/dist/checks/architecture/vitest-config-required-with-tests.js +199 -0
- package/dist/checks/architecture/vitest-config-required-with-tests.js.map +1 -0
- package/dist/checks/documentation/_directives/eslint.d.ts +9 -0
- package/dist/checks/documentation/_directives/eslint.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/eslint.js +168 -0
- package/dist/checks/documentation/_directives/eslint.js.map +1 -0
- package/dist/checks/documentation/_directives/fitness.d.ts +9 -0
- package/dist/checks/documentation/_directives/fitness.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/fitness.js +64 -0
- package/dist/checks/documentation/_directives/fitness.js.map +1 -0
- package/dist/checks/documentation/_directives/graph.d.ts +10 -0
- package/dist/checks/documentation/_directives/graph.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/graph.js +65 -0
- package/dist/checks/documentation/_directives/graph.js.map +1 -0
- package/dist/checks/documentation/_directives/graph.test.d.ts +2 -0
- package/dist/checks/documentation/_directives/graph.test.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/graph.test.js +54 -0
- package/dist/checks/documentation/_directives/graph.test.js.map +1 -0
- package/dist/checks/documentation/_directives/semgrep.d.ts +8 -0
- package/dist/checks/documentation/_directives/semgrep.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/semgrep.js +72 -0
- package/dist/checks/documentation/_directives/semgrep.js.map +1 -0
- package/dist/checks/documentation/_directives/types.d.ts +21 -0
- package/dist/checks/documentation/_directives/types.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/types.js +9 -0
- package/dist/checks/documentation/_directives/types.js.map +1 -0
- package/dist/checks/documentation/_directives/typescript.d.ts +10 -0
- package/dist/checks/documentation/_directives/typescript.d.ts.map +1 -0
- package/dist/checks/documentation/_directives/typescript.js +54 -0
- package/dist/checks/documentation/_directives/typescript.js.map +1 -0
- package/dist/checks/documentation/_public-api-graph.d.ts +30 -0
- package/dist/checks/documentation/_public-api-graph.d.ts.map +1 -0
- package/dist/checks/documentation/_public-api-graph.js +304 -0
- package/dist/checks/documentation/_public-api-graph.js.map +1 -0
- package/dist/checks/documentation/directive-audit.d.ts +26 -0
- package/dist/checks/documentation/directive-audit.d.ts.map +1 -0
- package/dist/checks/documentation/directive-audit.js +144 -0
- package/dist/checks/documentation/directive-audit.js.map +1 -0
- package/dist/checks/documentation/index.d.ts +3 -0
- package/dist/checks/documentation/index.d.ts.map +1 -0
- package/dist/checks/documentation/index.js +3 -0
- package/dist/checks/documentation/index.js.map +1 -0
- package/dist/checks/documentation/public-api-jsdoc.d.ts +10 -0
- package/dist/checks/documentation/public-api-jsdoc.d.ts.map +1 -0
- package/dist/checks/documentation/public-api-jsdoc.js +131 -0
- package/dist/checks/documentation/public-api-jsdoc.js.map +1 -0
- package/dist/checks/file-length-limit.d.ts +16 -0
- package/dist/checks/file-length-limit.d.ts.map +1 -0
- package/dist/checks/file-length-limit.js +47 -0
- package/dist/checks/file-length-limit.js.map +1 -0
- package/dist/checks/index.d.ts +16 -0
- package/dist/checks/index.d.ts.map +1 -0
- package/dist/checks/index.js +16 -0
- package/dist/checks/index.js.map +1 -0
- package/dist/checks/no-todo-comments.d.ts +18 -0
- package/dist/checks/no-todo-comments.d.ts.map +1 -0
- package/dist/checks/no-todo-comments.js +79 -0
- package/dist/checks/no-todo-comments.js.map +1 -0
- package/dist/checks/no-unimplemented-markers.d.ts +24 -0
- package/dist/checks/no-unimplemented-markers.d.ts.map +1 -0
- package/dist/checks/no-unimplemented-markers.js +198 -0
- package/dist/checks/no-unimplemented-markers.js.map +1 -0
- package/dist/checks/quality/api/graphql-offset-pagination.d.ts +9 -0
- package/dist/checks/quality/api/graphql-offset-pagination.d.ts.map +1 -0
- package/dist/checks/quality/api/graphql-offset-pagination.js +63 -0
- package/dist/checks/quality/api/graphql-offset-pagination.js.map +1 -0
- package/dist/checks/quality/api/index.d.ts +3 -0
- package/dist/checks/quality/api/index.d.ts.map +1 -0
- package/dist/checks/quality/api/index.js +3 -0
- package/dist/checks/quality/api/index.js.map +1 -0
- package/dist/checks/quality/api/zod-openapi-sync.d.ts +13 -0
- package/dist/checks/quality/api/zod-openapi-sync.d.ts.map +1 -0
- package/dist/checks/quality/api/zod-openapi-sync.js +88 -0
- package/dist/checks/quality/api/zod-openapi-sync.js.map +1 -0
- package/dist/checks/quality/code-structure/dead-code.d.ts +12 -0
- package/dist/checks/quality/code-structure/dead-code.d.ts.map +1 -0
- package/dist/checks/quality/code-structure/dead-code.js +238 -0
- package/dist/checks/quality/code-structure/dead-code.js.map +1 -0
- package/dist/checks/quality/code-structure/index.d.ts +5 -0
- package/dist/checks/quality/code-structure/index.d.ts.map +1 -0
- package/dist/checks/quality/code-structure/index.js +5 -0
- package/dist/checks/quality/code-structure/index.js.map +1 -0
- package/dist/checks/quality/code-structure/no-ai-attribution.d.ts +25 -0
- package/dist/checks/quality/code-structure/no-ai-attribution.d.ts.map +1 -0
- package/dist/checks/quality/code-structure/no-ai-attribution.js +76 -0
- package/dist/checks/quality/code-structure/no-ai-attribution.js.map +1 -0
- package/dist/checks/quality/code-structure/no-console-log.d.ts +17 -0
- package/dist/checks/quality/code-structure/no-console-log.d.ts.map +1 -0
- package/dist/checks/quality/code-structure/no-console-log.js +106 -0
- package/dist/checks/quality/code-structure/no-console-log.js.map +1 -0
- package/dist/checks/quality/code-structure/no-process-artifacts.d.ts +25 -0
- package/dist/checks/quality/code-structure/no-process-artifacts.d.ts.map +1 -0
- package/dist/checks/quality/code-structure/no-process-artifacts.js +104 -0
- package/dist/checks/quality/code-structure/no-process-artifacts.js.map +1 -0
- package/dist/checks/quality/dependency-version-consistency.d.ts +20 -0
- package/dist/checks/quality/dependency-version-consistency.d.ts.map +1 -0
- package/dist/checks/quality/dependency-version-consistency.js +266 -0
- package/dist/checks/quality/dependency-version-consistency.js.map +1 -0
- package/dist/checks/quality/fitness-ignore-hygiene.d.ts +10 -0
- package/dist/checks/quality/fitness-ignore-hygiene.d.ts.map +1 -0
- package/dist/checks/quality/fitness-ignore-hygiene.js +93 -0
- package/dist/checks/quality/fitness-ignore-hygiene.js.map +1 -0
- package/dist/checks/quality/frontend/expo-vector-icons.d.ts +13 -0
- package/dist/checks/quality/frontend/expo-vector-icons.d.ts.map +1 -0
- package/dist/checks/quality/frontend/expo-vector-icons.js +80 -0
- package/dist/checks/quality/frontend/expo-vector-icons.js.map +1 -0
- package/dist/checks/quality/frontend/image-optimization.d.ts +13 -0
- package/dist/checks/quality/frontend/image-optimization.d.ts.map +1 -0
- package/dist/checks/quality/frontend/image-optimization.js +166 -0
- package/dist/checks/quality/frontend/image-optimization.js.map +1 -0
- package/dist/checks/quality/frontend/index.d.ts +4 -0
- package/dist/checks/quality/frontend/index.d.ts.map +1 -0
- package/dist/checks/quality/frontend/index.js +4 -0
- package/dist/checks/quality/frontend/index.js.map +1 -0
- package/dist/checks/quality/frontend/navigation-typing.d.ts +12 -0
- package/dist/checks/quality/frontend/navigation-typing.d.ts.map +1 -0
- package/dist/checks/quality/frontend/navigation-typing.js +77 -0
- package/dist/checks/quality/frontend/navigation-typing.js.map +1 -0
- package/dist/checks/quality/graph-ignore-hygiene.d.ts +10 -0
- package/dist/checks/quality/graph-ignore-hygiene.d.ts.map +1 -0
- package/dist/checks/quality/graph-ignore-hygiene.js +95 -0
- package/dist/checks/quality/graph-ignore-hygiene.js.map +1 -0
- package/dist/checks/quality/graph-ignore-hygiene.test.d.ts +14 -0
- package/dist/checks/quality/graph-ignore-hygiene.test.d.ts.map +1 -0
- package/dist/checks/quality/graph-ignore-hygiene.test.js +58 -0
- package/dist/checks/quality/graph-ignore-hygiene.test.js.map +1 -0
- package/dist/checks/quality/index.d.ts +16 -0
- package/dist/checks/quality/index.d.ts.map +1 -0
- package/dist/checks/quality/index.js +16 -0
- package/dist/checks/quality/index.js.map +1 -0
- package/dist/checks/quality/linting/eslint-justifications.d.ts +12 -0
- package/dist/checks/quality/linting/eslint-justifications.d.ts.map +1 -0
- package/dist/checks/quality/linting/eslint-justifications.js +328 -0
- package/dist/checks/quality/linting/eslint-justifications.js.map +1 -0
- package/dist/checks/quality/linting/index.d.ts +4 -0
- package/dist/checks/quality/linting/index.d.ts.map +1 -0
- package/dist/checks/quality/linting/index.js +4 -0
- package/dist/checks/quality/linting/index.js.map +1 -0
- package/dist/checks/quality/linting/semgrep-justifications.d.ts +16 -0
- package/dist/checks/quality/linting/semgrep-justifications.d.ts.map +1 -0
- package/dist/checks/quality/linting/semgrep-justifications.js +229 -0
- package/dist/checks/quality/linting/semgrep-justifications.js.map +1 -0
- package/dist/checks/quality/linting/typescript-directive-hygiene.d.ts +12 -0
- package/dist/checks/quality/linting/typescript-directive-hygiene.d.ts.map +1 -0
- package/dist/checks/quality/linting/typescript-directive-hygiene.js +142 -0
- package/dist/checks/quality/linting/typescript-directive-hygiene.js.map +1 -0
- package/dist/checks/quality/no-compatibility-layer-names.d.ts +13 -0
- package/dist/checks/quality/no-compatibility-layer-names.d.ts.map +1 -0
- package/dist/checks/quality/no-compatibility-layer-names.js +100 -0
- package/dist/checks/quality/no-compatibility-layer-names.js.map +1 -0
- package/dist/checks/quality/no-deprecated-tags.d.ts +11 -0
- package/dist/checks/quality/no-deprecated-tags.d.ts.map +1 -0
- package/dist/checks/quality/no-deprecated-tags.js +76 -0
- package/dist/checks/quality/no-deprecated-tags.js.map +1 -0
- package/dist/checks/quality/no-markdown-references.d.ts +16 -0
- package/dist/checks/quality/no-markdown-references.d.ts.map +1 -0
- package/dist/checks/quality/no-markdown-references.js +145 -0
- package/dist/checks/quality/no-markdown-references.js.map +1 -0
- package/dist/checks/quality/no-raw-regex-on-code.d.ts +9 -0
- package/dist/checks/quality/no-raw-regex-on-code.d.ts.map +1 -0
- package/dist/checks/quality/no-raw-regex-on-code.js +61 -0
- package/dist/checks/quality/no-raw-regex-on-code.js.map +1 -0
- package/dist/checks/quality/no-temporary-workarounds.d.ts +11 -0
- package/dist/checks/quality/no-temporary-workarounds.d.ts.map +1 -0
- package/dist/checks/quality/no-temporary-workarounds.js +69 -0
- package/dist/checks/quality/no-temporary-workarounds.js.map +1 -0
- package/dist/checks/quality/no-window-alert.d.ts +19 -0
- package/dist/checks/quality/no-window-alert.d.ts.map +1 -0
- package/dist/checks/quality/no-window-alert.js +74 -0
- package/dist/checks/quality/no-window-alert.js.map +1 -0
- package/dist/checks/quality/observability/index.d.ts +2 -0
- package/dist/checks/quality/observability/index.d.ts.map +1 -0
- package/dist/checks/quality/observability/index.js +2 -0
- package/dist/checks/quality/observability/index.js.map +1 -0
- package/dist/checks/quality/observability/pino-serializer-coverage.d.ts +15 -0
- package/dist/checks/quality/observability/pino-serializer-coverage.d.ts.map +1 -0
- package/dist/checks/quality/observability/pino-serializer-coverage.js +209 -0
- package/dist/checks/quality/observability/pino-serializer-coverage.js.map +1 -0
- package/dist/checks/quality/patterns/async-state-pattern.d.ts +14 -0
- package/dist/checks/quality/patterns/async-state-pattern.d.ts.map +1 -0
- package/dist/checks/quality/patterns/async-state-pattern.js +80 -0
- package/dist/checks/quality/patterns/async-state-pattern.js.map +1 -0
- package/dist/checks/quality/patterns/index.d.ts +4 -0
- package/dist/checks/quality/patterns/index.d.ts.map +1 -0
- package/dist/checks/quality/patterns/index.js +4 -0
- package/dist/checks/quality/patterns/index.js.map +1 -0
- package/dist/checks/quality/patterns/no-non-null-assertions.d.ts +10 -0
- package/dist/checks/quality/patterns/no-non-null-assertions.d.ts.map +1 -0
- package/dist/checks/quality/patterns/no-non-null-assertions.js +97 -0
- package/dist/checks/quality/patterns/no-non-null-assertions.js.map +1 -0
- package/dist/checks/quality/patterns/performance-anti-patterns.d.ts +16 -0
- package/dist/checks/quality/patterns/performance-anti-patterns.d.ts.map +1 -0
- package/dist/checks/quality/patterns/performance-anti-patterns.js +239 -0
- package/dist/checks/quality/patterns/performance-anti-patterns.js.map +1 -0
- package/dist/checks/resilience/_helpers/config-validation.d.ts +27 -0
- package/dist/checks/resilience/_helpers/config-validation.d.ts.map +1 -0
- package/dist/checks/resilience/_helpers/config-validation.js +61 -0
- package/dist/checks/resilience/_helpers/config-validation.js.map +1 -0
- package/dist/checks/resilience/batch-operations.d.ts +22 -0
- package/dist/checks/resilience/batch-operations.d.ts.map +1 -0
- package/dist/checks/resilience/batch-operations.js +422 -0
- package/dist/checks/resilience/batch-operations.js.map +1 -0
- package/dist/checks/resilience/cache-ttl-validation.d.ts +13 -0
- package/dist/checks/resilience/cache-ttl-validation.d.ts.map +1 -0
- package/dist/checks/resilience/cache-ttl-validation.js +222 -0
- package/dist/checks/resilience/cache-ttl-validation.js.map +1 -0
- package/dist/checks/resilience/catch-clause-safety.d.ts +12 -0
- package/dist/checks/resilience/catch-clause-safety.d.ts.map +1 -0
- package/dist/checks/resilience/catch-clause-safety.js +110 -0
- package/dist/checks/resilience/catch-clause-safety.js.map +1 -0
- package/dist/checks/resilience/dangerous-config-defaults.d.ts +11 -0
- package/dist/checks/resilience/dangerous-config-defaults.d.ts.map +1 -0
- package/dist/checks/resilience/dangerous-config-defaults.js +304 -0
- package/dist/checks/resilience/dangerous-config-defaults.js.map +1 -0
- package/dist/checks/resilience/error-code-registration.d.ts +11 -0
- package/dist/checks/resilience/error-code-registration.d.ts.map +1 -0
- package/dist/checks/resilience/error-code-registration.js +88 -0
- package/dist/checks/resilience/error-code-registration.js.map +1 -0
- package/dist/checks/resilience/event-patterns.d.ts +21 -0
- package/dist/checks/resilience/event-patterns.d.ts.map +1 -0
- package/dist/checks/resilience/event-patterns.js +232 -0
- package/dist/checks/resilience/event-patterns.js.map +1 -0
- package/dist/checks/resilience/exit-code-correctness.d.ts +12 -0
- package/dist/checks/resilience/exit-code-correctness.d.ts.map +1 -0
- package/dist/checks/resilience/exit-code-correctness.js +107 -0
- package/dist/checks/resilience/exit-code-correctness.js.map +1 -0
- package/dist/checks/resilience/index.d.ts +18 -0
- package/dist/checks/resilience/index.d.ts.map +1 -0
- package/dist/checks/resilience/index.js +18 -0
- package/dist/checks/resilience/index.js.map +1 -0
- package/dist/checks/resilience/no-hardcoded-timeouts.d.ts +10 -0
- package/dist/checks/resilience/no-hardcoded-timeouts.d.ts.map +1 -0
- package/dist/checks/resilience/no-hardcoded-timeouts.js +291 -0
- package/dist/checks/resilience/no-hardcoded-timeouts.js.map +1 -0
- package/dist/checks/resilience/no-process-exit-in-finally.d.ts +11 -0
- package/dist/checks/resilience/no-process-exit-in-finally.d.ts.map +1 -0
- package/dist/checks/resilience/no-process-exit-in-finally.js +89 -0
- package/dist/checks/resilience/no-process-exit-in-finally.js.map +1 -0
- package/dist/checks/resilience/readline-cleanup.d.ts +11 -0
- package/dist/checks/resilience/readline-cleanup.d.ts.map +1 -0
- package/dist/checks/resilience/readline-cleanup.js +107 -0
- package/dist/checks/resilience/readline-cleanup.js.map +1 -0
- package/dist/checks/resilience/recovery-patterns.d.ts +25 -0
- package/dist/checks/resilience/recovery-patterns.d.ts.map +1 -0
- package/dist/checks/resilience/recovery-patterns.js +273 -0
- package/dist/checks/resilience/recovery-patterns.js.map +1 -0
- package/dist/checks/resilience/reentrancy-guard.d.ts +12 -0
- package/dist/checks/resilience/reentrancy-guard.d.ts.map +1 -0
- package/dist/checks/resilience/reentrancy-guard.js +86 -0
- package/dist/checks/resilience/reentrancy-guard.js.map +1 -0
- package/dist/checks/resilience/retry-config-validation.d.ts +13 -0
- package/dist/checks/resilience/retry-config-validation.d.ts.map +1 -0
- package/dist/checks/resilience/retry-config-validation.js +159 -0
- package/dist/checks/resilience/retry-config-validation.js.map +1 -0
- package/dist/checks/resilience/sentry/_helpers/sentry.d.ts +25 -0
- package/dist/checks/resilience/sentry/_helpers/sentry.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/_helpers/sentry.js +68 -0
- package/dist/checks/resilience/sentry/_helpers/sentry.js.map +1 -0
- package/dist/checks/resilience/sentry/index.d.ts +8 -0
- package/dist/checks/resilience/sentry/index.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/index.js +8 -0
- package/dist/checks/resilience/sentry/index.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-dsn-configured.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-dsn-configured.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-dsn-configured.js +55 -0
- package/dist/checks/resilience/sentry/sentry-dsn-configured.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-environment-set.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-environment-set.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-environment-set.js +51 -0
- package/dist/checks/resilience/sentry/sentry-environment-set.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-error-boundary.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-error-boundary.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-error-boundary.js +75 -0
- package/dist/checks/resilience/sentry/sentry-error-boundary.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-pii-scrubbing.d.ts +13 -0
- package/dist/checks/resilience/sentry/sentry-pii-scrubbing.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-pii-scrubbing.js +125 -0
- package/dist/checks/resilience/sentry/sentry-pii-scrubbing.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-release-set.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-release-set.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-release-set.js +51 -0
- package/dist/checks/resilience/sentry/sentry-release-set.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-sample-rate.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-sample-rate.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-sample-rate.js +78 -0
- package/dist/checks/resilience/sentry/sentry-sample-rate.js.map +1 -0
- package/dist/checks/resilience/sentry/sentry-source-maps.d.ts +12 -0
- package/dist/checks/resilience/sentry/sentry-source-maps.d.ts.map +1 -0
- package/dist/checks/resilience/sentry/sentry-source-maps.js +83 -0
- package/dist/checks/resilience/sentry/sentry-source-maps.js.map +1 -0
- package/dist/checks/resilience/service-patterns.d.ts +18 -0
- package/dist/checks/resilience/service-patterns.d.ts.map +1 -0
- package/dist/checks/resilience/service-patterns.js +230 -0
- package/dist/checks/resilience/service-patterns.js.map +1 -0
- package/dist/checks/resilience/timer-lifecycle.d.ts +10 -0
- package/dist/checks/resilience/timer-lifecycle.d.ts.map +1 -0
- package/dist/checks/resilience/timer-lifecycle.js +78 -0
- package/dist/checks/resilience/timer-lifecycle.js.map +1 -0
- package/dist/checks/resilience/transaction-patterns.d.ts +21 -0
- package/dist/checks/resilience/transaction-patterns.d.ts.map +1 -0
- package/dist/checks/resilience/transaction-patterns.js +258 -0
- package/dist/checks/resilience/transaction-patterns.js.map +1 -0
- package/dist/checks/security/__tests__/no-hardcoded-secrets.test.d.ts +9 -0
- package/dist/checks/security/__tests__/no-hardcoded-secrets.test.d.ts.map +1 -0
- package/dist/checks/security/__tests__/no-hardcoded-secrets.test.js +37 -0
- package/dist/checks/security/__tests__/no-hardcoded-secrets.test.js.map +1 -0
- package/dist/checks/security/__tests__/package-supply-chain-policy.test.d.ts +2 -0
- package/dist/checks/security/__tests__/package-supply-chain-policy.test.d.ts.map +1 -0
- package/dist/checks/security/__tests__/package-supply-chain-policy.test.js +128 -0
- package/dist/checks/security/__tests__/package-supply-chain-policy.test.js.map +1 -0
- package/dist/checks/security/api-key-rotation.d.ts +10 -0
- package/dist/checks/security/api-key-rotation.d.ts.map +1 -0
- package/dist/checks/security/api-key-rotation.js +186 -0
- package/dist/checks/security/api-key-rotation.js.map +1 -0
- package/dist/checks/security/auth-middleware-coverage.d.ts +11 -0
- package/dist/checks/security/auth-middleware-coverage.d.ts.map +1 -0
- package/dist/checks/security/auth-middleware-coverage.js +210 -0
- package/dist/checks/security/auth-middleware-coverage.js.map +1 -0
- package/dist/checks/security/auth-route-guard.d.ts +12 -0
- package/dist/checks/security/auth-route-guard.d.ts.map +1 -0
- package/dist/checks/security/auth-route-guard.js +70 -0
- package/dist/checks/security/auth-route-guard.js.map +1 -0
- package/dist/checks/security/cors-configuration.d.ts +11 -0
- package/dist/checks/security/cors-configuration.d.ts.map +1 -0
- package/dist/checks/security/cors-configuration.js +126 -0
- package/dist/checks/security/cors-configuration.js.map +1 -0
- package/dist/checks/security/csp-headers.d.ts +11 -0
- package/dist/checks/security/csp-headers.d.ts.map +1 -0
- package/dist/checks/security/csp-headers.js +192 -0
- package/dist/checks/security/csp-headers.js.map +1 -0
- package/dist/checks/security/dependency-vulnerability-audit.d.ts +15 -0
- package/dist/checks/security/dependency-vulnerability-audit.d.ts.map +1 -0
- package/dist/checks/security/dependency-vulnerability-audit.js +184 -0
- package/dist/checks/security/dependency-vulnerability-audit.js.map +1 -0
- package/dist/checks/security/env-secret-exposure.d.ts +11 -0
- package/dist/checks/security/env-secret-exposure.d.ts.map +1 -0
- package/dist/checks/security/env-secret-exposure.js +127 -0
- package/dist/checks/security/env-secret-exposure.js.map +1 -0
- package/dist/checks/security/hasura-production-config.d.ts +11 -0
- package/dist/checks/security/hasura-production-config.d.ts.map +1 -0
- package/dist/checks/security/hasura-production-config.js +122 -0
- package/dist/checks/security/hasura-production-config.js.map +1 -0
- package/dist/checks/security/index.d.ts +17 -0
- package/dist/checks/security/index.d.ts.map +1 -0
- package/dist/checks/security/index.js +17 -0
- package/dist/checks/security/index.js.map +1 -0
- package/dist/checks/security/jwt-validation.d.ts +11 -0
- package/dist/checks/security/jwt-validation.d.ts.map +1 -0
- package/dist/checks/security/jwt-validation.js +294 -0
- package/dist/checks/security/jwt-validation.js.map +1 -0
- package/dist/checks/security/no-eval.d.ts +16 -0
- package/dist/checks/security/no-eval.d.ts.map +1 -0
- package/dist/checks/security/no-eval.js +83 -0
- package/dist/checks/security/no-eval.js.map +1 -0
- package/dist/checks/security/no-hardcoded-secrets.d.ts +28 -0
- package/dist/checks/security/no-hardcoded-secrets.d.ts.map +1 -0
- package/dist/checks/security/no-hardcoded-secrets.js +209 -0
- package/dist/checks/security/no-hardcoded-secrets.js.map +1 -0
- package/dist/checks/security/package-supply-chain-policy.d.ts +12 -0
- package/dist/checks/security/package-supply-chain-policy.d.ts.map +1 -0
- package/dist/checks/security/package-supply-chain-policy.js +534 -0
- package/dist/checks/security/package-supply-chain-policy.js.map +1 -0
- package/dist/checks/security/rate-limit-coverage.d.ts +10 -0
- package/dist/checks/security/rate-limit-coverage.d.ts.map +1 -0
- package/dist/checks/security/rate-limit-coverage.js +143 -0
- package/dist/checks/security/rate-limit-coverage.js.map +1 -0
- package/dist/checks/security/semgrep-scan.d.ts +13 -0
- package/dist/checks/security/semgrep-scan.d.ts.map +1 -0
- package/dist/checks/security/semgrep-scan.js +86 -0
- package/dist/checks/security/semgrep-scan.js.map +1 -0
- package/dist/checks/security/use-centralized-crypto.d.ts +11 -0
- package/dist/checks/security/use-centralized-crypto.d.ts.map +1 -0
- package/dist/checks/security/use-centralized-crypto.js +129 -0
- package/dist/checks/security/use-centralized-crypto.js.map +1 -0
- package/dist/checks/security/webhook-signature-verification.d.ts +10 -0
- package/dist/checks/security/webhook-signature-verification.d.ts.map +1 -0
- package/dist/checks/security/webhook-signature-verification.js +183 -0
- package/dist/checks/security/webhook-signature-verification.js.map +1 -0
- package/dist/checks/testing/index.d.ts +6 -0
- package/dist/checks/testing/index.d.ts.map +1 -0
- package/dist/checks/testing/index.js +6 -0
- package/dist/checks/testing/index.js.map +1 -0
- package/dist/checks/testing/no-skipped-tests.d.ts +40 -0
- package/dist/checks/testing/no-skipped-tests.d.ts.map +1 -0
- package/dist/checks/testing/no-skipped-tests.js +174 -0
- package/dist/checks/testing/no-skipped-tests.js.map +1 -0
- package/dist/checks/testing/no-stub-tests.d.ts +11 -0
- package/dist/checks/testing/no-stub-tests.d.ts.map +1 -0
- package/dist/checks/testing/no-stub-tests.js +103 -0
- package/dist/checks/testing/no-stub-tests.js.map +1 -0
- package/dist/checks/testing/test-convention-consistency.d.ts +14 -0
- package/dist/checks/testing/test-convention-consistency.d.ts.map +1 -0
- package/dist/checks/testing/test-convention-consistency.js +93 -0
- package/dist/checks/testing/test-convention-consistency.js.map +1 -0
- package/dist/checks/testing/test-file-naming.d.ts +13 -0
- package/dist/checks/testing/test-file-naming.d.ts.map +1 -0
- package/dist/checks/testing/test-file-naming.js +218 -0
- package/dist/checks/testing/test-file-naming.js.map +1 -0
- package/dist/checks/testing/test-file-pairing.d.ts +13 -0
- package/dist/checks/testing/test-file-pairing.d.ts.map +1 -0
- package/dist/checks/testing/test-file-pairing.js +274 -0
- package/dist/checks/testing/test-file-pairing.js.map +1 -0
- package/dist/display/architecture.d.ts +9 -0
- package/dist/display/architecture.d.ts.map +1 -0
- package/dist/display/architecture.js +29 -0
- package/dist/display/architecture.js.map +1 -0
- package/dist/display/index.d.ts +20 -0
- package/dist/display/index.d.ts.map +1 -0
- package/dist/display/index.js +30 -0
- package/dist/display/index.js.map +1 -0
- package/dist/display/quality.d.ts +7 -0
- package/dist/display/quality.d.ts.map +1 -0
- package/dist/display/quality.js +34 -0
- package/dist/display/quality.js.map +1 -0
- package/dist/display/resilience.d.ts +7 -0
- package/dist/display/resilience.d.ts.map +1 -0
- package/dist/display/resilience.js +36 -0
- package/dist/display/resilience.js.map +1 -0
- package/dist/display/security-testing.d.ts +9 -0
- package/dist/display/security-testing.d.ts.map +1 -0
- package/dist/display/security-testing.js +31 -0
- package/dist/display/security-testing.js.map +1 -0
- package/dist/display/types.d.ts +6 -0
- package/dist/display/types.d.ts.map +1 -0
- package/dist/display/types.js +6 -0
- package/dist/display/types.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Cross-language skipped / focused / placeholder test detection.
|
|
3
|
+
*
|
|
4
|
+
* Detects disabled (`.skip`, `@Disabled`, `#[ignore]`, `t.Skip`),
|
|
5
|
+
* focused (`.only`, `fit(`, `fdescribe(`), and placeholder (`it.todo`)
|
|
6
|
+
* tests across JS/TS, Python, Go, Rust, and Java test files. Disabled or
|
|
7
|
+
* abandoned test work silently erodes coverage; a `.only` is the most
|
|
8
|
+
* dangerous of all because it silences every OTHER test in the suite.
|
|
9
|
+
*
|
|
10
|
+
* INVERSION: unlike most checks (which skip test files), this check ONLY
|
|
11
|
+
* applies to test files — `if (!isTestFile(filePath)) return []`.
|
|
12
|
+
*
|
|
13
|
+
* Uses the `strip-strings-and-comments` content filter so the idioms are
|
|
14
|
+
* matched as live CODE only, never as text inside a description string
|
|
15
|
+
* (`it('should skip empty input', ...)`) or a comment (`fit (checks/recipes)`
|
|
16
|
+
* in prose, or a commented-out `// it.skip(...)`). Both classes would
|
|
17
|
+
* otherwise false-fire — comments especially for `fit(` / `xit(`, which are
|
|
18
|
+
* also ordinary English words.
|
|
19
|
+
*
|
|
20
|
+
* Supersedes the former TS-only `no-focused-tests` check (its `.only` / `fit(`
|
|
21
|
+
* / `fdescribe(` detection is folded in here); the slug and id are retained
|
|
22
|
+
* so the dogfood baseline stays continuous.
|
|
23
|
+
*/
|
|
24
|
+
import { type CheckViolation } from '@opensip-cli/fitness';
|
|
25
|
+
/**
|
|
26
|
+
* Pure analysis function. Exported so unit tests can exercise the detection
|
|
27
|
+
* logic without standing up the full Check framework. `content` is expected
|
|
28
|
+
* to be the `strip-strings`-filtered source so that idiom-like words inside
|
|
29
|
+
* description string literals don't false-fire; `filePath` selects the
|
|
30
|
+
* language idiom set (the caller is responsible for the `isTestFile` gate).
|
|
31
|
+
*/
|
|
32
|
+
export declare function analyzeSkippedTests(content: string, filePath: string): CheckViolation[];
|
|
33
|
+
/**
|
|
34
|
+
* Check: testing/no-skipped-tests
|
|
35
|
+
*
|
|
36
|
+
* Detects skipped, focused, or placeholder tests across JS/TS, Python, Go,
|
|
37
|
+
* Rust, and Java. Test-files-only (the inverse of most checks).
|
|
38
|
+
*/
|
|
39
|
+
export declare const noSkippedTests: import("@opensip-cli/fitness").Check;
|
|
40
|
+
//# sourceMappingURL=no-skipped-tests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-skipped-tests.d.ts","sourceRoot":"","sources":["../../../src/checks/testing/no-skipped-tests.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAoGpF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAwBvF;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,sCA8BzB,CAAC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// @fitness-ignore-file no-skipped-tests -- this file's job is to detect skip/focus idioms; the patterns appear in regex and JSDoc by design
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Cross-language skipped / focused / placeholder test detection.
|
|
4
|
+
*
|
|
5
|
+
* Detects disabled (`.skip`, `@Disabled`, `#[ignore]`, `t.Skip`),
|
|
6
|
+
* focused (`.only`, `fit(`, `fdescribe(`), and placeholder (`it.todo`)
|
|
7
|
+
* tests across JS/TS, Python, Go, Rust, and Java test files. Disabled or
|
|
8
|
+
* abandoned test work silently erodes coverage; a `.only` is the most
|
|
9
|
+
* dangerous of all because it silences every OTHER test in the suite.
|
|
10
|
+
*
|
|
11
|
+
* INVERSION: unlike most checks (which skip test files), this check ONLY
|
|
12
|
+
* applies to test files — `if (!isTestFile(filePath)) return []`.
|
|
13
|
+
*
|
|
14
|
+
* Uses the `strip-strings-and-comments` content filter so the idioms are
|
|
15
|
+
* matched as live CODE only, never as text inside a description string
|
|
16
|
+
* (`it('should skip empty input', ...)`) or a comment (`fit (checks/recipes)`
|
|
17
|
+
* in prose, or a commented-out `// it.skip(...)`). Both classes would
|
|
18
|
+
* otherwise false-fire — comments especially for `fit(` / `xit(`, which are
|
|
19
|
+
* also ordinary English words.
|
|
20
|
+
*
|
|
21
|
+
* Supersedes the former TS-only `no-focused-tests` check (its `.only` / `fit(`
|
|
22
|
+
* / `fdescribe(` detection is folded in here); the slug and id are retained
|
|
23
|
+
* so the dogfood baseline stays continuous.
|
|
24
|
+
*/
|
|
25
|
+
import { defineCheck, isTestFile } from '@opensip-cli/fitness';
|
|
26
|
+
const SUGGESTION = 'Re-enable the test or remove it; track the reason in an issue. ' +
|
|
27
|
+
'`.only` must never ship — it silences the rest of the suite.';
|
|
28
|
+
const FOCUSED_SUGGESTION = 'A focused test disables EVERY OTHER test in the file. Remove the focus ' +
|
|
29
|
+
'(`.only` / `fit(` / `fdescribe(`) before committing — it must never ship.';
|
|
30
|
+
// JS/TS — vitest / jest / mocha / playwright. Method-call forms (`.skip(`,
|
|
31
|
+
// `.only(`, `.todo(`, `.concurrent.skip(`) plus the word-boundary call forms
|
|
32
|
+
// (`xit(`, `fit(`, ...).
|
|
33
|
+
const JS_IDIOMS = [
|
|
34
|
+
{
|
|
35
|
+
pattern: /\b(?:it|test|describe|context|suite|bench)(?:\.concurrent)?\.only\b/g,
|
|
36
|
+
label: '.only focused test',
|
|
37
|
+
focused: true,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
pattern: /\b(?:it|test|describe|context|suite|bench)(?:\.concurrent)?\.skip\b/g,
|
|
41
|
+
label: '.skip skipped test',
|
|
42
|
+
focused: false,
|
|
43
|
+
},
|
|
44
|
+
{ pattern: /\b(?:it|test)\.todo\b/g, label: '.todo placeholder test', focused: false },
|
|
45
|
+
{ pattern: /\bfit\s*\(/g, label: 'fit() focused test', focused: true },
|
|
46
|
+
{ pattern: /\bfdescribe\s*\(/g, label: 'fdescribe() focused suite', focused: true },
|
|
47
|
+
{ pattern: /\bxit\s*\(/g, label: 'xit() skipped test', focused: false },
|
|
48
|
+
{ pattern: /\bxtest\s*\(/g, label: 'xtest() skipped test', focused: false },
|
|
49
|
+
{ pattern: /\bxdescribe\s*\(/g, label: 'xdescribe() skipped suite', focused: false },
|
|
50
|
+
];
|
|
51
|
+
// Python — pytest / unittest.
|
|
52
|
+
const PY_IDIOMS = [
|
|
53
|
+
{ pattern: /@pytest\.mark\.skipif\b/g, label: '@pytest.mark.skipif', focused: false },
|
|
54
|
+
{ pattern: /@pytest\.mark\.skip\b/g, label: '@pytest.mark.skip', focused: false },
|
|
55
|
+
{ pattern: /@unittest\.expectedFailure\b/g, label: '@unittest.expectedFailure', focused: false },
|
|
56
|
+
{ pattern: /@unittest\.skip\b/g, label: '@unittest.skip', focused: false },
|
|
57
|
+
{ pattern: /\bself\.skipTest\s*\(/g, label: 'self.skipTest()', focused: false },
|
|
58
|
+
{ pattern: /\bpytest\.skip\s*\(/g, label: 'pytest.skip()', focused: false },
|
|
59
|
+
];
|
|
60
|
+
// Go — testing.T skip APIs.
|
|
61
|
+
const GO_IDIOMS = [
|
|
62
|
+
{ pattern: /\bt\.SkipNow\s*\(/g, label: 't.SkipNow()', focused: false },
|
|
63
|
+
{ pattern: /\bt\.Skipf\s*\(/g, label: 't.Skipf()', focused: false },
|
|
64
|
+
{ pattern: /\bt\.Skip\s*\(/g, label: 't.Skip()', focused: false },
|
|
65
|
+
];
|
|
66
|
+
// Rust — the #[ignore] test attribute.
|
|
67
|
+
const RUST_IDIOMS = [
|
|
68
|
+
{ pattern: /#\[\s*ignore\b/g, label: '#[ignore] test attribute', focused: false },
|
|
69
|
+
];
|
|
70
|
+
// Java — JUnit 5 (@Disabled) / JUnit 4 (@Ignore).
|
|
71
|
+
const JAVA_IDIOMS = [
|
|
72
|
+
{ pattern: /@Disabled\b/g, label: '@Disabled', focused: false },
|
|
73
|
+
{ pattern: /@Ignore\b/g, label: '@Ignore', focused: false },
|
|
74
|
+
];
|
|
75
|
+
/** Map a file extension (no leading dot) to its idiom set. */
|
|
76
|
+
function idiomsForExtension(filePath) {
|
|
77
|
+
const ext = filePath.slice(filePath.lastIndexOf('.') + 1).toLowerCase();
|
|
78
|
+
switch (ext) {
|
|
79
|
+
case 'ts':
|
|
80
|
+
case 'tsx':
|
|
81
|
+
case 'js':
|
|
82
|
+
case 'jsx':
|
|
83
|
+
case 'mjs':
|
|
84
|
+
case 'cjs': {
|
|
85
|
+
return JS_IDIOMS;
|
|
86
|
+
}
|
|
87
|
+
case 'py': {
|
|
88
|
+
return PY_IDIOMS;
|
|
89
|
+
}
|
|
90
|
+
case 'go': {
|
|
91
|
+
return GO_IDIOMS;
|
|
92
|
+
}
|
|
93
|
+
case 'rs': {
|
|
94
|
+
return RUST_IDIOMS;
|
|
95
|
+
}
|
|
96
|
+
case 'java': {
|
|
97
|
+
return JAVA_IDIOMS;
|
|
98
|
+
}
|
|
99
|
+
default: {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Pure analysis function. Exported so unit tests can exercise the detection
|
|
106
|
+
* logic without standing up the full Check framework. `content` is expected
|
|
107
|
+
* to be the `strip-strings`-filtered source so that idiom-like words inside
|
|
108
|
+
* description string literals don't false-fire; `filePath` selects the
|
|
109
|
+
* language idiom set (the caller is responsible for the `isTestFile` gate).
|
|
110
|
+
*/
|
|
111
|
+
export function analyzeSkippedTests(content, filePath) {
|
|
112
|
+
const idioms = idiomsForExtension(filePath);
|
|
113
|
+
if (idioms.length === 0)
|
|
114
|
+
return [];
|
|
115
|
+
const violations = [];
|
|
116
|
+
const lines = content.split('\n');
|
|
117
|
+
for (const [i, line] of lines.entries()) {
|
|
118
|
+
for (const idiom of idioms) {
|
|
119
|
+
idiom.pattern.lastIndex = 0;
|
|
120
|
+
if (idiom.pattern.test(line)) {
|
|
121
|
+
violations.push({
|
|
122
|
+
message: idiom.focused
|
|
123
|
+
? `Focused test detected (${idiom.label}) — it disables every other test in the file`
|
|
124
|
+
: `Skipped/placeholder test detected (${idiom.label})`,
|
|
125
|
+
// Soft shipped default; repos wanting a hard gate set `failOnWarnings`
|
|
126
|
+
// (this repo does — see opensip-cli.config.yml).
|
|
127
|
+
severity: 'warning',
|
|
128
|
+
line: i + 1,
|
|
129
|
+
suggestion: idiom.focused ? FOCUSED_SUGGESTION : SUGGESTION,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return violations;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Check: testing/no-skipped-tests
|
|
138
|
+
*
|
|
139
|
+
* Detects skipped, focused, or placeholder tests across JS/TS, Python, Go,
|
|
140
|
+
* Rust, and Java. Test-files-only (the inverse of most checks).
|
|
141
|
+
*/
|
|
142
|
+
export const noSkippedTests = defineCheck({
|
|
143
|
+
id: '6d58546e-7335-42da-94f3-abb015e3a4c0',
|
|
144
|
+
slug: 'no-skipped-tests',
|
|
145
|
+
scope: { languages: [], concerns: ['testing'] },
|
|
146
|
+
description: 'Tests must never ship skipped, focused (.only), or placeholder',
|
|
147
|
+
longDescription: `**Purpose:** Surfaces disabled, focused, and placeholder tests so they are re-enabled or removed rather than left to silently erode coverage. A committed \`.only\` is the most dangerous case — it silences every other test in the file and gives a false green CI signal.
|
|
148
|
+
|
|
149
|
+
**Detects (test files only, by extension):**
|
|
150
|
+
- **JS/TS** — \`.only\` / \`.skip\` / \`.todo\` (incl. \`.concurrent.*\`) on \`it\`/\`test\`/\`describe\`/\`context\`/\`suite\`/\`bench\`, plus \`fit(\`, \`fdescribe(\`, \`xit(\`, \`xtest(\`, \`xdescribe(\`
|
|
151
|
+
- **Python** — \`@pytest.mark.skip\`/\`skipif\`, \`@unittest.skip\`/\`expectedFailure\`, \`self.skipTest(\`, \`pytest.skip(\`
|
|
152
|
+
- **Go** — \`t.Skip(\`, \`t.Skipf(\`, \`t.SkipNow(\`
|
|
153
|
+
- **Rust** — the \`#[ignore]\` test attribute
|
|
154
|
+
- **Java** — \`@Disabled\` (JUnit 5), \`@Ignore\` (JUnit 4)
|
|
155
|
+
|
|
156
|
+
**Why it matters:** Skipped tests accumulate as dead code and silently reduce effective coverage; focused tests cause CI to run only the focused test while the rest of the suite is silently skipped.
|
|
157
|
+
|
|
158
|
+
**Scope:** Cross-language best practice. Uses the \`strip-strings-and-comments\` filter so idiom-like words inside description strings (e.g. \`it('should skip empty input')\`) and comments (e.g. \`fit(\` in prose, or a commented-out \`// it.skip(...)\`) do not false-fire. Targets test files only.`,
|
|
159
|
+
tags: ['quality', 'testing', 'ci-blocking'],
|
|
160
|
+
fileTypes: ['ts', 'tsx', 'js', 'jsx', 'mjs', 'cjs', 'py', 'go', 'java', 'rs'],
|
|
161
|
+
// Match the skip idioms as live CODE only — never inside a description
|
|
162
|
+
// string (`it('should skip empty input', ...)`) or a comment (`fit(` / `xit(`
|
|
163
|
+
// are ordinary English words that recur in prose and commented-out tests).
|
|
164
|
+
contentFilter: 'strip-strings-and-comments',
|
|
165
|
+
confidence: 'high',
|
|
166
|
+
analyze: (content, filePath) => {
|
|
167
|
+
// INVERSION: this hygiene rule applies ONLY to test files. A skip idiom
|
|
168
|
+
// in production code is not this check's concern.
|
|
169
|
+
if (!isTestFile(filePath))
|
|
170
|
+
return [];
|
|
171
|
+
return analyzeSkippedTests(content, filePath);
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
//# sourceMappingURL=no-skipped-tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-skipped-tests.js","sourceRoot":"","sources":["../../../src/checks/testing/no-skipped-tests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview No stub tests check
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Check: testing/no-stub-tests
|
|
6
|
+
*
|
|
7
|
+
* Detects stub tests with empty bodies, TODO-only bodies,
|
|
8
|
+
* or trivial always-passing assertions that inflate coverage metrics.
|
|
9
|
+
*/
|
|
10
|
+
export declare const noStubTests: import("@opensip-cli/fitness").Check;
|
|
11
|
+
//# sourceMappingURL=no-stub-tests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-stub-tests.d.ts","sourceRoot":"","sources":["../../../src/checks/testing/no-stub-tests.ts"],"names":[],"mappings":"AAGA;;GAEG;AAmFH;;;;;GAKG;AACH,eAAO,MAAM,WAAW,sCAsBtB,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/* eslint-disable sonarjs/fixme-tag -- this file detects TODO/FIXME markers in test bodies; the words appear in directives, JSDoc, and regex literals by design */
|
|
2
|
+
// @fitness-ignore-file no-stub-tests -- longDescription contains backtick-escaped stub test examples for documentation
|
|
3
|
+
// @fitness-ignore-file no-todo-comments -- this file detects TODO/FIXME markers in test bodies; the words appear in regex and JSDoc by design
|
|
4
|
+
/**
|
|
5
|
+
* @fileoverview No stub tests check
|
|
6
|
+
*/
|
|
7
|
+
import { defineCheck } from '@opensip-cli/fitness';
|
|
8
|
+
/**
|
|
9
|
+
* Patterns for empty test bodies on a single line
|
|
10
|
+
*/
|
|
11
|
+
const EMPTY_BODY_PATTERNS = [
|
|
12
|
+
// it('...', () => {}) or it('...', () => { })
|
|
13
|
+
/(?:it|test)\s*\(\s*['"`].*['"`]\s*,\s*(?:async\s*)?\(\)\s*=>\s*\{\s*\}\s*\)/,
|
|
14
|
+
// it('...', function() {}) or it('...', function() { })
|
|
15
|
+
/(?:it|test)\s*\(\s*['"`].*['"`]\s*,\s*(?:async\s*)?function\s*\(\)\s*\{\s*\}\s*\)/,
|
|
16
|
+
];
|
|
17
|
+
/**
|
|
18
|
+
* Pattern for TODO/FIXME comments inside test bodies on same line
|
|
19
|
+
*/
|
|
20
|
+
const TODO_IN_TEST_BODY = /(?:it|test)\s*\(\s*['"`].*['"`]\s*,\s*(?:async\s*)?\(\)\s*=>\s*\{\s*\/[/*]\s*(?:TODO|FIXME|HACK|STUB)/i;
|
|
21
|
+
/**
|
|
22
|
+
* Pattern for trivial always-passing assertions
|
|
23
|
+
*/
|
|
24
|
+
const TRIVIAL_ASSERTION = /expect\s*\(\s*true\s*\)\s*\.toBe\s*\(\s*true\s*\)/;
|
|
25
|
+
/**
|
|
26
|
+
* Analyze a test file for stub tests
|
|
27
|
+
*/
|
|
28
|
+
function analyzeTestFile(content, _filePath) {
|
|
29
|
+
const violations = [];
|
|
30
|
+
const lines = content.split('\n');
|
|
31
|
+
for (const [i, line_] of lines.entries()) {
|
|
32
|
+
const line = line_ ?? '';
|
|
33
|
+
const trimmed = line.trim();
|
|
34
|
+
// Skip actual comments (not inside test bodies)
|
|
35
|
+
if (trimmed.startsWith('//') || trimmed.startsWith('*'))
|
|
36
|
+
continue;
|
|
37
|
+
// Check for empty test bodies
|
|
38
|
+
for (const pattern of EMPTY_BODY_PATTERNS) {
|
|
39
|
+
if (pattern.test(line)) {
|
|
40
|
+
violations.push({
|
|
41
|
+
line: i + 1,
|
|
42
|
+
message: 'Empty test body — this test always passes without asserting anything',
|
|
43
|
+
severity: 'error',
|
|
44
|
+
suggestion: 'Add meaningful assertions or use `it.todo()` if the test is planned but not yet implemented',
|
|
45
|
+
type: 'empty-test-body',
|
|
46
|
+
match: trimmed.slice(0, 120),
|
|
47
|
+
});
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Check for TODO comments inside test bodies
|
|
52
|
+
if (TODO_IN_TEST_BODY.test(line)) {
|
|
53
|
+
violations.push({
|
|
54
|
+
line: i + 1,
|
|
55
|
+
message: 'Test body contains only a TODO comment — this is a stub that inflates coverage',
|
|
56
|
+
severity: 'error',
|
|
57
|
+
suggestion: 'Implement the test or convert to `it.todo()` to track as unimplemented',
|
|
58
|
+
type: 'todo-stub-test',
|
|
59
|
+
match: trimmed.slice(0, 120),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Check for trivial always-passing assertions
|
|
63
|
+
if (TRIVIAL_ASSERTION.test(line)) {
|
|
64
|
+
violations.push({
|
|
65
|
+
line: i + 1,
|
|
66
|
+
message: 'Trivial `expect(true).toBe(true)` assertion — this test always passes',
|
|
67
|
+
severity: 'warning',
|
|
68
|
+
suggestion: 'Replace with a meaningful assertion that validates actual behavior',
|
|
69
|
+
type: 'trivial-assertion',
|
|
70
|
+
match: trimmed.slice(0, 120),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return violations;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Check: testing/no-stub-tests
|
|
78
|
+
*
|
|
79
|
+
* Detects stub tests with empty bodies, TODO-only bodies,
|
|
80
|
+
* or trivial always-passing assertions that inflate coverage metrics.
|
|
81
|
+
*/
|
|
82
|
+
export const noStubTests = defineCheck({
|
|
83
|
+
id: 'fc8032e4-9fcf-4a1f-bc00-e080e58ae1c5',
|
|
84
|
+
slug: 'no-stub-tests',
|
|
85
|
+
scope: { languages: ['typescript', 'tsx'], concerns: ['testing'] },
|
|
86
|
+
contentFilter: 'strip-strings',
|
|
87
|
+
confidence: 'medium',
|
|
88
|
+
description: 'Detects stub tests with empty bodies, TODO-only bodies, or trivial always-passing assertions',
|
|
89
|
+
longDescription: `**Purpose:** Detects tests that exist but don't actually test anything, inflating coverage metrics and masking gaps.
|
|
90
|
+
|
|
91
|
+
**Detects:**
|
|
92
|
+
- Empty test bodies: \`it('should X', () => {})\`
|
|
93
|
+
- TODO-only test bodies: \`it('should X', () => { /* TODO */ })\`
|
|
94
|
+
- Trivial assertions: \`expect(true).toBe(true)\`
|
|
95
|
+
|
|
96
|
+
**Why it matters:** Stub tests give false confidence in test coverage. They pass without asserting anything, hiding missing test coverage.
|
|
97
|
+
|
|
98
|
+
**Scope:** Test files only. Analyzes each file individually via regex.`,
|
|
99
|
+
tags: ['testing', 'quality', 'coverage'],
|
|
100
|
+
fileTypes: ['ts', 'tsx'],
|
|
101
|
+
analyze: analyzeTestFile,
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=no-stub-tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-stub-tests.js","sourceRoot":"","sources":["../../../src/checks/testing/no-stub-tests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Test convention consistency check
|
|
3
|
+
*
|
|
4
|
+
* Detects mixed .test and .spec naming conventions across the codebase.
|
|
5
|
+
* When one convention is dominant (>95%), flags the minority files for renaming.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check: testing/test-convention-consistency
|
|
9
|
+
*
|
|
10
|
+
* Detects mixed .test and .spec naming conventions. When one is dominant (>95%),
|
|
11
|
+
* flags minority files for renaming to match the dominant convention.
|
|
12
|
+
*/
|
|
13
|
+
export declare const testConventionConsistency: import("@opensip-cli/fitness").Check;
|
|
14
|
+
//# sourceMappingURL=test-convention-consistency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-convention-consistency.d.ts","sourceRoot":"","sources":["../../../src/checks/testing/test-convention-consistency.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAmBH;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,sCA2EpC,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// @fitness-ignore-file batch-operation-limits -- iterates bounded collections (config entries, registry items, or small analysis results)
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Test convention consistency check
|
|
4
|
+
*
|
|
5
|
+
* Detects mixed .test and .spec naming conventions across the codebase.
|
|
6
|
+
* When one convention is dominant (>95%), flags the minority files for renaming.
|
|
7
|
+
*/
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { defineCheck } from '@opensip-cli/fitness';
|
|
10
|
+
/** Threshold for convention dominance (95%) */
|
|
11
|
+
const DOMINANCE_THRESHOLD = 0.95;
|
|
12
|
+
/**
|
|
13
|
+
* Determine which convention a file path uses.
|
|
14
|
+
*/
|
|
15
|
+
function getConvention(filePath) {
|
|
16
|
+
const basename = path.basename(filePath);
|
|
17
|
+
return basename.includes('.spec.') ? 'spec' : 'test';
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Check: testing/test-convention-consistency
|
|
21
|
+
*
|
|
22
|
+
* Detects mixed .test and .spec naming conventions. When one is dominant (>95%),
|
|
23
|
+
* flags minority files for renaming to match the dominant convention.
|
|
24
|
+
*/
|
|
25
|
+
export const testConventionConsistency = defineCheck({
|
|
26
|
+
id: 'e5a7d9f1-6b0c-4a4d-c8e3-1f5b9d7a0c6e',
|
|
27
|
+
slug: 'test-convention-consistency',
|
|
28
|
+
scope: { languages: ['typescript', 'tsx'], concerns: ['testing'] },
|
|
29
|
+
confidence: 'medium',
|
|
30
|
+
description: 'Detects mixed .test and .spec naming conventions across the codebase',
|
|
31
|
+
longDescription: `**Purpose:** Detects mixed \`.test\` and \`.spec\` naming conventions and flags minority files when one convention is dominant (>95%).
|
|
32
|
+
|
|
33
|
+
**Detects:**
|
|
34
|
+
- Files using the minority test naming convention
|
|
35
|
+
- Only flags when one convention is clearly dominant (>95% of all test files)
|
|
36
|
+
- If neither convention is dominant, no violations are reported
|
|
37
|
+
|
|
38
|
+
**Why it matters:** Consistent test naming conventions improve developer experience and make it easier to configure test runners, CI pipelines, and glob patterns consistently.
|
|
39
|
+
|
|
40
|
+
**Scope:** Cross-file analysis via \`analyzeAll\`. General best practice.`,
|
|
41
|
+
tags: ['testing', 'consistency'],
|
|
42
|
+
fileTypes: ['ts', 'tsx'],
|
|
43
|
+
// @fitness-ignore-next-line concurrency-safety -- async keyword required by analyzeAll interface contract; synchronous analysis implementation
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/require-await -- AnalyzeAllCheckConfig requires Promise<CheckViolation[]>; this implementation is synchronous
|
|
45
|
+
async analyzeAll(files) {
|
|
46
|
+
const testFiles = [];
|
|
47
|
+
const specFiles = [];
|
|
48
|
+
// Categorize files by convention
|
|
49
|
+
for (const filePath of files.paths) {
|
|
50
|
+
const convention = getConvention(filePath);
|
|
51
|
+
if (convention === 'spec') {
|
|
52
|
+
specFiles.push(filePath);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
testFiles.push(filePath);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const total = testFiles.length + specFiles.length;
|
|
59
|
+
if (total === 0)
|
|
60
|
+
return [];
|
|
61
|
+
// Determine if one convention is dominant
|
|
62
|
+
const testRatio = testFiles.length / total;
|
|
63
|
+
const specRatio = specFiles.length / total;
|
|
64
|
+
let dominant = null;
|
|
65
|
+
let minorityFiles = [];
|
|
66
|
+
if (testRatio >= DOMINANCE_THRESHOLD) {
|
|
67
|
+
dominant = 'test';
|
|
68
|
+
minorityFiles = specFiles;
|
|
69
|
+
}
|
|
70
|
+
else if (specRatio >= DOMINANCE_THRESHOLD) {
|
|
71
|
+
dominant = 'spec';
|
|
72
|
+
minorityFiles = testFiles;
|
|
73
|
+
}
|
|
74
|
+
// No dominant convention — no violations
|
|
75
|
+
if (!dominant)
|
|
76
|
+
return [];
|
|
77
|
+
const violations = [];
|
|
78
|
+
const minorityConvention = dominant === 'test' ? 'spec' : 'test';
|
|
79
|
+
for (const filePath of minorityFiles) {
|
|
80
|
+
const basename = path.basename(filePath);
|
|
81
|
+
const renamed = basename.replace(`.${minorityConvention}.`, `.${dominant}.`);
|
|
82
|
+
violations.push({
|
|
83
|
+
filePath,
|
|
84
|
+
line: 1,
|
|
85
|
+
message: `Test file uses .${minorityConvention} convention but codebase uses .${dominant} (${Math.round((dominant === 'test' ? testRatio : specRatio) * 100)}% dominant)`,
|
|
86
|
+
severity: 'warning',
|
|
87
|
+
suggestion: `Rename to match dominant convention: ${renamed}`,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return violations;
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=test-convention-consistency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-convention-consistency.js","sourceRoot":"","sources":["../../../src/checks/testing/test-convention-consistency.ts"],"names":[],"mappings":"AAAA,0IAA0I;AAC1I;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,WAAW,EAA0C,MAAM,sBAAsB,CAAC;AAE3F,+CAA+C;AAC/C,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAIjC;;GAEG;AACH,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC;IACnD,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,6BAA6B;IACnC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;IAElE,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,sEAAsE;IACnF,eAAe,EAAE;;;;;;;;;0EASuD;IACxE,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;IAChC,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;IAExB,+IAA+I;IAC/I,4JAA4J;IAC5J,KAAK,CAAC,UAAU,CAAC,KAAmB;QAClC,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,iCAAiC;QACjC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;gBAC1B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAClD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE3B,0CAA0C;QAC1C,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;QAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;QAE3C,IAAI,QAAQ,GAAsB,IAAI,CAAC;QACvC,IAAI,aAAa,GAAa,EAAE,CAAC;QAEjC,IAAI,SAAS,IAAI,mBAAmB,EAAE,CAAC;YACrC,QAAQ,GAAG,MAAM,CAAC;YAClB,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC;aAAM,IAAI,SAAS,IAAI,mBAAmB,EAAE,CAAC;YAC5C,QAAQ,GAAG,MAAM,CAAC;YAClB,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,MAAM,kBAAkB,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAEjE,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,kBAAkB,GAAG,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC;YAE7E,UAAU,CAAC,IAAI,CAAC;gBACd,QAAQ;gBACR,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,mBAAmB,kBAAkB,kCAAkC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,aAAa;gBACzK,QAAQ,EAAE,SAAS;gBACnB,UAAU,EAAE,wCAAwC,OAAO,EAAE;aAC9D,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Validates test file naming conventions
|
|
3
|
+
*
|
|
4
|
+
* Test files should follow the pattern *.test.ts or *.spec.ts
|
|
5
|
+
* and be located in __tests__ directories.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check: testing/test-file-naming
|
|
9
|
+
*
|
|
10
|
+
* Validates test file naming conventions follow *.test.ts or *.spec.ts patterns.
|
|
11
|
+
*/
|
|
12
|
+
export declare const testFileNaming: import("@opensip-cli/fitness").Check;
|
|
13
|
+
//# sourceMappingURL=test-file-naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-file-naming.d.ts","sourceRoot":"","sources":["../../../src/checks/testing/test-file-naming.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6MH;;;;GAIG;AACH,eAAO,MAAM,cAAc,sCAuBzB,CAAC"}
|