@yalehwang/archguard 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/README.md +537 -0
- package/dist/cli/cache/arch-json-disk-cache.d.ts +12 -0
- package/dist/cli/cache/arch-json-disk-cache.d.ts.map +1 -0
- package/dist/cli/cache/arch-json-disk-cache.js +51 -0
- package/dist/cli/cache/arch-json-disk-cache.js.map +1 -0
- package/dist/cli/cache-manager.d.ts +28 -0
- package/dist/cli/cache-manager.d.ts.map +1 -0
- package/dist/cli/cache-manager.js +126 -0
- package/dist/cli/cache-manager.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +7 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +212 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/cache.d.ts +3 -0
- package/dist/cli/commands/cache.d.ts.map +1 -0
- package/dist/cli/commands/cache.js +56 -0
- package/dist/cli/commands/cache.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +34 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/config-loader.d.ts +701 -0
- package/dist/cli/config-loader.d.ts.map +1 -0
- package/dist/cli/config-loader.js +259 -0
- package/dist/cli/config-loader.js.map +1 -0
- package/dist/cli/error-handler.d.ts +15 -0
- package/dist/cli/error-handler.d.ts.map +1 -0
- package/dist/cli/error-handler.js +127 -0
- package/dist/cli/error-handler.js.map +1 -0
- package/dist/cli/errors.d.ts +15 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/errors.js +31 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +27 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/processors/diagram-processor.d.ts +61 -0
- package/dist/cli/processors/diagram-processor.d.ts.map +1 -0
- package/dist/cli/processors/diagram-processor.js +610 -0
- package/dist/cli/processors/diagram-processor.js.map +1 -0
- package/dist/cli/progress/parallel-progress.d.ts +16 -0
- package/dist/cli/progress/parallel-progress.d.ts.map +1 -0
- package/dist/cli/progress/parallel-progress.js +49 -0
- package/dist/cli/progress/parallel-progress.js.map +1 -0
- package/dist/cli/progress.d.ts +36 -0
- package/dist/cli/progress.d.ts.map +1 -0
- package/dist/cli/progress.js +127 -0
- package/dist/cli/progress.js.map +1 -0
- package/dist/cli/types.d.ts +37 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/utils/cpp-project-structure-detector.d.ts +10 -0
- package/dist/cli/utils/cpp-project-structure-detector.d.ts.map +1 -0
- package/dist/cli/utils/cpp-project-structure-detector.js +99 -0
- package/dist/cli/utils/cpp-project-structure-detector.js.map +1 -0
- package/dist/cli/utils/diagram-index-generator.d.ts +12 -0
- package/dist/cli/utils/diagram-index-generator.d.ts.map +1 -0
- package/dist/cli/utils/diagram-index-generator.js +94 -0
- package/dist/cli/utils/diagram-index-generator.js.map +1 -0
- package/dist/cli/utils/file-discovery-service.d.ts +10 -0
- package/dist/cli/utils/file-discovery-service.d.ts.map +1 -0
- package/dist/cli/utils/file-discovery-service.js +56 -0
- package/dist/cli/utils/file-discovery-service.js.map +1 -0
- package/dist/cli/utils/output-path-resolver.d.ts +34 -0
- package/dist/cli/utils/output-path-resolver.d.ts.map +1 -0
- package/dist/cli/utils/output-path-resolver.js +91 -0
- package/dist/cli/utils/output-path-resolver.js.map +1 -0
- package/dist/cli/utils/project-structure-detector.d.ts +6 -0
- package/dist/cli/utils/project-structure-detector.d.ts.map +1 -0
- package/dist/cli/utils/project-structure-detector.js +159 -0
- package/dist/cli/utils/project-structure-detector.js.map +1 -0
- package/dist/core/interfaces/dependency.d.ts +14 -0
- package/dist/core/interfaces/dependency.d.ts.map +1 -0
- package/dist/core/interfaces/dependency.js +2 -0
- package/dist/core/interfaces/dependency.js.map +1 -0
- package/dist/core/interfaces/errors.d.ts +29 -0
- package/dist/core/interfaces/errors.d.ts.map +1 -0
- package/dist/core/interfaces/errors.js +59 -0
- package/dist/core/interfaces/errors.js.map +1 -0
- package/dist/core/interfaces/index.d.ts +6 -0
- package/dist/core/interfaces/index.d.ts.map +1 -0
- package/dist/core/interfaces/index.js +2 -0
- package/dist/core/interfaces/index.js.map +1 -0
- package/dist/core/interfaces/language-plugin.d.ts +34 -0
- package/dist/core/interfaces/language-plugin.d.ts.map +1 -0
- package/dist/core/interfaces/language-plugin.js +2 -0
- package/dist/core/interfaces/language-plugin.js.map +1 -0
- package/dist/core/interfaces/parser.d.ts +15 -0
- package/dist/core/interfaces/parser.d.ts.map +1 -0
- package/dist/core/interfaces/parser.js +2 -0
- package/dist/core/interfaces/parser.js.map +1 -0
- package/dist/core/interfaces/validation.d.ts +24 -0
- package/dist/core/interfaces/validation.d.ts.map +1 -0
- package/dist/core/interfaces/validation.js +2 -0
- package/dist/core/interfaces/validation.js.map +1 -0
- package/dist/core/plugin-registry.d.ts +19 -0
- package/dist/core/plugin-registry.d.ts.map +1 -0
- package/dist/core/plugin-registry.js +137 -0
- package/dist/core/plugin-registry.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/mermaid/auto-repair.d.ts +23 -0
- package/dist/mermaid/auto-repair.d.ts.map +1 -0
- package/dist/mermaid/auto-repair.js +197 -0
- package/dist/mermaid/auto-repair.js.map +1 -0
- package/dist/mermaid/comment-generator.d.ts +10 -0
- package/dist/mermaid/comment-generator.d.ts.map +1 -0
- package/dist/mermaid/comment-generator.js +213 -0
- package/dist/mermaid/comment-generator.js.map +1 -0
- package/dist/mermaid/cpp-package-flowchart-generator.d.ts +5 -0
- package/dist/mermaid/cpp-package-flowchart-generator.d.ts.map +1 -0
- package/dist/mermaid/cpp-package-flowchart-generator.js +33 -0
- package/dist/mermaid/cpp-package-flowchart-generator.js.map +1 -0
- package/dist/mermaid/diagram-generator.d.ts +31 -0
- package/dist/mermaid/diagram-generator.d.ts.map +1 -0
- package/dist/mermaid/diagram-generator.js +194 -0
- package/dist/mermaid/diagram-generator.js.map +1 -0
- package/dist/mermaid/external-dependencies.d.ts +3 -0
- package/dist/mermaid/external-dependencies.d.ts.map +1 -0
- package/dist/mermaid/external-dependencies.js +38 -0
- package/dist/mermaid/external-dependencies.js.map +1 -0
- package/dist/mermaid/generator.d.ts +44 -0
- package/dist/mermaid/generator.d.ts.map +1 -0
- package/dist/mermaid/generator.js +511 -0
- package/dist/mermaid/generator.js.map +1 -0
- package/dist/mermaid/grouper.d.ts +15 -0
- package/dist/mermaid/grouper.d.ts.map +1 -0
- package/dist/mermaid/grouper.js +194 -0
- package/dist/mermaid/grouper.js.map +1 -0
- package/dist/mermaid/index.d.ts +14 -0
- package/dist/mermaid/index.d.ts.map +1 -0
- package/dist/mermaid/index.js +13 -0
- package/dist/mermaid/index.js.map +1 -0
- package/dist/mermaid/progress.d.ts +15 -0
- package/dist/mermaid/progress.d.ts.map +1 -0
- package/dist/mermaid/progress.js +8 -0
- package/dist/mermaid/progress.js.map +1 -0
- package/dist/mermaid/render-worker-pool.d.ts +29 -0
- package/dist/mermaid/render-worker-pool.d.ts.map +1 -0
- package/dist/mermaid/render-worker-pool.js +73 -0
- package/dist/mermaid/render-worker-pool.js.map +1 -0
- package/dist/mermaid/render-worker.d.ts +2 -0
- package/dist/mermaid/render-worker.d.ts.map +1 -0
- package/dist/mermaid/render-worker.js +22 -0
- package/dist/mermaid/render-worker.js.map +1 -0
- package/dist/mermaid/renderer.d.ts +17 -0
- package/dist/mermaid/renderer.d.ts.map +1 -0
- package/dist/mermaid/renderer.js +204 -0
- package/dist/mermaid/renderer.js.map +1 -0
- package/dist/mermaid/ts-module-graph-renderer.d.ts +3 -0
- package/dist/mermaid/ts-module-graph-renderer.d.ts.map +1 -0
- package/dist/mermaid/ts-module-graph-renderer.js +180 -0
- package/dist/mermaid/ts-module-graph-renderer.js.map +1 -0
- package/dist/mermaid/types.d.ts +122 -0
- package/dist/mermaid/types.d.ts.map +1 -0
- package/dist/mermaid/types.js +2 -0
- package/dist/mermaid/types.js.map +1 -0
- package/dist/mermaid/validation-pipeline.d.ts +29 -0
- package/dist/mermaid/validation-pipeline.d.ts.map +1 -0
- package/dist/mermaid/validation-pipeline.js +163 -0
- package/dist/mermaid/validation-pipeline.js.map +1 -0
- package/dist/mermaid/validator-parse.d.ts +11 -0
- package/dist/mermaid/validator-parse.d.ts.map +1 -0
- package/dist/mermaid/validator-parse.js +130 -0
- package/dist/mermaid/validator-parse.js.map +1 -0
- package/dist/mermaid/validator-quality.d.ts +17 -0
- package/dist/mermaid/validator-quality.d.ts.map +1 -0
- package/dist/mermaid/validator-quality.js +187 -0
- package/dist/mermaid/validator-quality.js.map +1 -0
- package/dist/mermaid/validator-render.d.ts +12 -0
- package/dist/mermaid/validator-render.d.ts.map +1 -0
- package/dist/mermaid/validator-render.js +98 -0
- package/dist/mermaid/validator-render.js.map +1 -0
- package/dist/mermaid/validator-structural.d.ts +11 -0
- package/dist/mermaid/validator-structural.d.ts.map +1 -0
- package/dist/mermaid/validator-structural.js +116 -0
- package/dist/mermaid/validator-structural.js.map +1 -0
- package/dist/parser/archjson-aggregator.d.ts +11 -0
- package/dist/parser/archjson-aggregator.d.ts.map +1 -0
- package/dist/parser/archjson-aggregator.js +113 -0
- package/dist/parser/archjson-aggregator.js.map +1 -0
- package/dist/parser/base-extractor.d.ts +6 -0
- package/dist/parser/base-extractor.d.ts.map +1 -0
- package/dist/parser/base-extractor.js +13 -0
- package/dist/parser/base-extractor.js.map +1 -0
- package/dist/parser/class-extractor.d.ts +17 -0
- package/dist/parser/class-extractor.d.ts.map +1 -0
- package/dist/parser/class-extractor.js +144 -0
- package/dist/parser/class-extractor.js.map +1 -0
- package/dist/parser/enum-extractor.d.ts +9 -0
- package/dist/parser/enum-extractor.d.ts.map +1 -0
- package/dist/parser/enum-extractor.js +45 -0
- package/dist/parser/enum-extractor.js.map +1 -0
- package/dist/parser/errors.d.ts +7 -0
- package/dist/parser/errors.d.ts.map +1 -0
- package/dist/parser/errors.js +14 -0
- package/dist/parser/errors.js.map +1 -0
- package/dist/parser/function-extractor.d.ts +7 -0
- package/dist/parser/function-extractor.d.ts.map +1 -0
- package/dist/parser/function-extractor.js +59 -0
- package/dist/parser/function-extractor.js.map +1 -0
- package/dist/parser/index.d.ts +10 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +9 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/interface-extractor.d.ts +14 -0
- package/dist/parser/interface-extractor.d.ts.map +1 -0
- package/dist/parser/interface-extractor.js +90 -0
- package/dist/parser/interface-extractor.js.map +1 -0
- package/dist/parser/metrics-calculator.d.ts +9 -0
- package/dist/parser/metrics-calculator.d.ts.map +1 -0
- package/dist/parser/metrics-calculator.js +84 -0
- package/dist/parser/metrics-calculator.js.map +1 -0
- package/dist/parser/parallel-parser.d.ts +38 -0
- package/dist/parser/parallel-parser.d.ts.map +1 -0
- package/dist/parser/parallel-parser.js +170 -0
- package/dist/parser/parallel-parser.js.map +1 -0
- package/dist/parser/parse-cache.d.ts +8 -0
- package/dist/parser/parse-cache.d.ts.map +1 -0
- package/dist/parser/parse-cache.js +25 -0
- package/dist/parser/parse-cache.js.map +1 -0
- package/dist/parser/relation-extractor.d.ts +14 -0
- package/dist/parser/relation-extractor.d.ts.map +1 -0
- package/dist/parser/relation-extractor.js +203 -0
- package/dist/parser/relation-extractor.js.map +1 -0
- package/dist/parser/typescript-parser.d.ts +19 -0
- package/dist/parser/typescript-parser.d.ts.map +1 -0
- package/dist/parser/typescript-parser.js +182 -0
- package/dist/parser/typescript-parser.js.map +1 -0
- package/dist/plugins/cpp/archjson-mapper.d.ts +13 -0
- package/dist/plugins/cpp/archjson-mapper.d.ts.map +1 -0
- package/dist/plugins/cpp/archjson-mapper.js +180 -0
- package/dist/plugins/cpp/archjson-mapper.js.map +1 -0
- package/dist/plugins/cpp/builders/class-builder.d.ts +15 -0
- package/dist/plugins/cpp/builders/class-builder.d.ts.map +1 -0
- package/dist/plugins/cpp/builders/class-builder.js +102 -0
- package/dist/plugins/cpp/builders/class-builder.js.map +1 -0
- package/dist/plugins/cpp/builders/header-merger.d.ts +8 -0
- package/dist/plugins/cpp/builders/header-merger.d.ts.map +1 -0
- package/dist/plugins/cpp/builders/header-merger.js +65 -0
- package/dist/plugins/cpp/builders/header-merger.js.map +1 -0
- package/dist/plugins/cpp/cpp-type-extractor.d.ts +13 -0
- package/dist/plugins/cpp/cpp-type-extractor.d.ts.map +1 -0
- package/dist/plugins/cpp/cpp-type-extractor.js +153 -0
- package/dist/plugins/cpp/cpp-type-extractor.js.map +1 -0
- package/dist/plugins/cpp/dependency-extractor.d.ts +5 -0
- package/dist/plugins/cpp/dependency-extractor.d.ts.map +1 -0
- package/dist/plugins/cpp/dependency-extractor.js +28 -0
- package/dist/plugins/cpp/dependency-extractor.js.map +1 -0
- package/dist/plugins/cpp/index.d.ts +21 -0
- package/dist/plugins/cpp/index.d.ts.map +1 -0
- package/dist/plugins/cpp/index.js +113 -0
- package/dist/plugins/cpp/index.js.map +1 -0
- package/dist/plugins/cpp/tree-sitter-bridge.d.ts +20 -0
- package/dist/plugins/cpp/tree-sitter-bridge.d.ts.map +1 -0
- package/dist/plugins/cpp/tree-sitter-bridge.js +258 -0
- package/dist/plugins/cpp/tree-sitter-bridge.js.map +1 -0
- package/dist/plugins/cpp/types.d.ts +75 -0
- package/dist/plugins/cpp/types.d.ts.map +1 -0
- package/dist/plugins/cpp/types.js +2 -0
- package/dist/plugins/cpp/types.js.map +1 -0
- package/dist/plugins/golang/archjson-mapper.d.ts +10 -0
- package/dist/plugins/golang/archjson-mapper.d.ts.map +1 -0
- package/dist/plugins/golang/archjson-mapper.js +121 -0
- package/dist/plugins/golang/archjson-mapper.js.map +1 -0
- package/dist/plugins/golang/atlas/behavior-analyzer.d.ts +16 -0
- package/dist/plugins/golang/atlas/behavior-analyzer.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/behavior-analyzer.js +32 -0
- package/dist/plugins/golang/atlas/behavior-analyzer.js.map +1 -0
- package/dist/plugins/golang/atlas/builders/capability-graph-builder.d.ts +12 -0
- package/dist/plugins/golang/atlas/builders/capability-graph-builder.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/builders/capability-graph-builder.js +219 -0
- package/dist/plugins/golang/atlas/builders/capability-graph-builder.js.map +1 -0
- package/dist/plugins/golang/atlas/builders/flow-graph-builder.d.ts +18 -0
- package/dist/plugins/golang/atlas/builders/flow-graph-builder.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/builders/flow-graph-builder.js +300 -0
- package/dist/plugins/golang/atlas/builders/flow-graph-builder.js.map +1 -0
- package/dist/plugins/golang/atlas/builders/goroutine-topology-builder.d.ts +15 -0
- package/dist/plugins/golang/atlas/builders/goroutine-topology-builder.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/builders/goroutine-topology-builder.js +254 -0
- package/dist/plugins/golang/atlas/builders/goroutine-topology-builder.js.map +1 -0
- package/dist/plugins/golang/atlas/builders/i-atlas-builder.d.ts +5 -0
- package/dist/plugins/golang/atlas/builders/i-atlas-builder.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/builders/i-atlas-builder.js +2 -0
- package/dist/plugins/golang/atlas/builders/i-atlas-builder.js.map +1 -0
- package/dist/plugins/golang/atlas/builders/index.d.ts +6 -0
- package/dist/plugins/golang/atlas/builders/index.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/builders/index.js +5 -0
- package/dist/plugins/golang/atlas/builders/index.js.map +1 -0
- package/dist/plugins/golang/atlas/builders/package-graph-builder.d.ts +14 -0
- package/dist/plugins/golang/atlas/builders/package-graph-builder.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/builders/package-graph-builder.js +115 -0
- package/dist/plugins/golang/atlas/builders/package-graph-builder.js.map +1 -0
- package/dist/plugins/golang/atlas/framework-detector.d.ts +11 -0
- package/dist/plugins/golang/atlas/framework-detector.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/framework-detector.js +82 -0
- package/dist/plugins/golang/atlas/framework-detector.js.map +1 -0
- package/dist/plugins/golang/atlas/go-mod-resolver.d.ts +21 -0
- package/dist/plugins/golang/atlas/go-mod-resolver.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/go-mod-resolver.js +90 -0
- package/dist/plugins/golang/atlas/go-mod-resolver.js.map +1 -0
- package/dist/plugins/golang/atlas/index.d.ts +28 -0
- package/dist/plugins/golang/atlas/index.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/index.js +166 -0
- package/dist/plugins/golang/atlas/index.js.map +1 -0
- package/dist/plugins/golang/atlas/renderers/atlas-renderer.d.ts +7 -0
- package/dist/plugins/golang/atlas/renderers/atlas-renderer.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/renderers/atlas-renderer.js +62 -0
- package/dist/plugins/golang/atlas/renderers/atlas-renderer.js.map +1 -0
- package/dist/plugins/golang/atlas/renderers/mermaid-templates.d.ts +24 -0
- package/dist/plugins/golang/atlas/renderers/mermaid-templates.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/renderers/mermaid-templates.js +688 -0
- package/dist/plugins/golang/atlas/renderers/mermaid-templates.js.map +1 -0
- package/dist/plugins/golang/atlas/types.d.ts +63 -0
- package/dist/plugins/golang/atlas/types.d.ts.map +1 -0
- package/dist/plugins/golang/atlas/types.js +2 -0
- package/dist/plugins/golang/atlas/types.js.map +1 -0
- package/dist/plugins/golang/dependency-extractor.d.ts +7 -0
- package/dist/plugins/golang/dependency-extractor.d.ts.map +1 -0
- package/dist/plugins/golang/dependency-extractor.js +100 -0
- package/dist/plugins/golang/dependency-extractor.js.map +1 -0
- package/dist/plugins/golang/gopls-client.d.ts +38 -0
- package/dist/plugins/golang/gopls-client.d.ts.map +1 -0
- package/dist/plugins/golang/gopls-client.js +354 -0
- package/dist/plugins/golang/gopls-client.js.map +1 -0
- package/dist/plugins/golang/index.d.ts +29 -0
- package/dist/plugins/golang/index.d.ts.map +1 -0
- package/dist/plugins/golang/index.js +242 -0
- package/dist/plugins/golang/index.js.map +1 -0
- package/dist/plugins/golang/interface-matcher.d.ts +14 -0
- package/dist/plugins/golang/interface-matcher.d.ts.map +1 -0
- package/dist/plugins/golang/interface-matcher.js +235 -0
- package/dist/plugins/golang/interface-matcher.js.map +1 -0
- package/dist/plugins/golang/tree-sitter-bridge.d.ts +32 -0
- package/dist/plugins/golang/tree-sitter-bridge.d.ts.map +1 -0
- package/dist/plugins/golang/tree-sitter-bridge.js +579 -0
- package/dist/plugins/golang/tree-sitter-bridge.js.map +1 -0
- package/dist/plugins/golang/types.d.ts +119 -0
- package/dist/plugins/golang/types.d.ts.map +1 -0
- package/dist/plugins/golang/types.js +2 -0
- package/dist/plugins/golang/types.js.map +1 -0
- package/dist/plugins/java/archjson-mapper.d.ts +15 -0
- package/dist/plugins/java/archjson-mapper.d.ts.map +1 -0
- package/dist/plugins/java/archjson-mapper.js +273 -0
- package/dist/plugins/java/archjson-mapper.js.map +1 -0
- package/dist/plugins/java/dependency-extractor.d.ts +9 -0
- package/dist/plugins/java/dependency-extractor.d.ts.map +1 -0
- package/dist/plugins/java/dependency-extractor.js +99 -0
- package/dist/plugins/java/dependency-extractor.js.map +1 -0
- package/dist/plugins/java/index.d.ts +21 -0
- package/dist/plugins/java/index.d.ts.map +1 -0
- package/dist/plugins/java/index.js +167 -0
- package/dist/plugins/java/index.js.map +1 -0
- package/dist/plugins/java/tree-sitter-bridge.d.ts +19 -0
- package/dist/plugins/java/tree-sitter-bridge.d.ts.map +1 -0
- package/dist/plugins/java/tree-sitter-bridge.js +334 -0
- package/dist/plugins/java/tree-sitter-bridge.js.map +1 -0
- package/dist/plugins/java/types.d.ts +81 -0
- package/dist/plugins/java/types.d.ts.map +1 -0
- package/dist/plugins/java/types.js +2 -0
- package/dist/plugins/java/types.js.map +1 -0
- package/dist/plugins/python/archjson-mapper.d.ts +19 -0
- package/dist/plugins/python/archjson-mapper.d.ts.map +1 -0
- package/dist/plugins/python/archjson-mapper.js +170 -0
- package/dist/plugins/python/archjson-mapper.js.map +1 -0
- package/dist/plugins/python/dependency-extractor.d.ts +11 -0
- package/dist/plugins/python/dependency-extractor.d.ts.map +1 -0
- package/dist/plugins/python/dependency-extractor.js +186 -0
- package/dist/plugins/python/dependency-extractor.js.map +1 -0
- package/dist/plugins/python/index.d.ts +21 -0
- package/dist/plugins/python/index.d.ts.map +1 -0
- package/dist/plugins/python/index.js +142 -0
- package/dist/plugins/python/index.js.map +1 -0
- package/dist/plugins/python/tree-sitter-bridge.d.ts +16 -0
- package/dist/plugins/python/tree-sitter-bridge.d.ts.map +1 -0
- package/dist/plugins/python/tree-sitter-bridge.js +352 -0
- package/dist/plugins/python/tree-sitter-bridge.js.map +1 -0
- package/dist/plugins/python/types.d.ts +86 -0
- package/dist/plugins/python/types.d.ts.map +1 -0
- package/dist/plugins/python/types.js +2 -0
- package/dist/plugins/python/types.js.map +1 -0
- package/dist/plugins/shared/mapper-utils.d.ts +4 -0
- package/dist/plugins/shared/mapper-utils.d.ts.map +1 -0
- package/dist/plugins/shared/mapper-utils.js +12 -0
- package/dist/plugins/shared/mapper-utils.js.map +1 -0
- package/dist/plugins/typescript/builders/module-graph-builder.d.ts +8 -0
- package/dist/plugins/typescript/builders/module-graph-builder.d.ts.map +1 -0
- package/dist/plugins/typescript/builders/module-graph-builder.js +175 -0
- package/dist/plugins/typescript/builders/module-graph-builder.js.map +1 -0
- package/dist/plugins/typescript/index.d.ts +26 -0
- package/dist/plugins/typescript/index.d.ts.map +1 -0
- package/dist/plugins/typescript/index.js +232 -0
- package/dist/plugins/typescript/index.js.map +1 -0
- package/dist/plugins/typescript/typescript-analyzer.d.ts +8 -0
- package/dist/plugins/typescript/typescript-analyzer.d.ts.map +1 -0
- package/dist/plugins/typescript/typescript-analyzer.js +13 -0
- package/dist/plugins/typescript/typescript-analyzer.js.map +1 -0
- package/dist/scripts/migrate-to-mermaid.js +214 -0
- package/dist/types/config.d.ts +140 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/extensions.d.ts +224 -0
- package/dist/types/extensions.d.ts.map +1 -0
- package/dist/types/extensions.js +3 -0
- package/dist/types/extensions.js.map +1 -0
- package/dist/types/index.d.ts +89 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/cli-detector.d.ts +8 -0
- package/dist/utils/cli-detector.d.ts.map +1 -0
- package/dist/utils/cli-detector.js +38 -0
- package/dist/utils/cli-detector.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/tsconfig-finder.d.ts +7 -0
- package/dist/utils/tsconfig-finder.d.ts.map +1 -0
- package/dist/utils/tsconfig-finder.js +31 -0
- package/dist/utils/tsconfig-finder.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
const PRIMITIVES = new Set([
|
|
2
|
+
'void', 'bool', 'char', 'wchar_t', 'char8_t', 'char16_t', 'char32_t',
|
|
3
|
+
'short', 'int', 'long', 'float', 'double', 'auto', 'nullptr_t',
|
|
4
|
+
'int8_t', 'int16_t', 'int32_t', 'int64_t',
|
|
5
|
+
'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
|
|
6
|
+
'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
|
|
7
|
+
'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
|
|
8
|
+
'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
|
|
9
|
+
'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
|
|
10
|
+
'intptr_t', 'uintptr_t', 'intmax_t', 'uintmax_t',
|
|
11
|
+
'size_t', 'ssize_t', 'ptrdiff_t', 'off_t',
|
|
12
|
+
'unsigned', 'signed',
|
|
13
|
+
]);
|
|
14
|
+
const STL_TYPES = new Set([
|
|
15
|
+
'string', 'wstring', 'u8string', 'u16string', 'u32string',
|
|
16
|
+
'string_view', 'wstring_view',
|
|
17
|
+
'mutex', 'recursive_mutex', 'timed_mutex', 'recursive_timed_mutex',
|
|
18
|
+
'shared_mutex', 'shared_timed_mutex',
|
|
19
|
+
'condition_variable', 'condition_variable_any',
|
|
20
|
+
'thread', 'jthread',
|
|
21
|
+
'exception', 'runtime_error', 'logic_error', 'bad_alloc',
|
|
22
|
+
'error_code', 'error_condition',
|
|
23
|
+
'ios_base', 'istream', 'ostream', 'iostream', 'ifstream', 'ofstream', 'fstream',
|
|
24
|
+
'istringstream', 'ostringstream', 'stringstream',
|
|
25
|
+
'regex', 'smatch', 'cmatch',
|
|
26
|
+
'filesystem',
|
|
27
|
+
'any', 'monostate', 'nullopt_t', 'byte',
|
|
28
|
+
]);
|
|
29
|
+
const SMART_PTR_TEMPLATES = new Set([
|
|
30
|
+
'unique_ptr', 'shared_ptr', 'weak_ptr',
|
|
31
|
+
]);
|
|
32
|
+
const CONTAINER_TEMPLATES = new Set([
|
|
33
|
+
'vector', 'list', 'deque', 'queue', 'stack', 'priority_queue',
|
|
34
|
+
'set', 'multiset', 'unordered_set', 'unordered_multiset',
|
|
35
|
+
'map', 'multimap', 'unordered_map', 'unordered_multimap',
|
|
36
|
+
'array', 'span', 'initializer_list',
|
|
37
|
+
'optional', 'variant', 'tuple',
|
|
38
|
+
'function', 'packaged_task', 'promise', 'future', 'shared_future',
|
|
39
|
+
]);
|
|
40
|
+
export class CppTypeExtractor {
|
|
41
|
+
extractTypes(rawType) {
|
|
42
|
+
if (!rawType || rawType.trim() === '')
|
|
43
|
+
return [];
|
|
44
|
+
const stripped = this.strip(rawType);
|
|
45
|
+
if (!stripped)
|
|
46
|
+
return [];
|
|
47
|
+
const tmplMatch = stripped.match(/^([A-Za-z_]\w*(?:::[A-Za-z_]\w*)*)<(.+)>$/);
|
|
48
|
+
if (tmplMatch) {
|
|
49
|
+
return this.extractFromTemplate(tmplMatch[1], tmplMatch[2]);
|
|
50
|
+
}
|
|
51
|
+
return this.filterType(stripped) ? [stripped] : [];
|
|
52
|
+
}
|
|
53
|
+
classifyFieldRelation(rawType) {
|
|
54
|
+
if (this.isSmartPointer(rawType))
|
|
55
|
+
return 'composition';
|
|
56
|
+
if (this.isRawPointerOrRef(rawType))
|
|
57
|
+
return 'aggregation';
|
|
58
|
+
if (rawType.includes('*'))
|
|
59
|
+
return 'aggregation';
|
|
60
|
+
return 'composition';
|
|
61
|
+
}
|
|
62
|
+
strip(raw) {
|
|
63
|
+
let s = raw.trim();
|
|
64
|
+
s = s.replace(/^\b(struct|class|const|volatile|mutable|explicit|inline|extern|static|register)\b\s*/g, '').trim();
|
|
65
|
+
s = s.replace(/^\b(const|volatile)\b\s*/g, '').trim();
|
|
66
|
+
s = this.stripTrailing(s);
|
|
67
|
+
if (s.startsWith('std::')) {
|
|
68
|
+
s = s.slice(5);
|
|
69
|
+
}
|
|
70
|
+
return s.trim();
|
|
71
|
+
}
|
|
72
|
+
stripTrailing(s) {
|
|
73
|
+
const trailPattern = /(\s*(const|volatile|\*|&|&&)\s*)+$/;
|
|
74
|
+
const depth = (s.match(/</g) || []).length - (s.match(/>/g) || []).length;
|
|
75
|
+
if (depth !== 0)
|
|
76
|
+
return s;
|
|
77
|
+
return s.replace(trailPattern, '').trim();
|
|
78
|
+
}
|
|
79
|
+
extractFromTemplate(templateName, argsStr) {
|
|
80
|
+
const tname = templateName.startsWith('std::') ? templateName.slice(5) : templateName;
|
|
81
|
+
const args = this.splitTemplateArgs(argsStr);
|
|
82
|
+
if (SMART_PTR_TEMPLATES.has(tname)) {
|
|
83
|
+
return this.extractFromArg(args[0] ?? '');
|
|
84
|
+
}
|
|
85
|
+
if (CONTAINER_TEMPLATES.has(tname)) {
|
|
86
|
+
const isMapLike = ['map', 'multimap', 'unordered_map', 'unordered_multimap'].includes(tname);
|
|
87
|
+
const valueArg = isMapLike ? (args[args.length - 1] ?? '') : (args[0] ?? '');
|
|
88
|
+
return this.extractFromArg(valueArg);
|
|
89
|
+
}
|
|
90
|
+
const results = [];
|
|
91
|
+
if (this.filterType(tname))
|
|
92
|
+
results.push(tname);
|
|
93
|
+
for (const arg of args) {
|
|
94
|
+
results.push(...this.extractFromArg(arg));
|
|
95
|
+
}
|
|
96
|
+
return results;
|
|
97
|
+
}
|
|
98
|
+
extractFromArg(arg) {
|
|
99
|
+
return this.extractTypes(arg);
|
|
100
|
+
}
|
|
101
|
+
splitTemplateArgs(argsStr) {
|
|
102
|
+
const args = [];
|
|
103
|
+
let depth = 0;
|
|
104
|
+
let current = '';
|
|
105
|
+
for (const ch of argsStr) {
|
|
106
|
+
if (ch === '<') {
|
|
107
|
+
depth++;
|
|
108
|
+
current += ch;
|
|
109
|
+
}
|
|
110
|
+
else if (ch === '>') {
|
|
111
|
+
depth--;
|
|
112
|
+
current += ch;
|
|
113
|
+
}
|
|
114
|
+
else if (ch === ',' && depth === 0) {
|
|
115
|
+
args.push(current.trim());
|
|
116
|
+
current = '';
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
current += ch;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (current.trim())
|
|
123
|
+
args.push(current.trim());
|
|
124
|
+
return args;
|
|
125
|
+
}
|
|
126
|
+
filterType(name) {
|
|
127
|
+
if (!name || name.length === 0)
|
|
128
|
+
return false;
|
|
129
|
+
if (name.length === 1 && /[A-Z]/.test(name))
|
|
130
|
+
return false;
|
|
131
|
+
if (name.length <= 2 && /^[A-Z]{1,2}$/.test(name))
|
|
132
|
+
return false;
|
|
133
|
+
if (PRIMITIVES.has(name))
|
|
134
|
+
return false;
|
|
135
|
+
if (STL_TYPES.has(name))
|
|
136
|
+
return false;
|
|
137
|
+
if (/^\d/.test(name))
|
|
138
|
+
return false;
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
isSmartPointer(raw) {
|
|
142
|
+
return /\bstd::(unique_ptr|shared_ptr|weak_ptr)\b/.test(raw) ||
|
|
143
|
+
/\b(unique_ptr|shared_ptr|weak_ptr)\b/.test(raw);
|
|
144
|
+
}
|
|
145
|
+
isRawPointerOrRef(raw) {
|
|
146
|
+
const depth = (raw.match(/</g) || []).length - (raw.match(/>/g) || []).length;
|
|
147
|
+
if (depth !== 0)
|
|
148
|
+
return false;
|
|
149
|
+
const noTemplate = raw.replace(/<[^<>]*>/g, '');
|
|
150
|
+
return /[*&]/.test(noTemplate);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=cpp-type-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpp-type-extractor.js","sourceRoot":"","sources":["../../../src/plugins/cpp/cpp-type-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IDependencyExtractor, Dependency } from '../../core/interfaces/dependency.js';
|
|
2
|
+
export declare class DependencyExtractor implements IDependencyExtractor {
|
|
3
|
+
extractDependencies(workspaceRoot: string): Promise<Dependency[]>;
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=dependency-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-extractor.d.ts","sourceRoot":"","sources":["../../../src/plugins/cpp/dependency-extractor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAExF,qBAAa,mBAAoB,YAAW,oBAAoB;IACxD,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAuBxE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
export class DependencyExtractor {
|
|
4
|
+
async extractDependencies(workspaceRoot) {
|
|
5
|
+
const deps = [];
|
|
6
|
+
try {
|
|
7
|
+
const cmakePath = path.join(workspaceRoot, 'CMakeLists.txt');
|
|
8
|
+
if (await fs.pathExists(cmakePath)) {
|
|
9
|
+
const content = await fs.readFile(cmakePath, 'utf-8');
|
|
10
|
+
const matches = content.matchAll(/find_package\s*\(\s*(\w+)/g);
|
|
11
|
+
for (const m of matches) {
|
|
12
|
+
deps.push({
|
|
13
|
+
name: m[1],
|
|
14
|
+
version: '*',
|
|
15
|
+
type: 'cmake',
|
|
16
|
+
scope: 'runtime',
|
|
17
|
+
source: cmakePath,
|
|
18
|
+
isDirect: true,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
}
|
|
25
|
+
return deps;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=dependency-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-extractor.js","sourceRoot":"","sources":["../../../src/plugins/cpp/dependency-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAG1B,MAAM,OAAO,mBAAmB;IAC9B,KAAK,CAAC,mBAAmB,CAAC,aAAqB;QAC7C,MAAM,IAAI,GAAiB,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;YAC7D,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;gBAC/D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,IAAI,CAAC,IAAI,CAAC;wBACR,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;wBACV,OAAO,EAAE,GAAG;wBACZ,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,SAAS;wBAChB,MAAM,EAAE,SAAS;wBACjB,QAAQ,EAAE,IAAI;qBACf,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ILanguagePlugin, PluginMetadata, PluginInitConfig } from '../../core/interfaces/language-plugin.js';
|
|
2
|
+
import type { ParseConfig } from '../../core/interfaces/parser.js';
|
|
3
|
+
import type { ArchJSON } from '../../types/index.js';
|
|
4
|
+
import type { IDependencyExtractor } from '../../core/interfaces/dependency.js';
|
|
5
|
+
export declare class CppPlugin implements ILanguagePlugin {
|
|
6
|
+
readonly metadata: PluginMetadata;
|
|
7
|
+
readonly supportedLevels: readonly ["package", "class"];
|
|
8
|
+
readonly dependencyExtractor: IDependencyExtractor;
|
|
9
|
+
private bridge;
|
|
10
|
+
private merger;
|
|
11
|
+
private mapper;
|
|
12
|
+
private initialized;
|
|
13
|
+
constructor();
|
|
14
|
+
initialize(_config: PluginInitConfig): Promise<void>;
|
|
15
|
+
canHandle(targetPath: string): boolean;
|
|
16
|
+
parseProject(workspaceRoot: string, config: ParseConfig): Promise<ArchJSON>;
|
|
17
|
+
parseCode(code: string, filePath?: string): ArchJSON;
|
|
18
|
+
dispose(): Promise<void>;
|
|
19
|
+
private ensureInitialized;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/cpp/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,gBAAgB,EACjB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAM5E,qBAAa,SAAU,YAAW,eAAe;IAC/C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAa/B;IAEF,QAAQ,CAAC,eAAe,gCAAiC;IAGzD,QAAQ,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;IAEnD,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,WAAW,CAAS;;IAUtB,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1D,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IA4BhC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IA8CjF,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAe,GAAG,QAAQ;IA2BpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,iBAAiB;CAK1B"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import { glob } from 'glob';
|
|
4
|
+
import { TreeSitterBridge } from './tree-sitter-bridge.js';
|
|
5
|
+
import { HeaderMerger } from './builders/header-merger.js';
|
|
6
|
+
import { ArchJsonMapper } from './archjson-mapper.js';
|
|
7
|
+
import { DependencyExtractor } from './dependency-extractor.js';
|
|
8
|
+
export class CppPlugin {
|
|
9
|
+
metadata = {
|
|
10
|
+
name: 'cpp',
|
|
11
|
+
version: '1.0.0',
|
|
12
|
+
displayName: 'C/C++',
|
|
13
|
+
fileExtensions: ['.cpp', '.cxx', '.cc', '.hpp', '.hxx', '.h'],
|
|
14
|
+
author: 'ArchGuard Team',
|
|
15
|
+
minCoreVersion: '2.0.0',
|
|
16
|
+
capabilities: {
|
|
17
|
+
singleFileParsing: true,
|
|
18
|
+
incrementalParsing: false,
|
|
19
|
+
dependencyExtraction: true,
|
|
20
|
+
typeInference: false,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
supportedLevels = ['package', 'class'];
|
|
24
|
+
dependencyExtractor;
|
|
25
|
+
bridge;
|
|
26
|
+
merger;
|
|
27
|
+
mapper;
|
|
28
|
+
initialized = false;
|
|
29
|
+
constructor() {
|
|
30
|
+
this.dependencyExtractor = new DependencyExtractor();
|
|
31
|
+
}
|
|
32
|
+
async initialize(_config) {
|
|
33
|
+
if (this.initialized)
|
|
34
|
+
return;
|
|
35
|
+
this.bridge = new TreeSitterBridge();
|
|
36
|
+
this.merger = new HeaderMerger();
|
|
37
|
+
this.mapper = new ArchJsonMapper();
|
|
38
|
+
this.initialized = true;
|
|
39
|
+
}
|
|
40
|
+
canHandle(targetPath) {
|
|
41
|
+
const ext = path.extname(targetPath).toLowerCase();
|
|
42
|
+
if (['.cpp', '.cxx', '.cc', '.hpp', '.hxx', '.h', '.h++'].includes(ext)) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
if (fs.existsSync(targetPath) && fs.statSync(targetPath).isDirectory()) {
|
|
47
|
+
return (fs.existsSync(path.join(targetPath, 'CMakeLists.txt')) ||
|
|
48
|
+
fs.existsSync(path.join(targetPath, 'Makefile')));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
async parseProject(workspaceRoot, config) {
|
|
57
|
+
this.ensureInitialized();
|
|
58
|
+
const defaultIgnore = [
|
|
59
|
+
'**/build/**',
|
|
60
|
+
'**/cmake-build-*/**',
|
|
61
|
+
'**/node_modules/**',
|
|
62
|
+
'**/vendor/**',
|
|
63
|
+
];
|
|
64
|
+
const ignorePatterns = [...defaultIgnore, ...(config.excludePatterns ?? [])];
|
|
65
|
+
const files = await glob('**/*.{cpp,cxx,cc,hpp,hxx,h}', {
|
|
66
|
+
cwd: workspaceRoot,
|
|
67
|
+
absolute: true,
|
|
68
|
+
ignore: ignorePatterns,
|
|
69
|
+
});
|
|
70
|
+
const rawFiles = await Promise.all(files.map(async (file) => {
|
|
71
|
+
const code = await fs.readFile(file, 'utf-8');
|
|
72
|
+
return this.bridge.parseCode(code, file);
|
|
73
|
+
}));
|
|
74
|
+
const merged = this.merger.merge(rawFiles);
|
|
75
|
+
const allEnums = rawFiles.flatMap((f) => f.enums);
|
|
76
|
+
const allFunctions = rawFiles.flatMap((f) => f.functions);
|
|
77
|
+
const entities = this.mapper.mapEntities(merged, allEnums, allFunctions, workspaceRoot);
|
|
78
|
+
const relations = this.mapper.mapRelations(merged, entities, workspaceRoot);
|
|
79
|
+
return {
|
|
80
|
+
version: '1.0',
|
|
81
|
+
language: 'cpp',
|
|
82
|
+
timestamp: new Date().toISOString(),
|
|
83
|
+
sourceFiles: files,
|
|
84
|
+
entities,
|
|
85
|
+
relations,
|
|
86
|
+
workspaceRoot,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
parseCode(code, filePath = 'source.cpp') {
|
|
90
|
+
this.ensureInitialized();
|
|
91
|
+
const rawFile = this.bridge.parseCode(code, filePath);
|
|
92
|
+
const merged = this.merger.merge([rawFile]);
|
|
93
|
+
const entities = this.mapper.mapEntities(merged, rawFile.enums, rawFile.functions, path.dirname(filePath));
|
|
94
|
+
const relations = this.mapper.mapRelations(merged, entities);
|
|
95
|
+
return {
|
|
96
|
+
version: '1.0',
|
|
97
|
+
language: 'cpp',
|
|
98
|
+
timestamp: new Date().toISOString(),
|
|
99
|
+
sourceFiles: [filePath],
|
|
100
|
+
entities,
|
|
101
|
+
relations,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
async dispose() {
|
|
105
|
+
this.initialized = false;
|
|
106
|
+
}
|
|
107
|
+
ensureInitialized() {
|
|
108
|
+
if (!this.initialized) {
|
|
109
|
+
throw new Error('CppPlugin not initialized. Call initialize() first.');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/cpp/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { RawCppFile } from './types.js';
|
|
2
|
+
export declare class TreeSitterBridge {
|
|
3
|
+
private parser;
|
|
4
|
+
private classBuilder;
|
|
5
|
+
constructor();
|
|
6
|
+
parseCode(code: string, filePath: string): RawCppFile;
|
|
7
|
+
private extractTopLevelNamespace;
|
|
8
|
+
private extractClasses;
|
|
9
|
+
private visitForClasses;
|
|
10
|
+
private extractOneClass;
|
|
11
|
+
private extractBases;
|
|
12
|
+
private extractEnums;
|
|
13
|
+
private visitForEnums;
|
|
14
|
+
private extractTopLevelFunctions;
|
|
15
|
+
private extractFunction;
|
|
16
|
+
private extractIncludes;
|
|
17
|
+
private extractTemplateParams;
|
|
18
|
+
private findDescendant;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=tree-sitter-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-sitter-bridge.d.ts","sourceRoot":"","sources":["../../../src/plugins/cpp/tree-sitter-bridge.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,YAAY,CAAC;AAE7E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAe;;IASnC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAgBrD,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,eAAe;IAuDvB,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;IAyDrB,OAAO,CAAC,wBAAwB;IAgChC,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,cAAc;CAQvB"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import Parser from 'tree-sitter';
|
|
2
|
+
import Cpp from 'tree-sitter-cpp';
|
|
3
|
+
import { ClassBuilder } from './builders/class-builder.js';
|
|
4
|
+
export class TreeSitterBridge {
|
|
5
|
+
parser;
|
|
6
|
+
classBuilder;
|
|
7
|
+
constructor() {
|
|
8
|
+
this.parser = new Parser();
|
|
9
|
+
this.parser.setLanguage(Cpp);
|
|
10
|
+
this.classBuilder = new ClassBuilder();
|
|
11
|
+
}
|
|
12
|
+
parseCode(code, filePath) {
|
|
13
|
+
const tree = this.parser.parse(code);
|
|
14
|
+
const root = tree.rootNode;
|
|
15
|
+
const namespace = this.extractTopLevelNamespace(root);
|
|
16
|
+
return {
|
|
17
|
+
filePath,
|
|
18
|
+
namespace,
|
|
19
|
+
classes: this.extractClasses(root, filePath, namespace),
|
|
20
|
+
enums: this.extractEnums(root, filePath, namespace),
|
|
21
|
+
functions: this.extractTopLevelFunctions(root, filePath, namespace),
|
|
22
|
+
includes: this.extractIncludes(root),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
extractTopLevelNamespace(root) {
|
|
26
|
+
for (const child of root.namedChildren) {
|
|
27
|
+
if (child.type === 'namespace_definition') {
|
|
28
|
+
const nameNode = child.childForFieldName('name');
|
|
29
|
+
return nameNode?.text ?? '';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return '';
|
|
33
|
+
}
|
|
34
|
+
extractClasses(root, filePath, fileNamespace) {
|
|
35
|
+
const classes = [];
|
|
36
|
+
this.visitForClasses(root, filePath, fileNamespace, '', classes);
|
|
37
|
+
return classes;
|
|
38
|
+
}
|
|
39
|
+
visitForClasses(node, filePath, fileNamespace, currentNs, out) {
|
|
40
|
+
for (const child of node.namedChildren) {
|
|
41
|
+
if (child.type === 'namespace_definition') {
|
|
42
|
+
const nameNode = child.childForFieldName('name');
|
|
43
|
+
const nsName = nameNode?.text ?? '';
|
|
44
|
+
const newNs = currentNs ? `${currentNs}::${nsName}` : nsName;
|
|
45
|
+
const body = child.childForFieldName('body');
|
|
46
|
+
if (body)
|
|
47
|
+
this.visitForClasses(body, filePath, fileNamespace, newNs, out);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (child.type === 'preproc_ifdef' ||
|
|
51
|
+
child.type === 'preproc_if' ||
|
|
52
|
+
child.type === 'preproc_else' ||
|
|
53
|
+
child.type === 'preproc_elif') {
|
|
54
|
+
this.visitForClasses(child, filePath, fileNamespace, currentNs, out);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (child.type === 'template_declaration') {
|
|
58
|
+
const templateParams = this.extractTemplateParams(child);
|
|
59
|
+
const innerClass = child.namedChildren.find((n) => n.type === 'class_specifier' || n.type === 'struct_specifier');
|
|
60
|
+
if (innerClass) {
|
|
61
|
+
const innerNameNode = innerClass.childForFieldName('name');
|
|
62
|
+
if (innerNameNode?.type === 'template_type')
|
|
63
|
+
continue;
|
|
64
|
+
const cls = this.extractOneClass(innerClass, filePath, currentNs);
|
|
65
|
+
if (cls) {
|
|
66
|
+
cls.templateParams = templateParams;
|
|
67
|
+
cls.name = `${cls.name}<${templateParams.join(', ')}>`;
|
|
68
|
+
out.push(cls);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (child.type === 'class_specifier' || child.type === 'struct_specifier') {
|
|
74
|
+
const cls = this.extractOneClass(child, filePath, currentNs);
|
|
75
|
+
if (cls)
|
|
76
|
+
out.push(cls);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
extractOneClass(node, filePath, currentNs) {
|
|
82
|
+
const nameNode = node.childForFieldName('name');
|
|
83
|
+
if (!nameNode)
|
|
84
|
+
return null;
|
|
85
|
+
const name = nameNode.text;
|
|
86
|
+
const kind = node.type === 'struct_specifier' ? 'struct' : 'class';
|
|
87
|
+
const qualifiedName = currentNs ? `${currentNs}::${name}` : name;
|
|
88
|
+
const bases = this.extractBases(node);
|
|
89
|
+
const bodyNode = node.childForFieldName('body');
|
|
90
|
+
const defaultVis = kind === 'struct' ? 'public' : 'private';
|
|
91
|
+
const { fields, methods } = bodyNode
|
|
92
|
+
? this.classBuilder.extractMembers(bodyNode, filePath, defaultVis)
|
|
93
|
+
: { fields: [], methods: [] };
|
|
94
|
+
return {
|
|
95
|
+
name,
|
|
96
|
+
qualifiedName,
|
|
97
|
+
kind,
|
|
98
|
+
bases,
|
|
99
|
+
fields,
|
|
100
|
+
methods,
|
|
101
|
+
sourceFile: filePath,
|
|
102
|
+
startLine: node.startPosition.row + 1,
|
|
103
|
+
endLine: node.endPosition.row + 1,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
extractBases(classNode) {
|
|
107
|
+
const bases = [];
|
|
108
|
+
const baseClause = classNode.namedChildren.find((n) => n.type === 'base_class_clause');
|
|
109
|
+
if (!baseClause)
|
|
110
|
+
return bases;
|
|
111
|
+
let currentAccess = 'private';
|
|
112
|
+
for (const child of baseClause.children) {
|
|
113
|
+
const text = child.text.toLowerCase();
|
|
114
|
+
if (text === 'public' || text === 'private' || text === 'protected') {
|
|
115
|
+
currentAccess = text;
|
|
116
|
+
}
|
|
117
|
+
else if (child.type === 'type_identifier' ||
|
|
118
|
+
child.type === 'qualified_identifier' ||
|
|
119
|
+
child.type === 'template_type') {
|
|
120
|
+
bases.push({ name: child.text, access: currentAccess });
|
|
121
|
+
currentAccess = 'private';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return bases;
|
|
125
|
+
}
|
|
126
|
+
extractEnums(root, filePath, namespace) {
|
|
127
|
+
const enums = [];
|
|
128
|
+
this.visitForEnums(root, filePath, namespace, enums);
|
|
129
|
+
return enums;
|
|
130
|
+
}
|
|
131
|
+
visitForEnums(node, filePath, namespace, out) {
|
|
132
|
+
for (const child of node.namedChildren) {
|
|
133
|
+
if (child.type === 'namespace_definition') {
|
|
134
|
+
const nsName = child.childForFieldName('name')?.text ?? '';
|
|
135
|
+
const newNs = namespace ? `${namespace}::${nsName}` : nsName;
|
|
136
|
+
const body = child.childForFieldName('body');
|
|
137
|
+
if (body)
|
|
138
|
+
this.visitForEnums(body, filePath, newNs, out);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (child.type === 'preproc_ifdef' ||
|
|
142
|
+
child.type === 'preproc_if' ||
|
|
143
|
+
child.type === 'preproc_else' ||
|
|
144
|
+
child.type === 'preproc_elif') {
|
|
145
|
+
this.visitForEnums(child, filePath, namespace, out);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (child.type === 'enum_specifier') {
|
|
149
|
+
const nameNode = child.childForFieldName('name');
|
|
150
|
+
if (!nameNode)
|
|
151
|
+
continue;
|
|
152
|
+
const name = nameNode.text;
|
|
153
|
+
const qualifiedName = namespace ? `${namespace}::${name}` : name;
|
|
154
|
+
const isScoped = child.children.some((n) => !n.isNamed && (n.text === 'class' || n.text === 'struct'));
|
|
155
|
+
const bodyNode = child.childForFieldName('body');
|
|
156
|
+
const members = bodyNode
|
|
157
|
+
? bodyNode.namedChildren
|
|
158
|
+
.filter((n) => n.type === 'enumerator')
|
|
159
|
+
.map((n) => n.childForFieldName('name')?.text ?? n.text)
|
|
160
|
+
: [];
|
|
161
|
+
out.push({
|
|
162
|
+
name,
|
|
163
|
+
qualifiedName,
|
|
164
|
+
isScoped,
|
|
165
|
+
members,
|
|
166
|
+
sourceFile: filePath,
|
|
167
|
+
startLine: child.startPosition.row + 1,
|
|
168
|
+
endLine: child.endPosition.row + 1,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
extractTopLevelFunctions(root, filePath, namespace) {
|
|
174
|
+
const fns = [];
|
|
175
|
+
for (const child of root.namedChildren) {
|
|
176
|
+
if (child.type === 'namespace_definition') {
|
|
177
|
+
const nsName = child.childForFieldName('name')?.text ?? '';
|
|
178
|
+
const body = child.childForFieldName('body');
|
|
179
|
+
const newNs = namespace ? `${namespace}::${nsName}` : nsName;
|
|
180
|
+
if (body)
|
|
181
|
+
fns.push(...this.extractTopLevelFunctions(body, filePath, newNs));
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (child.type === 'preproc_ifdef' ||
|
|
185
|
+
child.type === 'preproc_if' ||
|
|
186
|
+
child.type === 'preproc_else' ||
|
|
187
|
+
child.type === 'preproc_elif') {
|
|
188
|
+
fns.push(...this.extractTopLevelFunctions(child, filePath, namespace));
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (child.type === 'function_definition') {
|
|
192
|
+
const fn = this.extractFunction(child, filePath, namespace);
|
|
193
|
+
if (fn)
|
|
194
|
+
fns.push(fn);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return fns;
|
|
198
|
+
}
|
|
199
|
+
extractFunction(node, filePath, namespace) {
|
|
200
|
+
const declarator = this.findDescendant(node, 'function_declarator');
|
|
201
|
+
if (!declarator)
|
|
202
|
+
return null;
|
|
203
|
+
const nameNode = declarator.childForFieldName('declarator');
|
|
204
|
+
if (!nameNode)
|
|
205
|
+
return null;
|
|
206
|
+
const name = nameNode.text;
|
|
207
|
+
if (name.includes('::'))
|
|
208
|
+
return null;
|
|
209
|
+
const returnTypeNode = node.childForFieldName('type');
|
|
210
|
+
const returnType = returnTypeNode?.text ?? 'void';
|
|
211
|
+
const qualifiedName = namespace ? `${namespace}::${name}` : name;
|
|
212
|
+
return {
|
|
213
|
+
name,
|
|
214
|
+
qualifiedName,
|
|
215
|
+
returnType,
|
|
216
|
+
parameters: [],
|
|
217
|
+
isStatic: node.text.startsWith('static'),
|
|
218
|
+
sourceFile: filePath,
|
|
219
|
+
startLine: node.startPosition.row + 1,
|
|
220
|
+
endLine: node.endPosition.row + 1,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
extractIncludes(root) {
|
|
224
|
+
const includes = [];
|
|
225
|
+
for (const child of root.children) {
|
|
226
|
+
if (child.type === 'preproc_include') {
|
|
227
|
+
const pathNode = child.namedChildren.find((n) => n.type === 'string_literal' || n.type === 'system_lib_string');
|
|
228
|
+
if (pathNode) {
|
|
229
|
+
const raw = pathNode.text.replace(/^["<]|[">]$/g, '');
|
|
230
|
+
includes.push(raw);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return includes;
|
|
235
|
+
}
|
|
236
|
+
extractTemplateParams(templateNode) {
|
|
237
|
+
const paramList = templateNode.namedChildren.find((n) => n.type === 'template_parameter_list');
|
|
238
|
+
if (!paramList)
|
|
239
|
+
return [];
|
|
240
|
+
return paramList.namedChildren
|
|
241
|
+
.filter((n) => n.type === 'type_parameter_declaration')
|
|
242
|
+
.map((n) => {
|
|
243
|
+
const nameNode = n.namedChildren.find((c) => c.type === 'type_identifier');
|
|
244
|
+
return nameNode?.text ?? 'T';
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
findDescendant(node, type) {
|
|
248
|
+
if (node.type === type)
|
|
249
|
+
return node;
|
|
250
|
+
for (const child of node.namedChildren) {
|
|
251
|
+
const found = this.findDescendant(child, type);
|
|
252
|
+
if (found)
|
|
253
|
+
return found;
|
|
254
|
+
}
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=tree-sitter-bridge.js.map
|