@opencodereview/core 1.9.1
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/dist/ai/anthropic-provider.d.ts +41 -0
- package/dist/ai/anthropic-provider.d.ts.map +1 -0
- package/dist/ai/anthropic-provider.js +139 -0
- package/dist/ai/anthropic-provider.js.map +1 -0
- package/dist/ai/index.d.ts +39 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +41 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/ollama-provider.d.ts +46 -0
- package/dist/ai/ollama-provider.d.ts.map +1 -0
- package/dist/ai/ollama-provider.js +149 -0
- package/dist/ai/ollama-provider.js.map +1 -0
- package/dist/ai/openai-provider.d.ts +44 -0
- package/dist/ai/openai-provider.d.ts.map +1 -0
- package/dist/ai/openai-provider.js +137 -0
- package/dist/ai/openai-provider.js.map +1 -0
- package/dist/ai/orchestrator.d.ts +60 -0
- package/dist/ai/orchestrator.d.ts.map +1 -0
- package/dist/ai/orchestrator.js +188 -0
- package/dist/ai/orchestrator.js.map +1 -0
- package/dist/ai/prompts.d.ts +27 -0
- package/dist/ai/prompts.d.ts.map +1 -0
- package/dist/ai/prompts.js +112 -0
- package/dist/ai/prompts.js.map +1 -0
- package/dist/ai/types.d.ts +75 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +10 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/ai/v4/embedding/index.d.ts +10 -0
- package/dist/ai/v4/embedding/index.d.ts.map +1 -0
- package/dist/ai/v4/embedding/index.js +10 -0
- package/dist/ai/v4/embedding/index.js.map +1 -0
- package/dist/ai/v4/embedding/local.d.ts +68 -0
- package/dist/ai/v4/embedding/local.d.ts.map +1 -0
- package/dist/ai/v4/embedding/local.js +167 -0
- package/dist/ai/v4/embedding/local.js.map +1 -0
- package/dist/ai/v4/embedding/ollama.d.ts +58 -0
- package/dist/ai/v4/embedding/ollama.d.ts.map +1 -0
- package/dist/ai/v4/embedding/ollama.js +101 -0
- package/dist/ai/v4/embedding/ollama.js.map +1 -0
- package/dist/ai/v4/embedding/openai.d.ts +36 -0
- package/dist/ai/v4/embedding/openai.d.ts.map +1 -0
- package/dist/ai/v4/embedding/openai.js +76 -0
- package/dist/ai/v4/embedding/openai.js.map +1 -0
- package/dist/ai/v4/embedding/similarity.d.ts +36 -0
- package/dist/ai/v4/embedding/similarity.d.ts.map +1 -0
- package/dist/ai/v4/embedding/similarity.js +60 -0
- package/dist/ai/v4/embedding/similarity.js.map +1 -0
- package/dist/ai/v4/index.d.ts +51 -0
- package/dist/ai/v4/index.d.ts.map +1 -0
- package/dist/ai/v4/index.js +54 -0
- package/dist/ai/v4/index.js.map +1 -0
- package/dist/ai/v4/llm/anthropic.d.ts +38 -0
- package/dist/ai/v4/llm/anthropic.d.ts.map +1 -0
- package/dist/ai/v4/llm/anthropic.js +86 -0
- package/dist/ai/v4/llm/anthropic.js.map +1 -0
- package/dist/ai/v4/llm/index.d.ts +9 -0
- package/dist/ai/v4/llm/index.d.ts.map +1 -0
- package/dist/ai/v4/llm/index.js +9 -0
- package/dist/ai/v4/llm/index.js.map +1 -0
- package/dist/ai/v4/llm/ollama.d.ts +39 -0
- package/dist/ai/v4/llm/ollama.d.ts.map +1 -0
- package/dist/ai/v4/llm/ollama.js +95 -0
- package/dist/ai/v4/llm/ollama.js.map +1 -0
- package/dist/ai/v4/llm/openai.d.ts +38 -0
- package/dist/ai/v4/llm/openai.d.ts.map +1 -0
- package/dist/ai/v4/llm/openai.js +88 -0
- package/dist/ai/v4/llm/openai.js.map +1 -0
- package/dist/ai/v4/patterns/defect-patterns.d.ts +57 -0
- package/dist/ai/v4/patterns/defect-patterns.d.ts.map +1 -0
- package/dist/ai/v4/patterns/defect-patterns.js +331 -0
- package/dist/ai/v4/patterns/defect-patterns.js.map +1 -0
- package/dist/ai/v4/patterns/index.d.ts +8 -0
- package/dist/ai/v4/patterns/index.d.ts.map +1 -0
- package/dist/ai/v4/patterns/index.js +7 -0
- package/dist/ai/v4/patterns/index.js.map +1 -0
- package/dist/ai/v4/pipeline.d.ts +74 -0
- package/dist/ai/v4/pipeline.d.ts.map +1 -0
- package/dist/ai/v4/pipeline.js +381 -0
- package/dist/ai/v4/pipeline.js.map +1 -0
- package/dist/ai/v4/sla.d.ts +62 -0
- package/dist/ai/v4/sla.d.ts.map +1 -0
- package/dist/ai/v4/sla.js +136 -0
- package/dist/ai/v4/sla.js.map +1 -0
- package/dist/ai/v4/types.d.ts +117 -0
- package/dist/ai/v4/types.d.ts.map +1 -0
- package/dist/ai/v4/types.js +16 -0
- package/dist/ai/v4/types.js.map +1 -0
- package/dist/ai-healer/prompt-builder.d.ts +33 -0
- package/dist/ai-healer/prompt-builder.d.ts.map +1 -0
- package/dist/ai-healer/prompt-builder.js +89 -0
- package/dist/ai-healer/prompt-builder.js.map +1 -0
- package/dist/config/defaults.d.ts +14 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +57 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +8 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +33 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +245 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +58 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/v4-config.d.ts +77 -0
- package/dist/config/v4-config.d.ts.map +1 -0
- package/dist/config/v4-config.js +336 -0
- package/dist/config/v4-config.js.map +1 -0
- package/dist/detectors/ai-detector.d.ts +38 -0
- package/dist/detectors/ai-detector.d.ts.map +1 -0
- package/dist/detectors/ai-detector.js +62 -0
- package/dist/detectors/ai-detector.js.map +1 -0
- package/dist/detectors/context-break.d.ts +57 -0
- package/dist/detectors/context-break.d.ts.map +1 -0
- package/dist/detectors/context-break.js +199 -0
- package/dist/detectors/context-break.js.map +1 -0
- package/dist/detectors/deep-hallucination.d.ts +42 -0
- package/dist/detectors/deep-hallucination.d.ts.map +1 -0
- package/dist/detectors/deep-hallucination.js +297 -0
- package/dist/detectors/deep-hallucination.js.map +1 -0
- package/dist/detectors/duplication.d.ts +61 -0
- package/dist/detectors/duplication.d.ts.map +1 -0
- package/dist/detectors/duplication.js +204 -0
- package/dist/detectors/duplication.js.map +1 -0
- package/dist/detectors/hallucination.d.ts +80 -0
- package/dist/detectors/hallucination.d.ts.map +1 -0
- package/dist/detectors/hallucination.js +350 -0
- package/dist/detectors/hallucination.js.map +1 -0
- package/dist/detectors/index.d.ts +35 -0
- package/dist/detectors/index.d.ts.map +1 -0
- package/dist/detectors/index.js +33 -0
- package/dist/detectors/index.js.map +1 -0
- package/dist/detectors/logic-gap.d.ts +58 -0
- package/dist/detectors/logic-gap.d.ts.map +1 -0
- package/dist/detectors/logic-gap.js +284 -0
- package/dist/detectors/logic-gap.js.map +1 -0
- package/dist/detectors/over-engineering.d.ts +44 -0
- package/dist/detectors/over-engineering.d.ts.map +1 -0
- package/dist/detectors/over-engineering.js +257 -0
- package/dist/detectors/over-engineering.js.map +1 -0
- package/dist/detectors/security-pattern.d.ts +43 -0
- package/dist/detectors/security-pattern.d.ts.map +1 -0
- package/dist/detectors/security-pattern.js +235 -0
- package/dist/detectors/security-pattern.js.map +1 -0
- package/dist/detectors/stale-api.d.ts +44 -0
- package/dist/detectors/stale-api.d.ts.map +1 -0
- package/dist/detectors/stale-api.js +160 -0
- package/dist/detectors/stale-api.js.map +1 -0
- package/dist/detectors/type-safety.d.ts +41 -0
- package/dist/detectors/type-safety.d.ts.map +1 -0
- package/dist/detectors/type-safety.js +306 -0
- package/dist/detectors/type-safety.js.map +1 -0
- package/dist/detectors/v4/context-coherence.d.ts +67 -0
- package/dist/detectors/v4/context-coherence.d.ts.map +1 -0
- package/dist/detectors/v4/context-coherence.js +319 -0
- package/dist/detectors/v4/context-coherence.js.map +1 -0
- package/dist/detectors/v4/hallucinated-import.d.ts +52 -0
- package/dist/detectors/v4/hallucinated-import.d.ts.map +1 -0
- package/dist/detectors/v4/hallucinated-import.js +206 -0
- package/dist/detectors/v4/hallucinated-import.js.map +1 -0
- package/dist/detectors/v4/index.d.ts +28 -0
- package/dist/detectors/v4/index.d.ts.map +1 -0
- package/dist/detectors/v4/index.js +40 -0
- package/dist/detectors/v4/index.js.map +1 -0
- package/dist/detectors/v4/over-engineering.d.ts +69 -0
- package/dist/detectors/v4/over-engineering.d.ts.map +1 -0
- package/dist/detectors/v4/over-engineering.js +234 -0
- package/dist/detectors/v4/over-engineering.js.map +1 -0
- package/dist/detectors/v4/security-pattern.d.ts +46 -0
- package/dist/detectors/v4/security-pattern.d.ts.map +1 -0
- package/dist/detectors/v4/security-pattern.js +233 -0
- package/dist/detectors/v4/security-pattern.js.map +1 -0
- package/dist/detectors/v4/stale-api.d.ts +59 -0
- package/dist/detectors/v4/stale-api.d.ts.map +1 -0
- package/dist/detectors/v4/stale-api.js +470 -0
- package/dist/detectors/v4/stale-api.js.map +1 -0
- package/dist/detectors/v4/types.d.ts +74 -0
- package/dist/detectors/v4/types.d.ts.map +1 -0
- package/dist/detectors/v4/types.js +10 -0
- package/dist/detectors/v4/types.js.map +1 -0
- package/dist/diff/filter.d.ts +35 -0
- package/dist/diff/filter.d.ts.map +1 -0
- package/dist/diff/filter.js +65 -0
- package/dist/diff/filter.js.map +1 -0
- package/dist/diff/index.d.ts +9 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +8 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/parser.d.ts +61 -0
- package/dist/diff/parser.d.ts.map +1 -0
- package/dist/diff/parser.js +203 -0
- package/dist/diff/parser.js.map +1 -0
- package/dist/i18n/en.d.ts +18 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +83 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +13 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +14 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/provider.d.ts +54 -0
- package/dist/i18n/provider.d.ts.map +1 -0
- package/dist/i18n/provider.js +88 -0
- package/dist/i18n/provider.js.map +1 -0
- package/dist/i18n/types.d.ts +37 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +10 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/i18n/zh.d.ts +14 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +83 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/index.d.ts +113 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +106 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/index.d.ts +10 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +9 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/types.d.ts +126 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js +33 -0
- package/dist/ir/types.js.map +1 -0
- package/dist/languages/go/index.d.ts +7 -0
- package/dist/languages/go/index.d.ts.map +1 -0
- package/dist/languages/go/index.js +7 -0
- package/dist/languages/go/index.js.map +1 -0
- package/dist/languages/go/parser.d.ts +89 -0
- package/dist/languages/go/parser.d.ts.map +1 -0
- package/dist/languages/go/parser.js +509 -0
- package/dist/languages/go/parser.js.map +1 -0
- package/dist/languages/index.d.ts +13 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +14 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/java/index.d.ts +7 -0
- package/dist/languages/java/index.d.ts.map +1 -0
- package/dist/languages/java/index.js +7 -0
- package/dist/languages/java/index.js.map +1 -0
- package/dist/languages/java/parser.d.ts +82 -0
- package/dist/languages/java/parser.d.ts.map +1 -0
- package/dist/languages/java/parser.js +492 -0
- package/dist/languages/java/parser.js.map +1 -0
- package/dist/languages/kotlin/index.d.ts +7 -0
- package/dist/languages/kotlin/index.d.ts.map +1 -0
- package/dist/languages/kotlin/index.js +7 -0
- package/dist/languages/kotlin/index.js.map +1 -0
- package/dist/languages/kotlin/parser.d.ts +84 -0
- package/dist/languages/kotlin/parser.d.ts.map +1 -0
- package/dist/languages/kotlin/parser.js +507 -0
- package/dist/languages/kotlin/parser.js.map +1 -0
- package/dist/languages/python/index.d.ts +7 -0
- package/dist/languages/python/index.d.ts.map +1 -0
- package/dist/languages/python/index.js +7 -0
- package/dist/languages/python/index.js.map +1 -0
- package/dist/languages/python/parser.d.ts +91 -0
- package/dist/languages/python/parser.d.ts.map +1 -0
- package/dist/languages/python/parser.js +375 -0
- package/dist/languages/python/parser.js.map +1 -0
- package/dist/languages/registry.d.ts +81 -0
- package/dist/languages/registry.d.ts.map +1 -0
- package/dist/languages/registry.js +150 -0
- package/dist/languages/registry.js.map +1 -0
- package/dist/languages/types.d.ts +137 -0
- package/dist/languages/types.d.ts.map +1 -0
- package/dist/languages/types.js +10 -0
- package/dist/languages/types.js.map +1 -0
- package/dist/languages/typescript/index.d.ts +7 -0
- package/dist/languages/typescript/index.d.ts.map +1 -0
- package/dist/languages/typescript/index.js +7 -0
- package/dist/languages/typescript/index.js.map +1 -0
- package/dist/languages/typescript/parser.d.ts +51 -0
- package/dist/languages/typescript/parser.d.ts.map +1 -0
- package/dist/languages/typescript/parser.js +286 -0
- package/dist/languages/typescript/parser.js.map +1 -0
- package/dist/license/generator.d.ts +43 -0
- package/dist/license/generator.d.ts.map +1 -0
- package/dist/license/generator.js +72 -0
- package/dist/license/generator.js.map +1 -0
- package/dist/license/index.d.ts +11 -0
- package/dist/license/index.d.ts.map +1 -0
- package/dist/license/index.js +12 -0
- package/dist/license/index.js.map +1 -0
- package/dist/license/types.d.ts +85 -0
- package/dist/license/types.d.ts.map +1 -0
- package/dist/license/types.js +10 -0
- package/dist/license/types.js.map +1 -0
- package/dist/license/validator.d.ts +77 -0
- package/dist/license/validator.d.ts.map +1 -0
- package/dist/license/validator.js +275 -0
- package/dist/license/validator.js.map +1 -0
- package/dist/parser/extractor.d.ts +31 -0
- package/dist/parser/extractor.d.ts.map +1 -0
- package/dist/parser/extractor.js +10 -0
- package/dist/parser/extractor.js.map +1 -0
- package/dist/parser/extractors/go.d.ts +21 -0
- package/dist/parser/extractors/go.d.ts.map +1 -0
- package/dist/parser/extractors/go.js +569 -0
- package/dist/parser/extractors/go.js.map +1 -0
- package/dist/parser/extractors/index.d.ts +13 -0
- package/dist/parser/extractors/index.d.ts.map +1 -0
- package/dist/parser/extractors/index.js +13 -0
- package/dist/parser/extractors/index.js.map +1 -0
- package/dist/parser/extractors/java.d.ts +24 -0
- package/dist/parser/extractors/java.d.ts.map +1 -0
- package/dist/parser/extractors/java.js +611 -0
- package/dist/parser/extractors/java.js.map +1 -0
- package/dist/parser/extractors/kotlin.d.ts +25 -0
- package/dist/parser/extractors/kotlin.d.ts.map +1 -0
- package/dist/parser/extractors/kotlin.js +665 -0
- package/dist/parser/extractors/kotlin.js.map +1 -0
- package/dist/parser/extractors/python.d.ts +21 -0
- package/dist/parser/extractors/python.d.ts.map +1 -0
- package/dist/parser/extractors/python.js +514 -0
- package/dist/parser/extractors/python.js.map +1 -0
- package/dist/parser/extractors/typescript.d.ts +23 -0
- package/dist/parser/extractors/typescript.d.ts.map +1 -0
- package/dist/parser/extractors/typescript.js +664 -0
- package/dist/parser/extractors/typescript.js.map +1 -0
- package/dist/parser/index.d.ts +15 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +14 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/manager.d.ts +50 -0
- package/dist/parser/manager.d.ts.map +1 -0
- package/dist/parser/manager.js +159 -0
- package/dist/parser/manager.js.map +1 -0
- package/dist/registry/builtins/go-builtins.d.ts +13 -0
- package/dist/registry/builtins/go-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/go-builtins.js +63 -0
- package/dist/registry/builtins/go-builtins.js.map +1 -0
- package/dist/registry/builtins/java-builtins.d.ts +10 -0
- package/dist/registry/builtins/java-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/java-builtins.js +59 -0
- package/dist/registry/builtins/java-builtins.js.map +1 -0
- package/dist/registry/builtins/kotlin-builtins.d.ts +10 -0
- package/dist/registry/builtins/kotlin-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/kotlin-builtins.js +38 -0
- package/dist/registry/builtins/kotlin-builtins.js.map +1 -0
- package/dist/registry/builtins/node-builtins.d.ts +10 -0
- package/dist/registry/builtins/node-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/node-builtins.js +36 -0
- package/dist/registry/builtins/node-builtins.js.map +1 -0
- package/dist/registry/builtins/python-builtins.d.ts +10 -0
- package/dist/registry/builtins/python-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/python-builtins.js +43 -0
- package/dist/registry/builtins/python-builtins.js.map +1 -0
- package/dist/registry/cache.d.ts +53 -0
- package/dist/registry/cache.d.ts.map +1 -0
- package/dist/registry/cache.js +147 -0
- package/dist/registry/cache.js.map +1 -0
- package/dist/registry/go-registry.d.ts +52 -0
- package/dist/registry/go-registry.d.ts.map +1 -0
- package/dist/registry/go-registry.js +148 -0
- package/dist/registry/go-registry.js.map +1 -0
- package/dist/registry/index.d.ts +18 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +21 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/maven-registry.d.ts +57 -0
- package/dist/registry/maven-registry.d.ts.map +1 -0
- package/dist/registry/maven-registry.js +155 -0
- package/dist/registry/maven-registry.js.map +1 -0
- package/dist/registry/npm-registry.d.ts +40 -0
- package/dist/registry/npm-registry.d.ts.map +1 -0
- package/dist/registry/npm-registry.js +155 -0
- package/dist/registry/npm-registry.js.map +1 -0
- package/dist/registry/pypi-registry.d.ts +49 -0
- package/dist/registry/pypi-registry.d.ts.map +1 -0
- package/dist/registry/pypi-registry.js +175 -0
- package/dist/registry/pypi-registry.js.map +1 -0
- package/dist/registry/registry-manager.d.ts +45 -0
- package/dist/registry/registry-manager.d.ts.map +1 -0
- package/dist/registry/registry-manager.js +107 -0
- package/dist/registry/registry-manager.js.map +1 -0
- package/dist/registry/types.d.ts +83 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +12 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/reporter/html-reporter.d.ts +20 -0
- package/dist/reporter/html-reporter.d.ts.map +1 -0
- package/dist/reporter/html-reporter.js +612 -0
- package/dist/reporter/html-reporter.js.map +1 -0
- package/dist/reporter/index.d.ts +28 -0
- package/dist/reporter/index.d.ts.map +1 -0
- package/dist/reporter/index.js +48 -0
- package/dist/reporter/index.js.map +1 -0
- package/dist/reporter/markdown-reporter.d.ts +16 -0
- package/dist/reporter/markdown-reporter.d.ts.map +1 -0
- package/dist/reporter/markdown-reporter.js +182 -0
- package/dist/reporter/markdown-reporter.js.map +1 -0
- package/dist/reporter/sarif-reporter.d.ts +67 -0
- package/dist/reporter/sarif-reporter.d.ts.map +1 -0
- package/dist/reporter/sarif-reporter.js +73 -0
- package/dist/reporter/sarif-reporter.js.map +1 -0
- package/dist/reporter/terminal-reporter.d.ts +14 -0
- package/dist/reporter/terminal-reporter.d.ts.map +1 -0
- package/dist/reporter/terminal-reporter.js +126 -0
- package/dist/reporter/terminal-reporter.js.map +1 -0
- package/dist/reporter/types.d.ts +43 -0
- package/dist/reporter/types.d.ts.map +1 -0
- package/dist/reporter/types.js +10 -0
- package/dist/reporter/types.js.map +1 -0
- package/dist/reporter/v4-html.d.ts +24 -0
- package/dist/reporter/v4-html.d.ts.map +1 -0
- package/dist/reporter/v4-html.js +359 -0
- package/dist/reporter/v4-html.js.map +1 -0
- package/dist/reporter/v4-terminal.d.ts +55 -0
- package/dist/reporter/v4-terminal.d.ts.map +1 -0
- package/dist/reporter/v4-terminal.js +199 -0
- package/dist/reporter/v4-terminal.js.map +1 -0
- package/dist/scanner/index.d.ts +9 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +9 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/v4-scanner.d.ts +162 -0
- package/dist/scanner/v4-scanner.d.ts.map +1 -0
- package/dist/scanner/v4-scanner.js +327 -0
- package/dist/scanner/v4-scanner.js.map +1 -0
- package/dist/scorer/report.d.ts +52 -0
- package/dist/scorer/report.d.ts.map +1 -0
- package/dist/scorer/report.js +347 -0
- package/dist/scorer/report.js.map +1 -0
- package/dist/scorer/scoring-engine.d.ts +170 -0
- package/dist/scorer/scoring-engine.d.ts.map +1 -0
- package/dist/scorer/scoring-engine.js +308 -0
- package/dist/scorer/scoring-engine.js.map +1 -0
- package/dist/scorer/v4-adapter.d.ts +87 -0
- package/dist/scorer/v4-adapter.d.ts.map +1 -0
- package/dist/scorer/v4-adapter.js +145 -0
- package/dist/scorer/v4-adapter.js.map +1 -0
- package/dist/sla/index.d.ts +7 -0
- package/dist/sla/index.d.ts.map +1 -0
- package/dist/sla/index.js +6 -0
- package/dist/sla/index.js.map +1 -0
- package/dist/sla/tracker.d.ts +70 -0
- package/dist/sla/tracker.d.ts.map +1 -0
- package/dist/sla/tracker.js +151 -0
- package/dist/sla/tracker.js.map +1 -0
- package/dist/sla/types.d.ts +67 -0
- package/dist/sla/types.d.ts.map +1 -0
- package/dist/sla/types.js +42 -0
- package/dist/sla/types.js.map +1 -0
- package/dist/types.d.ts +172 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +69 -0
- package/dist/types.js.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Language Adapter
|
|
3
|
+
*
|
|
4
|
+
* Regex-based parser for Python source code. No native AST dependencies needed —
|
|
5
|
+
* Python's indentation-based syntax is straightforward enough for regex extraction.
|
|
6
|
+
*
|
|
7
|
+
* Supports:
|
|
8
|
+
* - Import extraction (import, from...import, relative imports)
|
|
9
|
+
* - Function/method call extraction
|
|
10
|
+
* - Complexity metrics (cyclomatic, cognitive, nesting via indentation)
|
|
11
|
+
* - Deprecated API detection (via deprecated-apis-python.json)
|
|
12
|
+
* - Package verification (builtin + common third-party whitelists)
|
|
13
|
+
*
|
|
14
|
+
* @since 0.3.0
|
|
15
|
+
*/
|
|
16
|
+
import type { SupportedLanguage } from '../../types.js';
|
|
17
|
+
import type { LanguageAdapter, ASTNode, ImportInfo, CallInfo, PackageVerifyResult, DeprecatedInfo, ComplexityMetrics } from '../types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Python standard library modules (3.10+).
|
|
20
|
+
* At least 65 modules covering the most commonly used parts of stdlib.
|
|
21
|
+
*/
|
|
22
|
+
export declare const PYTHON_BUILTIN_MODULES: Set<string>;
|
|
23
|
+
/**
|
|
24
|
+
* Well-known Python third-party packages from PyPI.
|
|
25
|
+
* At least 55 packages covering data science, web, testing, tooling, etc.
|
|
26
|
+
*/
|
|
27
|
+
export declare const PYTHON_COMMON_PACKAGES: Set<string>;
|
|
28
|
+
/**
|
|
29
|
+
* PythonAdapter — LanguageAdapter implementation for Python.
|
|
30
|
+
*
|
|
31
|
+
* Covers: .py, .pyi
|
|
32
|
+
*
|
|
33
|
+
* Uses regex-based parsing instead of a native AST parser.
|
|
34
|
+
* Python's syntax (indentation-based nesting, simple import syntax)
|
|
35
|
+
* is well-suited for regex-based extraction.
|
|
36
|
+
*/
|
|
37
|
+
export declare class PythonAdapter implements LanguageAdapter {
|
|
38
|
+
readonly id: SupportedLanguage;
|
|
39
|
+
readonly extensions: string[];
|
|
40
|
+
/**
|
|
41
|
+
* Parse Python source code.
|
|
42
|
+
* Returns a lightweight AST-like structure with lines and source,
|
|
43
|
+
* sufficient for regex-based detection.
|
|
44
|
+
*/
|
|
45
|
+
parse(source: string, _filePath: string): Promise<ASTNode>;
|
|
46
|
+
/**
|
|
47
|
+
* Extract import statements from Python source.
|
|
48
|
+
*
|
|
49
|
+
* Matches:
|
|
50
|
+
* - import os
|
|
51
|
+
* - import os.path
|
|
52
|
+
* - import os, sys
|
|
53
|
+
* - from os import path
|
|
54
|
+
* - from os.path import exists, join
|
|
55
|
+
* - from . import relative
|
|
56
|
+
* - from ..parent import something
|
|
57
|
+
* - from __future__ import annotations
|
|
58
|
+
*/
|
|
59
|
+
extractImports(source: string, _ast?: ASTNode): ImportInfo[];
|
|
60
|
+
/**
|
|
61
|
+
* Extract function/method calls from Python source.
|
|
62
|
+
*
|
|
63
|
+
* Matches patterns like:
|
|
64
|
+
* - func()
|
|
65
|
+
* - obj.method()
|
|
66
|
+
* - module.submodule.func()
|
|
67
|
+
* - Class()
|
|
68
|
+
*/
|
|
69
|
+
extractCalls(source: string, _ast?: ASTNode): CallInfo[];
|
|
70
|
+
/**
|
|
71
|
+
* Verify if a Python package exists.
|
|
72
|
+
*
|
|
73
|
+
* Phase 2 implementation: checks against builtin modules and
|
|
74
|
+
* common third-party package whitelists.
|
|
75
|
+
* Full PyPI verification will be added in a later phase.
|
|
76
|
+
*/
|
|
77
|
+
verifyPackage(name: string): Promise<PackageVerifyResult>;
|
|
78
|
+
/**
|
|
79
|
+
* Check if an API is deprecated.
|
|
80
|
+
* Searches the deprecated-apis-python.json database.
|
|
81
|
+
*/
|
|
82
|
+
checkDeprecated(api: string): DeprecatedInfo | null;
|
|
83
|
+
/**
|
|
84
|
+
* Compute complexity metrics for Python source code.
|
|
85
|
+
*
|
|
86
|
+
* Uses indentation-based nesting detection (Python's natural structure)
|
|
87
|
+
* and regex matching for decision points.
|
|
88
|
+
*/
|
|
89
|
+
computeComplexity(source: string, _ast?: ASTNode): ComplexityMetrics;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/languages/python/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,UAAU,EACV,QAAQ,EACR,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAIrB;;;GAGG;AACH,eAAO,MAAM,sBAAsB,aAkCjC,CAAC;AAIH;;;GAGG;AACH,eAAO,MAAM,sBAAsB,aAgCjC,CAAC;AA2BH;;;;;;;;GAQG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAY;IAC1C,QAAQ,CAAC,UAAU,WAAmB;IAEtC;;;;OAIG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQhE;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE;IA+E5D;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE;IAiDxD;;;;;;OAMG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0B/D;;;OAGG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAenD;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,iBAAiB;CA6DrE"}
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Language Adapter
|
|
3
|
+
*
|
|
4
|
+
* Regex-based parser for Python source code. No native AST dependencies needed —
|
|
5
|
+
* Python's indentation-based syntax is straightforward enough for regex extraction.
|
|
6
|
+
*
|
|
7
|
+
* Supports:
|
|
8
|
+
* - Import extraction (import, from...import, relative imports)
|
|
9
|
+
* - Function/method call extraction
|
|
10
|
+
* - Complexity metrics (cyclomatic, cognitive, nesting via indentation)
|
|
11
|
+
* - Deprecated API detection (via deprecated-apis-python.json)
|
|
12
|
+
* - Package verification (builtin + common third-party whitelists)
|
|
13
|
+
*
|
|
14
|
+
* @since 0.3.0
|
|
15
|
+
*/
|
|
16
|
+
import { createRequire } from 'node:module';
|
|
17
|
+
// ─── Python Built-in Modules ───
|
|
18
|
+
/**
|
|
19
|
+
* Python standard library modules (3.10+).
|
|
20
|
+
* At least 65 modules covering the most commonly used parts of stdlib.
|
|
21
|
+
*/
|
|
22
|
+
export const PYTHON_BUILTIN_MODULES = new Set([
|
|
23
|
+
// Core
|
|
24
|
+
'os', 'sys', 're', 'json', 'math', 'random', 'datetime', 'time',
|
|
25
|
+
'pathlib', 'typing', 'collections', 'functools', 'itertools', 'io',
|
|
26
|
+
// System & subprocess
|
|
27
|
+
'subprocess', 'shutil', 'tempfile', 'logging', 'unittest', 'argparse',
|
|
28
|
+
// Crypto & encoding
|
|
29
|
+
'hashlib', 'hmac', 'secrets', 'base64',
|
|
30
|
+
// Network & web
|
|
31
|
+
'urllib', 'http', 'socket', 'ssl', 'email', 'smtplib',
|
|
32
|
+
// Data formats
|
|
33
|
+
'csv', 'sqlite3', 'xml', 'html', 'configparser',
|
|
34
|
+
// OOP & patterns
|
|
35
|
+
'abc', 'asyncio', 'concurrent', 'multiprocessing', 'threading', 'queue',
|
|
36
|
+
// Binary & serialization
|
|
37
|
+
'struct', 'pickle', 'copy', 'pprint', 'textwrap',
|
|
38
|
+
// Enums & data
|
|
39
|
+
'enum', 'dataclasses', 'contextlib', 'warnings', 'traceback',
|
|
40
|
+
// Introspection
|
|
41
|
+
'inspect', 'dis', 'ast', 'token', 'tokenize', 'importlib', 'pkgutil',
|
|
42
|
+
// Archive & compression
|
|
43
|
+
'zipfile', 'tarfile', 'gzip', 'bz2', 'lzma', 'zipimport',
|
|
44
|
+
// OS-level
|
|
45
|
+
'signal', 'ctypes', 'platform',
|
|
46
|
+
// Additional stdlib
|
|
47
|
+
'string', 'decimal', 'fractions', 'statistics', 'operator',
|
|
48
|
+
'array', 'bisect', 'heapq', 'weakref', 'types',
|
|
49
|
+
'glob', 'fnmatch', 'linecache', 'shelve', 'dbm',
|
|
50
|
+
'binascii', 'codecs', 'unicodedata',
|
|
51
|
+
'mmap', 'select', 'selectors',
|
|
52
|
+
'atexit', 'sched', 'gettext', 'locale',
|
|
53
|
+
'os.path', 'posixpath', 'ntpath',
|
|
54
|
+
'pdb', 'profile', 'cProfile', 'timeit',
|
|
55
|
+
'doctest', 'builtins', '__future__',
|
|
56
|
+
]);
|
|
57
|
+
// ─── Common Third-Party Packages ───
|
|
58
|
+
/**
|
|
59
|
+
* Well-known Python third-party packages from PyPI.
|
|
60
|
+
* At least 55 packages covering data science, web, testing, tooling, etc.
|
|
61
|
+
*/
|
|
62
|
+
export const PYTHON_COMMON_PACKAGES = new Set([
|
|
63
|
+
// Data science & ML
|
|
64
|
+
'numpy', 'pandas', 'scipy', 'matplotlib', 'seaborn',
|
|
65
|
+
'sklearn', 'scikit-learn', 'tensorflow', 'torch', 'keras',
|
|
66
|
+
'xgboost', 'lightgbm', 'transformers',
|
|
67
|
+
// Web frameworks
|
|
68
|
+
'flask', 'django', 'fastapi', 'uvicorn', 'gunicorn',
|
|
69
|
+
'starlette', 'sanic',
|
|
70
|
+
// Task queues & caching
|
|
71
|
+
'celery', 'redis', 'kombu',
|
|
72
|
+
// Database
|
|
73
|
+
'sqlalchemy', 'alembic', 'pydantic', 'psycopg2', 'pymongo',
|
|
74
|
+
// HTTP clients
|
|
75
|
+
'requests', 'httpx', 'aiohttp', 'urllib3',
|
|
76
|
+
// Scraping & automation
|
|
77
|
+
'beautifulsoup4', 'bs4', 'scrapy', 'selenium', 'playwright',
|
|
78
|
+
// Image processing
|
|
79
|
+
'pillow', 'PIL', 'opencv-python', 'cv2',
|
|
80
|
+
// Cloud
|
|
81
|
+
'boto3', 'botocore', 'google-cloud-storage',
|
|
82
|
+
// Testing
|
|
83
|
+
'pytest', 'tox', 'coverage', 'mock', 'hypothesis',
|
|
84
|
+
// Code quality
|
|
85
|
+
'black', 'isort', 'flake8', 'pylint', 'mypy', 'ruff', 'pre-commit',
|
|
86
|
+
// Packaging
|
|
87
|
+
'poetry', 'pipenv', 'setuptools', 'wheel', 'twine', 'pip',
|
|
88
|
+
// CLI
|
|
89
|
+
'click', 'typer', 'rich', 'tqdm',
|
|
90
|
+
// Config & serialization
|
|
91
|
+
'pyyaml', 'yaml', 'toml', 'tomli', 'python-dotenv', 'dotenv',
|
|
92
|
+
// Security
|
|
93
|
+
'cryptography', 'paramiko', 'jwt', 'pyjwt',
|
|
94
|
+
]);
|
|
95
|
+
/** Load deprecated APIs from JSON data file */
|
|
96
|
+
function loadDeprecatedAPIs() {
|
|
97
|
+
try {
|
|
98
|
+
const require = createRequire(import.meta.url);
|
|
99
|
+
return require('../../data/deprecated-apis-python.json');
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const PYTHON_DEPRECATED_DB = loadDeprecatedAPIs();
|
|
106
|
+
// ─── Python Adapter ───
|
|
107
|
+
/**
|
|
108
|
+
* PythonAdapter — LanguageAdapter implementation for Python.
|
|
109
|
+
*
|
|
110
|
+
* Covers: .py, .pyi
|
|
111
|
+
*
|
|
112
|
+
* Uses regex-based parsing instead of a native AST parser.
|
|
113
|
+
* Python's syntax (indentation-based nesting, simple import syntax)
|
|
114
|
+
* is well-suited for regex-based extraction.
|
|
115
|
+
*/
|
|
116
|
+
export class PythonAdapter {
|
|
117
|
+
id = 'python';
|
|
118
|
+
extensions = ['.py', '.pyi'];
|
|
119
|
+
/**
|
|
120
|
+
* Parse Python source code.
|
|
121
|
+
* Returns a lightweight AST-like structure with lines and source,
|
|
122
|
+
* sufficient for regex-based detection.
|
|
123
|
+
*/
|
|
124
|
+
async parse(source, _filePath) {
|
|
125
|
+
return {
|
|
126
|
+
type: 'PythonModule',
|
|
127
|
+
lines: source.split('\n'),
|
|
128
|
+
source,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Extract import statements from Python source.
|
|
133
|
+
*
|
|
134
|
+
* Matches:
|
|
135
|
+
* - import os
|
|
136
|
+
* - import os.path
|
|
137
|
+
* - import os, sys
|
|
138
|
+
* - from os import path
|
|
139
|
+
* - from os.path import exists, join
|
|
140
|
+
* - from . import relative
|
|
141
|
+
* - from ..parent import something
|
|
142
|
+
* - from __future__ import annotations
|
|
143
|
+
*/
|
|
144
|
+
extractImports(source, _ast) {
|
|
145
|
+
const lines = source.split('\n');
|
|
146
|
+
const imports = [];
|
|
147
|
+
for (let i = 0; i < lines.length; i++) {
|
|
148
|
+
const line = lines[i];
|
|
149
|
+
const trimmed = line.trim();
|
|
150
|
+
const lineNum = i + 1;
|
|
151
|
+
// Skip comments and strings
|
|
152
|
+
if (trimmed.startsWith('#'))
|
|
153
|
+
continue;
|
|
154
|
+
// from xxx import yyy, zzz
|
|
155
|
+
const fromMatch = trimmed.match(/^from\s+(\.{0,3}[\w.]*)\s+import\s+(.+?)(?:\s*#.*)?$/);
|
|
156
|
+
if (fromMatch) {
|
|
157
|
+
const modulePath = fromMatch[1];
|
|
158
|
+
const importedNames = fromMatch[2];
|
|
159
|
+
const isRelative = modulePath.startsWith('.');
|
|
160
|
+
// Parse imported bindings: "a, b as c, d"
|
|
161
|
+
const bindings = [];
|
|
162
|
+
// Handle star import
|
|
163
|
+
if (importedNames.trim() === '*') {
|
|
164
|
+
bindings.push('*');
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// Handle parenthesized imports (single-line): from x import (a, b, c)
|
|
168
|
+
const cleaned = importedNames.replace(/[()]/g, '');
|
|
169
|
+
for (const part of cleaned.split(',')) {
|
|
170
|
+
const name = part.trim().split(/\s+as\s+/).pop()?.trim();
|
|
171
|
+
if (name && name !== '\\')
|
|
172
|
+
bindings.push(name);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Determine base module name
|
|
176
|
+
const baseModule = isRelative
|
|
177
|
+
? modulePath
|
|
178
|
+
: modulePath.split('.')[0];
|
|
179
|
+
imports.push({
|
|
180
|
+
module: modulePath,
|
|
181
|
+
bindings,
|
|
182
|
+
line: lineNum,
|
|
183
|
+
isRelative,
|
|
184
|
+
isBuiltin: !isRelative && PYTHON_BUILTIN_MODULES.has(baseModule),
|
|
185
|
+
});
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
// import xxx, yyy.zzz
|
|
189
|
+
const importMatch = trimmed.match(/^import\s+(.+?)(?:\s*#.*)?$/);
|
|
190
|
+
if (importMatch) {
|
|
191
|
+
const moduleList = importMatch[1];
|
|
192
|
+
// Split comma-separated imports: import os, sys, json
|
|
193
|
+
for (const part of moduleList.split(',')) {
|
|
194
|
+
const asMatch = part.trim().match(/^([\w.]+)(?:\s+as\s+(\w+))?$/);
|
|
195
|
+
if (asMatch) {
|
|
196
|
+
const fullPath = asMatch[1];
|
|
197
|
+
const alias = asMatch[2] || fullPath.split('.').pop();
|
|
198
|
+
const baseModule = fullPath.split('.')[0];
|
|
199
|
+
imports.push({
|
|
200
|
+
module: fullPath,
|
|
201
|
+
bindings: [alias],
|
|
202
|
+
line: lineNum,
|
|
203
|
+
isRelative: false,
|
|
204
|
+
isBuiltin: PYTHON_BUILTIN_MODULES.has(baseModule),
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return imports;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Extract function/method calls from Python source.
|
|
214
|
+
*
|
|
215
|
+
* Matches patterns like:
|
|
216
|
+
* - func()
|
|
217
|
+
* - obj.method()
|
|
218
|
+
* - module.submodule.func()
|
|
219
|
+
* - Class()
|
|
220
|
+
*/
|
|
221
|
+
extractCalls(source, _ast) {
|
|
222
|
+
const lines = source.split('\n');
|
|
223
|
+
const calls = [];
|
|
224
|
+
// Python keywords that look like function calls but aren't
|
|
225
|
+
const pythonKeywords = new Set([
|
|
226
|
+
'if', 'elif', 'else', 'for', 'while', 'with', 'try', 'except',
|
|
227
|
+
'finally', 'def', 'class', 'return', 'yield', 'raise', 'import',
|
|
228
|
+
'from', 'as', 'pass', 'break', 'continue', 'del', 'assert',
|
|
229
|
+
'lambda', 'global', 'nonlocal', 'async', 'await', 'and', 'or',
|
|
230
|
+
'not', 'in', 'is', 'True', 'False', 'None',
|
|
231
|
+
]);
|
|
232
|
+
for (let i = 0; i < lines.length; i++) {
|
|
233
|
+
const line = lines[i];
|
|
234
|
+
const trimmed = line.trimStart();
|
|
235
|
+
const lineNum = i + 1;
|
|
236
|
+
// Skip comments
|
|
237
|
+
if (trimmed.startsWith('#'))
|
|
238
|
+
continue;
|
|
239
|
+
// Skip string-only lines (rough heuristic)
|
|
240
|
+
if (/^(['"]){3}/.test(trimmed) || /^(['"])/.test(trimmed))
|
|
241
|
+
continue;
|
|
242
|
+
// Match calls: word.word.word( or word(
|
|
243
|
+
const callPattern = /(\w+(?:\.\w+)*)\s*\(/g;
|
|
244
|
+
let match;
|
|
245
|
+
while ((match = callPattern.exec(line)) !== null) {
|
|
246
|
+
const callee = match[1];
|
|
247
|
+
const firstName = callee.split('.')[0];
|
|
248
|
+
// Skip keywords
|
|
249
|
+
if (pythonKeywords.has(firstName))
|
|
250
|
+
continue;
|
|
251
|
+
// Skip decorators (they're on lines starting with @)
|
|
252
|
+
if (trimmed.startsWith('@') && match.index <= line.indexOf(callee))
|
|
253
|
+
continue;
|
|
254
|
+
const isMethodCall = callee.includes('.');
|
|
255
|
+
calls.push({
|
|
256
|
+
name: callee,
|
|
257
|
+
line: lineNum,
|
|
258
|
+
column: match.index + 1,
|
|
259
|
+
isMethodCall,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return calls;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Verify if a Python package exists.
|
|
267
|
+
*
|
|
268
|
+
* Phase 2 implementation: checks against builtin modules and
|
|
269
|
+
* common third-party package whitelists.
|
|
270
|
+
* Full PyPI verification will be added in a later phase.
|
|
271
|
+
*/
|
|
272
|
+
async verifyPackage(name) {
|
|
273
|
+
const baseModule = name.split('.')[0];
|
|
274
|
+
if (PYTHON_BUILTIN_MODULES.has(baseModule) || PYTHON_BUILTIN_MODULES.has(name)) {
|
|
275
|
+
return {
|
|
276
|
+
name,
|
|
277
|
+
exists: true,
|
|
278
|
+
checkedAt: Date.now(),
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
if (PYTHON_COMMON_PACKAGES.has(baseModule) || PYTHON_COMMON_PACKAGES.has(name)) {
|
|
282
|
+
return {
|
|
283
|
+
name,
|
|
284
|
+
exists: true,
|
|
285
|
+
checkedAt: Date.now(),
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
name,
|
|
290
|
+
exists: false,
|
|
291
|
+
checkedAt: Date.now(),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Check if an API is deprecated.
|
|
296
|
+
* Searches the deprecated-apis-python.json database.
|
|
297
|
+
*/
|
|
298
|
+
checkDeprecated(api) {
|
|
299
|
+
for (const entry of PYTHON_DEPRECATED_DB) {
|
|
300
|
+
const regex = new RegExp(entry.pattern);
|
|
301
|
+
if (regex.test(api)) {
|
|
302
|
+
return {
|
|
303
|
+
api: entry.api,
|
|
304
|
+
reason: entry.reason,
|
|
305
|
+
replacement: entry.replacement,
|
|
306
|
+
since: entry.deprecated_since,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Compute complexity metrics for Python source code.
|
|
314
|
+
*
|
|
315
|
+
* Uses indentation-based nesting detection (Python's natural structure)
|
|
316
|
+
* and regex matching for decision points.
|
|
317
|
+
*/
|
|
318
|
+
computeComplexity(source, _ast) {
|
|
319
|
+
const lines = source.split('\n');
|
|
320
|
+
let cyclomatic = 1; // base complexity
|
|
321
|
+
let cognitive = 0;
|
|
322
|
+
let maxNestingDepth = 0;
|
|
323
|
+
let currentDepth = 0;
|
|
324
|
+
let functionCount = 0;
|
|
325
|
+
// Track non-empty, non-comment lines
|
|
326
|
+
const codeLines = lines.filter(l => {
|
|
327
|
+
const t = l.trim();
|
|
328
|
+
return t.length > 0 && !t.startsWith('#');
|
|
329
|
+
});
|
|
330
|
+
for (const line of lines) {
|
|
331
|
+
const trimmed = line.trimStart();
|
|
332
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
333
|
+
continue;
|
|
334
|
+
// Python uses indentation for nesting
|
|
335
|
+
const indent = line.length - trimmed.length;
|
|
336
|
+
// Use 4-space standard, but handle 2-space too
|
|
337
|
+
currentDepth = indent > 0 ? Math.floor(indent / 4) || Math.floor(indent / 2) : 0;
|
|
338
|
+
maxNestingDepth = Math.max(maxNestingDepth, currentDepth);
|
|
339
|
+
// Decision points → cyclomatic complexity
|
|
340
|
+
if (/^(if|elif)\s+/.test(trimmed)) {
|
|
341
|
+
cyclomatic++;
|
|
342
|
+
cognitive += 1 + currentDepth; // nesting adds cognitive load
|
|
343
|
+
}
|
|
344
|
+
else if (/^(for|while)\s+/.test(trimmed)) {
|
|
345
|
+
cyclomatic++;
|
|
346
|
+
cognitive += 1 + currentDepth;
|
|
347
|
+
}
|
|
348
|
+
else if (/^except(\s+|\s*:)/.test(trimmed)) {
|
|
349
|
+
cyclomatic++;
|
|
350
|
+
cognitive += 1 + currentDepth;
|
|
351
|
+
}
|
|
352
|
+
else if (/^else\s*:/.test(trimmed)) {
|
|
353
|
+
cognitive += 1; // else doesn't add cyclomatic but adds cognitive
|
|
354
|
+
}
|
|
355
|
+
// Logical operators within expressions
|
|
356
|
+
const logicalOps = (trimmed.match(/\band\b|\bor\b/g) || []).length;
|
|
357
|
+
cyclomatic += logicalOps;
|
|
358
|
+
cognitive += logicalOps;
|
|
359
|
+
// Count function/method definitions
|
|
360
|
+
if (/^(async\s+)?def\s+\w+/.test(trimmed)) {
|
|
361
|
+
functionCount++;
|
|
362
|
+
}
|
|
363
|
+
// Count class definitions (rough proxy for structure)
|
|
364
|
+
// Not counted as functions, but noted
|
|
365
|
+
}
|
|
366
|
+
return {
|
|
367
|
+
cyclomatic,
|
|
368
|
+
cognitive,
|
|
369
|
+
loc: codeLines.length,
|
|
370
|
+
functionCount,
|
|
371
|
+
maxNestingDepth,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/languages/python/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAY5C,kCAAkC;AAElC;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IAC5C,OAAO;IACP,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM;IAC/D,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI;IAClE,sBAAsB;IACtB,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;IACrE,oBAAoB;IACpB,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ;IACtC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS;IACrD,eAAe;IACf,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc;IAC/C,iBAAiB;IACjB,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO;IACvE,yBAAyB;IACzB,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU;IAChD,eAAe;IACf,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW;IAC5D,gBAAgB;IAChB,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS;IACpE,wBAAwB;IACxB,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW;IACxD,WAAW;IACX,QAAQ,EAAE,QAAQ,EAAE,UAAU;IAC9B,oBAAoB;IACpB,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU;IAC1D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO;IAC9C,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK;IAC/C,UAAU,EAAE,QAAQ,EAAE,aAAa;IACnC,MAAM,EAAE,QAAQ,EAAE,WAAW;IAC7B,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ;IACtC,SAAS,EAAE,WAAW,EAAE,QAAQ;IAChC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ;IACtC,SAAS,EAAE,UAAU,EAAE,YAAY;CACpC,CAAC,CAAC;AAEH,sCAAsC;AAEtC;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IAC5C,oBAAoB;IACpB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS;IACnD,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO;IACzD,SAAS,EAAE,UAAU,EAAE,cAAc;IACrC,iBAAiB;IACjB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU;IACnD,WAAW,EAAE,OAAO;IACpB,wBAAwB;IACxB,QAAQ,EAAE,OAAO,EAAE,OAAO;IAC1B,WAAW;IACX,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS;IAC1D,eAAe;IACf,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;IACzC,wBAAwB;IACxB,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY;IAC3D,mBAAmB;IACnB,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK;IACvC,QAAQ;IACR,OAAO,EAAE,UAAU,EAAE,sBAAsB;IAC3C,UAAU;IACV,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY;IACjD,eAAe;IACf,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;IAClE,YAAY;IACZ,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK;IACzD,MAAM;IACN,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAChC,yBAAyB;IACzB,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ;IAC5D,WAAW;IACX,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO;CAC3C,CAAC,CAAC;AAaH,+CAA+C;AAC/C,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC,wCAAwC,CAAyB,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,oBAAoB,GAAG,kBAAkB,EAAE,CAAC;AAElD,yBAAyB;AAEzB;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACf,EAAE,GAAsB,QAAQ,CAAC;IACjC,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEtC;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,SAAiB;QAC3C,OAAO;YACL,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YACzB,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,MAAc,EAAE,IAAc;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YAEtB,4BAA4B;YAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAEtC,2BAA2B;YAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAC7B,sDAAsD,CACvD,CAAC;YACF,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAE9C,0CAA0C;gBAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,qBAAqB;gBACrB,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACN,sEAAsE;oBACtE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACnD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;wBACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;wBACzD,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI;4BAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjD,CAAC;gBACH,CAAC;gBAED,6BAA6B;gBAC7B,MAAM,UAAU,GAAG,UAAU;oBAC3B,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE7B,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,UAAU;oBAClB,QAAQ;oBACR,IAAI,EAAE,OAAO;oBACb,UAAU;oBACV,SAAS,EAAE,CAAC,UAAU,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC;iBACjE,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,sBAAsB;YACtB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAC/B,6BAA6B,CAC9B,CAAC;YACF,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAClC,sDAAsD;gBACtD,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;oBAClE,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC;wBACvD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAE1C,OAAO,CAAC,IAAI,CAAC;4BACX,MAAM,EAAE,QAAQ;4BAChB,QAAQ,EAAE,CAAC,KAAK,CAAC;4BACjB,IAAI,EAAE,OAAO;4BACb,UAAU,EAAE,KAAK;4BACjB,SAAS,EAAE,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC;yBAClD,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAc,EAAE,IAAc;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,KAAK,GAAe,EAAE,CAAC;QAE7B,2DAA2D;QAC3D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;YAC7B,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;YAC7D,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ;YAC/D,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ;YAC1D,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI;YAC7D,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;SAC3C,CAAC,CAAC;QAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YAEtB,gBAAgB;YAChB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACtC,2CAA2C;YAC3C,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,SAAS;YAEpE,0CAA0C;YAC1C,MAAM,WAAW,GAAG,uBAAuB,CAAC;YAC5C,IAAI,KAA6B,CAAC;YAClC,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACxB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEvC,gBAAgB;gBAChB,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;oBAAE,SAAS;gBAC5C,qDAAqD;gBACrD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAAE,SAAS;gBAE7E,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAE1C,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;oBACvB,YAAY;iBACb,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CAAC,IAAY;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/E,OAAO;gBACL,IAAI;gBACJ,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;QACJ,CAAC;QAED,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/E,OAAO;gBACL,IAAI;gBACJ,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,GAAW;QACzB,KAAK,MAAM,KAAK,IAAI,oBAAoB,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO;oBACL,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,KAAK,EAAE,KAAK,CAAC,gBAAgB;iBAC9B,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,MAAc,EAAE,IAAc;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,kBAAkB;QACtC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,qCAAqC;QACrC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAElD,sCAAsC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC5C,+CAA+C;YAC/C,YAAY,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;YAE1D,0CAA0C;YAC1C,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,UAAU,EAAE,CAAC;gBACb,SAAS,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,8BAA8B;YAC/D,CAAC;iBAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3C,UAAU,EAAE,CAAC;gBACb,SAAS,IAAI,CAAC,GAAG,YAAY,CAAC;YAChC,CAAC;iBAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7C,UAAU,EAAE,CAAC;gBACb,SAAS,IAAI,CAAC,GAAG,YAAY,CAAC;YAChC,CAAC;iBAAM,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,SAAS,IAAI,CAAC,CAAC,CAAC,iDAAiD;YACnE,CAAC;YAED,uCAAuC;YACvC,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACnE,UAAU,IAAI,UAAU,CAAC;YACzB,SAAS,IAAI,UAAU,CAAC;YAExB,oCAAoC;YACpC,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1C,aAAa,EAAE,CAAC;YAClB,CAAC;YAED,sDAAsD;YACtD,sCAAsC;QACxC,CAAC;QAED,OAAO;YACL,UAAU;YACV,SAAS;YACT,GAAG,EAAE,SAAS,CAAC,MAAM;YACrB,aAAa;YACb,eAAe;SAChB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages registered LanguageAdapters and auto-selects the appropriate
|
|
5
|
+
* adapter based on file extension.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.3.0
|
|
8
|
+
*/
|
|
9
|
+
import type { SupportedLanguage } from '../types.js';
|
|
10
|
+
import type { LanguageAdapter } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* LanguageRegistry — singleton that maps file extensions to language adapters.
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* const registry = LanguageRegistry.getInstance();
|
|
16
|
+
* registry.register(new TypeScriptAdapter());
|
|
17
|
+
* const adapter = registry.getByExtension('.ts');
|
|
18
|
+
*/
|
|
19
|
+
export declare class LanguageRegistry {
|
|
20
|
+
private static instance;
|
|
21
|
+
/** Adapter map by language ID */
|
|
22
|
+
private adapters;
|
|
23
|
+
/** Extension → language ID lookup */
|
|
24
|
+
private extensionMap;
|
|
25
|
+
private constructor();
|
|
26
|
+
/** Get the singleton instance */
|
|
27
|
+
static getInstance(): LanguageRegistry;
|
|
28
|
+
/**
|
|
29
|
+
* Reset the singleton (for testing).
|
|
30
|
+
*/
|
|
31
|
+
static resetInstance(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Register a language adapter.
|
|
34
|
+
* @param adapter The language adapter to register
|
|
35
|
+
* @throws If an adapter with the same ID is already registered
|
|
36
|
+
*/
|
|
37
|
+
register(adapter: LanguageAdapter): void;
|
|
38
|
+
/**
|
|
39
|
+
* Unregister a language adapter by ID.
|
|
40
|
+
* @param id Language identifier
|
|
41
|
+
*/
|
|
42
|
+
unregister(id: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Get a language adapter by language ID.
|
|
45
|
+
* @param id Language identifier (e.g. 'typescript')
|
|
46
|
+
* @returns The adapter, or undefined if not registered
|
|
47
|
+
*/
|
|
48
|
+
getById(id: string): LanguageAdapter | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* Get a language adapter by file extension.
|
|
51
|
+
* @param ext File extension including dot (e.g. '.ts')
|
|
52
|
+
* @returns The adapter, or undefined if no adapter matches
|
|
53
|
+
*/
|
|
54
|
+
getByExtension(ext: string): LanguageAdapter | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Get a language adapter for a file path.
|
|
57
|
+
* Extracts the extension and looks up the adapter.
|
|
58
|
+
* @param filePath File path
|
|
59
|
+
* @returns The adapter, or undefined if no adapter matches
|
|
60
|
+
*/
|
|
61
|
+
getByFilePath(filePath: string): LanguageAdapter | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Detect the language for a file path.
|
|
64
|
+
* @param filePath File path
|
|
65
|
+
* @returns The language identifier, or undefined
|
|
66
|
+
*/
|
|
67
|
+
detectLanguage(filePath: string): SupportedLanguage | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Get all registered language IDs.
|
|
70
|
+
*/
|
|
71
|
+
getRegisteredLanguages(): string[];
|
|
72
|
+
/**
|
|
73
|
+
* Get all supported extensions.
|
|
74
|
+
*/
|
|
75
|
+
getSupportedExtensions(): string[];
|
|
76
|
+
/**
|
|
77
|
+
* Check if a file extension is supported.
|
|
78
|
+
*/
|
|
79
|
+
isSupported(extOrPath: string): boolean;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/languages/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IAExD,iCAAiC;IACjC,OAAO,CAAC,QAAQ,CAAsC;IAEtD,qCAAqC;IACrC,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO;IAEP,iCAAiC;IACjC,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAOtC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAUxC;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAU5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIhD;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAQxD;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAQ5D;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAS/D;;OAEG;IACH,sBAAsB,IAAI,MAAM,EAAE;IAIlC;;OAEG;IACH,sBAAsB,IAAI,MAAM,EAAE;IAIlC;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAOxC"}
|