cg-code-graph 0.17.0__tar.gz → 0.18.0__tar.gz
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.
- {cg_code_graph-0.17.0/cg_code_graph.egg-info → cg_code_graph-0.18.0}/PKG-INFO +5 -3
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/README.md +3 -2
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/__init__.py +1 -1
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/agent_rules.py +2 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/cli.py +4 -4
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/cache.py +1 -1
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/detect.py +33 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/env.py +5 -4
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/syntax_errors.py +2 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/coverage.py +25 -13
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/doctor.py +58 -5
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/indexer.py +11 -2
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/mcp_server.py +1 -1
- cg_code_graph-0.18.0/cg_code_graph/plugins/java/exact.py +352 -0
- cg_code_graph-0.18.0/cg_code_graph/plugins/java/plugin.py +1005 -0
- cg_code_graph-0.18.0/cg_code_graph/plugins/jvm/__init__.py +1 -0
- cg_code_graph-0.18.0/cg_code_graph/plugins/jvm/interop.py +212 -0
- cg_code_graph-0.18.0/cg_code_graph/plugins/jvm/spring.py +959 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/kotlin/exact.py +232 -39
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/kotlin/plugin.py +54 -212
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/stubs/plugins.py +2 -1
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/__init__.py +1 -1
- cg_code_graph-0.18.0/cg_code_graph/presets/java.yaml +5 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/kotlin.yaml +1 -3
- cg_code_graph-0.18.0/cg_code_graph/presets/spring.yaml +22 -0
- cg_code_graph-0.18.0/cg_code_graph/viz/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0/cg_code_graph.egg-info}/PKG-INFO +5 -3
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph.egg-info/SOURCES.txt +12 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph.egg-info/requires.txt +1 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/pyproject.toml +1 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_bridges.py +2 -2
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_coverage.py +2 -1
- cg_code_graph-0.18.0/tests/test_docs_languages.py +58 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_env.py +2 -2
- cg_code_graph-0.18.0/tests/test_java.py +225 -0
- cg_code_graph-0.18.0/tests/test_java_exact.py +308 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_kotlin_mixed.py +20 -17
- cg_code_graph-0.18.0/tests/test_spring.py +159 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/LICENSE +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/MANIFEST.in +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/__main__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/affected.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/agents.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/aitools.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/android_ipc.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/apple_ipc.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/apps.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/blindspots.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/bridges.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/brokers.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/concepts.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/config.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/extractors.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/fsutil.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/generated.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/model.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/paths.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/plugin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/core/store.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/dart_isolates.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/explore.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/external.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/graphql.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/hooks.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/jobs.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/link.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/lint_async.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/local_ipc.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/local_sockets.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/mcp_install.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/parity.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/parity_structure.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/payload.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plans.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/platform_scan.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/platforms.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/astro/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/astro/content.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/astro/plugin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/cfamily/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/cfamily/plugin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/cfamily/syntax.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/dart/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/dart/bridges.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/dart/extractor/bin/extract.dart +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/dart/extractor/pubspec.lock +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/dart/extractor/pubspec.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/dart/http.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/dart/models.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/dart/plugin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/dart/program.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/django/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/django/extras.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/django/models.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/django/plugin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/django/schemas.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/django/shapes.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/django/urls.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/express/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/express/plugin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/flutter/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/flutter/plugin.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/kotlin → cg_code_graph-0.18.0/cg_code_graph/plugins/java}/__init__.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/laravel → cg_code_graph-0.18.0/cg_code_graph/plugins/kotlin}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/kotlin/reparse.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/native → cg_code_graph-0.18.0/cg_code_graph/plugins/laravel}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/laravel/broadcast.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/laravel/plugin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/laravel/tests.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/laravel/values.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/nest → cg_code_graph-0.18.0/cg_code_graph/plugins/native}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/native/gates.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/native/runner.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/native/scipread.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/native/ts.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/nextjs → cg_code_graph-0.18.0/cg_code_graph/plugins/nest}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/nest/plugin.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/nuxt → cg_code_graph-0.18.0/cg_code_graph/plugins/nextjs}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/nextjs/plugin.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/php → cg_code_graph-0.18.0/cg_code_graph/plugins/nuxt}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/nuxt/plugin.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/python → cg_code_graph-0.18.0/cg_code_graph/plugins/php}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/php/external.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/php/extractor/composer.json +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/php/extractor/composer.lock +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/php/extractor/extract.php +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/php/gating.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/php/plugin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/php/strings.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/pyweb → cg_code_graph-0.18.0/cg_code_graph/plugins/python}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/python/aitools.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/python/external.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/python/fields.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/python/plugin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/python/refs.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/python/roots.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/python/socketio.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/python/subproc.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/python/tests.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/python/values.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/rust → cg_code_graph-0.18.0/cg_code_graph/plugins/pyweb}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/pyweb/plugin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/pyweb/values.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/scip → cg_code_graph-0.18.0/cg_code_graph/plugins/rust}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/rust/cargo.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/rust/plugin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/rust/syntax.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/stubs → cg_code_graph-0.18.0/cg_code_graph/plugins/scip}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/scip/importer.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/scip/scip.proto +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/scip/scip_pb2.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/swift → cg_code_graph-0.18.0/cg_code_graph/plugins/stubs}/__init__.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/ts → cg_code_graph-0.18.0/cg_code_graph/plugins/swift}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/swift/baseurl.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/swift/exact.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/swift/indexstore.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/swift/packages.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/swift/plugin.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/plugins/tsweb → cg_code_graph-0.18.0/cg_code_graph/plugins/ts}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/ts/baseurl.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/ts/extractor/extract.mjs +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/ts/extractor/fw.mjs +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/ts/extractor/package-lock.json +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/ts/extractor/package.json +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/ts/nav.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/ts/plugin.py +0 -0
- {cg_code_graph-0.17.0/cg_code_graph/viz → cg_code_graph-0.18.0/cg_code_graph/plugins/tsweb}/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/tsweb/common.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/plugins/tsweb/data.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/c_cpp.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/common.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/dart.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/django-ninja.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/django.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/djangorestframework.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/express.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/laravel.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/nest.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/nextjs.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/nuxt.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/php.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/python.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/rust.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/swift.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/presets/typescript.yaml +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/process_runs.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/protocols/__init__.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/protocols/builtin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/protocols/matchers.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/protocols/view.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/query.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/realtime.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/realtime_events.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/realtime_native.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/realtime_ws.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/roundtrip.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/routes.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/rpc.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/sdk_systems.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/sockets.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/starters.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/tests_index.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/udp_apps.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/graph.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/server.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/static/app.css +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/static/app.js +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/static/index.html +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/static/layered.js +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/static/vendor/VERSIONS.txt +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/static/vendor/cose-base.js +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/static/vendor/cytoscape-fcose.js +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/static/vendor/cytoscape.min.js +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/static/vendor/layout-base.js +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/tools/package-lock.json +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/tools/package.json +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/viz/tools/shoot.mjs +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/watch.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/webhooks.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph/xcode.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph.egg-info/dependency_links.txt +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph.egg-info/entry_points.txt +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/cg_code_graph.egg-info/top_level.txt +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/setup.cfg +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_affected.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_agents_install.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_agents_md.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_ai_tools.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_android_ipc.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_apple_ipc.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_astro.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_astro_content.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_astro_server.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_bridges_pigeon_monorepo.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_brokers.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_cache_clean.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_cache_invalidation.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_cache_migration.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_channels_tests.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_cli_output.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_completeness.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_config_extras.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_coverage_ts_hint.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_dart_isolates.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_dispatch_interfaces.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_django_flutter.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_docs_links.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_enum_constants.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_explore.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_external.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_gating.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_generated.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_graphql.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_hooks.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_impact_overrides.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_index_isolation.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_inherited_overrides.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_jobs.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_js_refs.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_js_runtime.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_kotlin.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_kotlin_binding.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_kotlin_exact.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_kotlin_fields.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_kotlin_nav_consts.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_kotlin_props.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_laravel_determinism.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_laravel_resources.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_lint_async.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_local_ipc.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_local_sockets.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_mcp.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_mcp_index.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_mcp_install.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_native_cfamily.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_native_concurrency.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_native_rust.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_nuxt_import_dirs.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_nuxt_rootsrc.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_packaging.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_parity.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_parity_structure.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_php_props.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_plain_js.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_plans.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_platform_gaps.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_platform_type_variants.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_platforms.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_platforms_apple.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_presets_config.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_process_ipc.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_process_runs.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_protocols.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_app_tests_module.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_collection_chains.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_compat.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_entry_refs.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_fields.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_infer_cycles.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_roots.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_subprocess_tests.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_tests.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_web_hosts.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_web_routes.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_python_web_routes_more.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_realtime.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_realtime_native.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_roundtrip.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_route_tables.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_routes_search_explain.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_rpc.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_scip_health.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_sdk_external.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_snippet.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_sockets.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_starters_budget.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_binding.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_exact.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_facts.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_fields.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_modules.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_more.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_nav_values.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_parse_errors.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_props.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_sdk.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_testing.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_swift_values.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_tests_scope.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_ts_fields.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_ts_fields_js_vue.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_ts_file_specs.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_ts_frameworks.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_ts_nuxt.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_ts_src_tsconfig.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_values.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_viz.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_vue_nav.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_watch.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_webhooks.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_websockets.py +0 -0
- {cg_code_graph-0.17.0 → cg_code_graph-0.18.0}/tests/test_workspace_link.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cg-code-graph
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.18.0
|
|
4
4
|
Summary: cg: a code graph of routes, calls, data access and platform boundaries for agents and humans (CLI + MCP server)
|
|
5
5
|
Author: cyberchronos00
|
|
6
6
|
License-Expression: MIT
|
|
@@ -17,6 +17,7 @@ Requires-Dist: tree-sitter-rust>=0.23
|
|
|
17
17
|
Requires-Dist: tree-sitter-c>=0.23
|
|
18
18
|
Requires-Dist: tree-sitter-cpp>=0.23
|
|
19
19
|
Requires-Dist: tree-sitter-kotlin>=1.0
|
|
20
|
+
Requires-Dist: tree-sitter-java>=0.23
|
|
20
21
|
Requires-Dist: tree-sitter-swift<0.7.4,>=0.6
|
|
21
22
|
Provides-Extra: dev
|
|
22
23
|
Requires-Dist: pytest>=8; extra == "dev"
|
|
@@ -76,11 +77,12 @@ dependents: 18 nodes (code: 6, entry points: 9, other: 3)
|
|
|
76
77
|
|   | Nuxt / Vue, NestJS, Next.js, Astro, Express, Fastify, Koa, Hono | exact (TypeScript compiler API) | [TS frameworks](https://code-graph.cyberchronos00.workers.dev/docs/ts-frameworks) |
|
|
77
78
|
|  | Laravel (routes and middleware, queues, broadcasting) | exact (nikic/php-parser; needs PHP 8.2+) | [PHP](https://code-graph.cyberchronos00.workers.dev/docs/php) |
|
|
78
79
|
|  | Flutter | exact (Dart analyzer; needs the Dart SDK) | [Platforms](https://code-graph.cyberchronos00.workers.dev/docs/platforms) |
|
|
79
|
-
|  | Android, Kotlin Multiplatform | heuristic; exact with scip-java (opt-in) | [Kotlin](https://code-graph.cyberchronos00.workers.dev/docs/kotlin) |
|
|
80
|
+
|  | Android, Kotlin Multiplatform, Spring | heuristic; exact with scip-java (opt-in) | [Kotlin](https://code-graph.cyberchronos00.workers.dev/docs/kotlin) |
|
|
81
|
+
|  | Spring (routes, guards, beans, tables, clients) | heuristic; exact with scip-java (opt-in) | [Java](https://code-graph.cyberchronos00.workers.dev/docs/java) |
|
|
80
82
|
|  | iOS / SwiftPM | heuristic; exact with the Swift index store (opt-in) | [Swift](https://code-graph.cyberchronos00.workers.dev/docs/swift) |
|
|
81
83
|
|    | crates / modules, entry points, FFI, `#[cfg]` / `#if` gates | heuristic; exact with rust-analyzer / scip-clang | [Rust, C and C++](https://code-graph.cyberchronos00.workers.dev/docs/native) |
|
|
82
84
|
|
|
83
|
-
Go
|
|
85
|
+
Go and others: import a SCIP index with `cg index --scip FILE`. Run `cg doctor` to see exact / heuristic per language on your machine.
|
|
84
86
|
|
|
85
87
|
## What you get
|
|
86
88
|
|
|
@@ -50,11 +50,12 @@ dependents: 18 nodes (code: 6, entry points: 9, other: 3)
|
|
|
50
50
|
|   | Nuxt / Vue, NestJS, Next.js, Astro, Express, Fastify, Koa, Hono | exact (TypeScript compiler API) | [TS frameworks](https://code-graph.cyberchronos00.workers.dev/docs/ts-frameworks) |
|
|
51
51
|
|  | Laravel (routes and middleware, queues, broadcasting) | exact (nikic/php-parser; needs PHP 8.2+) | [PHP](https://code-graph.cyberchronos00.workers.dev/docs/php) |
|
|
52
52
|
|  | Flutter | exact (Dart analyzer; needs the Dart SDK) | [Platforms](https://code-graph.cyberchronos00.workers.dev/docs/platforms) |
|
|
53
|
-
|  | Android, Kotlin Multiplatform | heuristic; exact with scip-java (opt-in) | [Kotlin](https://code-graph.cyberchronos00.workers.dev/docs/kotlin) |
|
|
53
|
+
|  | Android, Kotlin Multiplatform, Spring | heuristic; exact with scip-java (opt-in) | [Kotlin](https://code-graph.cyberchronos00.workers.dev/docs/kotlin) |
|
|
54
|
+
|  | Spring (routes, guards, beans, tables, clients) | heuristic; exact with scip-java (opt-in) | [Java](https://code-graph.cyberchronos00.workers.dev/docs/java) |
|
|
54
55
|
|  | iOS / SwiftPM | heuristic; exact with the Swift index store (opt-in) | [Swift](https://code-graph.cyberchronos00.workers.dev/docs/swift) |
|
|
55
56
|
|    | crates / modules, entry points, FFI, `#[cfg]` / `#if` gates | heuristic; exact with rust-analyzer / scip-clang | [Rust, C and C++](https://code-graph.cyberchronos00.workers.dev/docs/native) |
|
|
56
57
|
|
|
57
|
-
Go
|
|
58
|
+
Go and others: import a SCIP index with `cg index --scip FILE`. Run `cg doctor` to see exact / heuristic per language on your machine.
|
|
58
59
|
|
|
59
60
|
## What you get
|
|
60
61
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""code-graph: deterministic code knowledge graph (beta)."""
|
|
2
|
-
__version__ = "0.
|
|
2
|
+
__version__ = "0.18.0"
|
|
@@ -44,6 +44,8 @@ Pipe long output through `head` or `tail`:
|
|
|
44
44
|
cg impact <symbol> --db out/graph.db | head -n 40
|
|
45
45
|
While iterating, run one file: `pytest -q -x tests/test_x.py`.
|
|
46
46
|
Run the full suite once at the end: `pytest -q 2>&1 | tail -n 30`.
|
|
47
|
+
|
|
48
|
+
A new language or framework updates README's Supported languages table, its docs page, `docs-site/app/utils/docs-nav.ts`, and `docs-site/app/components/HomeStacks.vue` in the same change.
|
|
47
49
|
"""
|
|
48
50
|
|
|
49
51
|
|
|
@@ -118,9 +118,9 @@ def main(argv=None):
|
|
|
118
118
|
p.add_argument("--dry-run", action="store_true", help="list what would be removed, delete nothing")
|
|
119
119
|
p.add_argument("--json", action="store_true")
|
|
120
120
|
p = sub.add_parser("setup", help="install the Node / PHP / Dart extractor dependencies (into the user cache; "
|
|
121
|
-
"otherwise done on the first index)")
|
|
121
|
+
"otherwise done on the first index). `java` prints the JDK 17+ / scip-java hint")
|
|
122
122
|
p.add_argument("languages", nargs="*", metavar="LANG",
|
|
123
|
-
help="typescript, php, dart (default:
|
|
123
|
+
help="typescript, php, dart, java (default: typescript, php, dart whose toolchain is installed)")
|
|
124
124
|
p.add_argument("--quiet", action="store_true")
|
|
125
125
|
p.add_argument("--prune", action="store_true",
|
|
126
126
|
help="remove extractor installs this version does not use (left by updates that changed a lock "
|
|
@@ -408,9 +408,9 @@ def main(argv=None):
|
|
|
408
408
|
return 0
|
|
409
409
|
if a.cmd == "setup":
|
|
410
410
|
from .doctor import setup
|
|
411
|
-
bad = [x for x in a.languages if x not in ("typescript", "php", "dart")]
|
|
411
|
+
bad = [x for x in a.languages if x not in ("typescript", "php", "dart", "java")]
|
|
412
412
|
if bad:
|
|
413
|
-
print(f"cg setup: unknown language {bad[0]!r} (typescript, php, dart)", file=sys.stderr)
|
|
413
|
+
print(f"cg setup: unknown language {bad[0]!r} (typescript, php, dart, java)", file=sys.stderr)
|
|
414
414
|
return 2
|
|
415
415
|
return setup(a.languages or None, quiet=a.quiet)
|
|
416
416
|
if a.cmd == "coverage":
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""The per-user cache: where it lives, what is in it, and `cg clean`.
|
|
2
2
|
|
|
3
3
|
Root (one lookup for every user: extractors, SCIP outputs, parse caches, the Swift build directory):
|
|
4
|
-
$CG_CACHE (older names still work through 0.
|
|
4
|
+
$CG_CACHE (older names still work through 0.18.x; see core/env.py), else
|
|
5
5
|
%LOCALAPPDATA%\\cg on Windows, else $XDG_CACHE_HOME/cg, else ~/.cache/cg. The first use of that
|
|
6
6
|
default moves a leftover `codegraph` directory to `cg` and drops `swift-build/` (SwiftPM build
|
|
7
7
|
directories embed absolute paths). An explicit cache path is used as given and is not moved.
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
import json
|
|
5
|
+
import os
|
|
5
6
|
import re
|
|
6
7
|
from pathlib import Path
|
|
7
8
|
|
|
9
|
+
from ..presets import skip_dirs
|
|
10
|
+
|
|
8
11
|
MARKERS = {
|
|
9
12
|
# language: files/globs that indicate it
|
|
10
13
|
"php": ["composer.json", "artisan"],
|
|
@@ -80,4 +83,34 @@ def detect(root: Path) -> dict:
|
|
|
80
83
|
fw[extra] = {}
|
|
81
84
|
if "typescript" in deps:
|
|
82
85
|
langs.setdefault("typescript", ["package.json:typescript"])
|
|
86
|
+
if _spring_build(root):
|
|
87
|
+
fw["spring"] = {}
|
|
83
88
|
return {"languages": langs, "frameworks": fw}
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def _spring_build(root: Path) -> bool:
|
|
92
|
+
"""Spring Boot Gradle plugin or a ``spring-boot-starter-*`` dependency in Gradle / Maven files.
|
|
93
|
+
|
|
94
|
+
The root build file and one module level (``app/build.gradle.kts``). Deeper trees stay out so a
|
|
95
|
+
monorepo's example apps do not mark the repository root.
|
|
96
|
+
"""
|
|
97
|
+
names = {"build.gradle", "build.gradle.kts", "pom.xml"}
|
|
98
|
+
rx = re.compile(r"org\.springframework\.boot|spring-boot-starter(?:-[\w.-]+)?")
|
|
99
|
+
skip = skip_dirs("common") | skip_dirs("common", "scan_skip_dirs")
|
|
100
|
+
for dp, dn, fn in os.walk(root):
|
|
101
|
+
rel = os.path.relpath(dp, root)
|
|
102
|
+
depth = 0 if rel == "." else len(Path(rel).parts)
|
|
103
|
+
if depth > 1:
|
|
104
|
+
dn[:] = []
|
|
105
|
+
continue
|
|
106
|
+
dn[:] = [d for d in dn if d not in skip and not d.startswith(".")]
|
|
107
|
+
for name in fn:
|
|
108
|
+
if name not in names:
|
|
109
|
+
continue
|
|
110
|
+
try:
|
|
111
|
+
text = (Path(dp) / name).read_text(errors="replace")[:200_000]
|
|
112
|
+
except OSError:
|
|
113
|
+
continue
|
|
114
|
+
if rx.search(text):
|
|
115
|
+
return True
|
|
116
|
+
return False
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Process environment: ``CG_*`` names, with ``CODEGRAPH_*`` aliases through 0.
|
|
1
|
+
"""Process environment: ``CG_*`` names, with ``CODEGRAPH_*`` aliases through 0.18.x.
|
|
2
2
|
|
|
3
3
|
``get`` reads ``os.environ`` on every call. A legacy name that is set produces one stderr
|
|
4
4
|
warning per name per process. ``CG_*`` wins when both are set. ``MCP_TOOLS`` has no legacy
|
|
@@ -13,7 +13,8 @@ import sys
|
|
|
13
13
|
SUFFIXES = (
|
|
14
14
|
"CACHE", "CACHE_DIR", "CARGO", "CFAMILY", "COMPDB", "C_MASK_ANNOTATIONS", "C_MAX_MACRO_REFS",
|
|
15
15
|
"C_SCIP", "C_SCIP_FILE", "EXCLUDE_DIRS", "INCLUDE_DIRS", "INDEXER_TIMEOUT", "JOBS",
|
|
16
|
-
"
|
|
16
|
+
"JAVA_SCIP", "JAVA_SCIP_FILE", "KOTLIN_SCIP", "KOTLIN_SCIP_FILE", "LIBINDEXSTORE",
|
|
17
|
+
"MAX_FILE_BYTES", "NODE", "NO_CACHE",
|
|
17
18
|
"NO_CARGO", "NO_HOOKS", "NO_STALE_CHECK", "RUST_ANALYZER", "RUST_BUILD_SCRIPTS", "RUST_SCIP",
|
|
18
19
|
"RUST_SCIP_FILE", "RUST_TARGETS", "SCIP_CLANG", "SCIP_JAVA", "SWIFT", "SWIFT_INDEX",
|
|
19
20
|
"SWIFT_INDEX_STORE",
|
|
@@ -34,9 +35,9 @@ def _warn(old: str, new: str, *, both: bool) -> None:
|
|
|
34
35
|
return
|
|
35
36
|
_warned.add(old)
|
|
36
37
|
if both:
|
|
37
|
-
extra = f"{new} is set too and wins; the CODEGRAPH_* names are removed in 0.
|
|
38
|
+
extra = f"{new} is set too and wins; the CODEGRAPH_* names are removed in 0.19.0"
|
|
38
39
|
else:
|
|
39
|
-
extra = "the CODEGRAPH_* names are removed in 0.
|
|
40
|
+
extra = "the CODEGRAPH_* names are removed in 0.19.0"
|
|
40
41
|
print(f"cg: {old} is deprecated, use {new} ({extra})", file=sys.stderr)
|
|
41
42
|
|
|
42
43
|
|
|
@@ -20,6 +20,8 @@ _SWIFT_MODS = (r"(?:(?:public|private|fileprivate|internal|open|package|static|f
|
|
|
20
20
|
DECL = {
|
|
21
21
|
"swift": re.compile(r"^[ \t]*(?:@[\w.]+(?:\([^)\n]*\))?\s+)*" + _SWIFT_MODS +
|
|
22
22
|
r"(func|init|class|struct|enum|protocol|extension|actor)\b[ \t]*([A-Za-z_]\w*)?", re.M),
|
|
23
|
+
"java": re.compile(r"^[ \t]*(?:(?:public|private|protected|static|final|abstract|sealed|native|synchronized|"
|
|
24
|
+
r"default|strictfp)\s+)*(class|interface|enum|record)\s+([A-Za-z_]\w*)", re.M),
|
|
23
25
|
"kotlin": re.compile(r"^[ \t]*(?:@[\w.]+(?:\([^)\n]*\))?\s+)*(?:(?:public|private|internal|protected|open|abstract|"
|
|
24
26
|
r"override|suspend|inline|data|sealed|enum|annotation|inner|value|companion|actual|expect|"
|
|
25
27
|
r"operator|infix|tailrec|external)\s+)*(fun|class|interface|object)\b[ \t]*"
|
|
@@ -22,13 +22,14 @@ SUPPORTED = {
|
|
|
22
22
|
"rust": (".rs",),
|
|
23
23
|
"c_cpp": (".c", ".h", ".cc", ".cpp", ".cxx", ".c++", ".hpp", ".hh", ".hxx", ".h++", ".ipp", ".inl"),
|
|
24
24
|
"kotlin": (".kt", ".kts"),
|
|
25
|
+
"java": (".java",),
|
|
25
26
|
"swift": (".swift",),
|
|
26
27
|
}
|
|
27
|
-
# source types without a native plugin (go
|
|
28
|
+
# source types without a native plugin (go can be imported from a SCIP index). A generic "looks like source" rule:
|
|
28
29
|
# text source extensions of programming / scripting languages, plus a shebang for extensionless scripts (SHEBANGS).
|
|
29
30
|
# Data, markup, config and asset extensions are not listed, so they never count as unsupported source.
|
|
30
31
|
UNSUPPORTED = {
|
|
31
|
-
".go": "go", ".
|
|
32
|
+
".go": "go", ".rb": "ruby", ".cs": "csharp",
|
|
32
33
|
".scala": "scala", ".ex": "elixir", ".exs": "elixir", ".m": "objective-c", ".mm": "objective-c", ".lua": "lua",
|
|
33
34
|
".pl": "perl", ".pm": "perl", ".clj": "clojure", ".erl": "erlang", ".hrl": "erlang", ".hs": "haskell", ".fs": "fsharp",
|
|
34
35
|
".fsx": "fsharp", ".groovy": "groovy", ".r": "r", ".jl": "julia", ".zig": "zig", ".sol": "solidity",
|
|
@@ -53,7 +54,7 @@ BUCKET_TEXT = {"parse_failed": "parse failed", "skipped_oversize": "over size li
|
|
|
53
54
|
BUCKET_SHORT = {"parse_failed": "parse failed", "skipped_oversize": "over size limit", "unmapped": "unmapped",
|
|
54
55
|
"excluded": "excluded"}
|
|
55
56
|
LANG_LABEL = {"php": "PHP", "typescript": "TypeScript / JavaScript", "python": "Python", "dart": "Dart", "rust": "Rust",
|
|
56
|
-
"c_cpp": "C / C++", "kotlin": "Kotlin", "swift": "Swift"}
|
|
57
|
+
"c_cpp": "C / C++", "kotlin": "Kotlin", "java": "Java", "swift": "Swift"}
|
|
57
58
|
MAX_PATHS = 500 # file paths stored per bucket in the index (counts are always exact)
|
|
58
59
|
SHOW_PATHS = 5 # shown per bucket by default (`cg coverage --all-files` / coverage(all_files=true) for all)
|
|
59
60
|
HINTS = {
|
|
@@ -73,11 +74,15 @@ HINTS = {
|
|
|
73
74
|
"CG_SWIFT_INDEX=1 (SwiftPM: runs `swift build --enable-index-store`; needs a Swift toolchain) or "
|
|
74
75
|
"CG_SWIFT_INDEX_STORE to an existing index store (docs/swift.md#exact-mode)",
|
|
75
76
|
"go": "no native plugin: index with scip-go and pass `--scip index.scip`",
|
|
76
|
-
"java": "
|
|
77
|
+
"java": "heuristic mode (tree-sitter syntax layer, receiver-type call resolution){layer}. "
|
|
78
|
+
"For compiler-resolved references set CG_JAVA_SCIP=1 (or CG_KOTLIN_SCIP=1; one scip-java run serves both) "
|
|
79
|
+
"or pass `--scip index.scip`. install.sh --with java installs scip-java (JDK 17, 21 or 25). "
|
|
80
|
+
"docs/java.md#exact-mode",
|
|
77
81
|
}
|
|
78
82
|
# tree-sitter modules of the syntax layer per language: the hint names the ones missing (none: no install hint, #75)
|
|
79
83
|
LAYER_MODULES = {"rust": ("tree_sitter", "tree_sitter_rust"), "c_cpp": ("tree_sitter", "tree_sitter_c", "tree_sitter_cpp"),
|
|
80
|
-
"kotlin": ("tree_sitter", "tree_sitter_kotlin"), "
|
|
84
|
+
"kotlin": ("tree_sitter", "tree_sitter_kotlin"), "java": ("tree_sitter", "tree_sitter_java"),
|
|
85
|
+
"swift": ("tree_sitter", "tree_sitter_swift")}
|
|
81
86
|
|
|
82
87
|
|
|
83
88
|
def hint(lang: str) -> str | None:
|
|
@@ -111,7 +116,7 @@ class Scan:
|
|
|
111
116
|
self.counts: Counter = Counter()
|
|
112
117
|
self.paths: dict[str, list[str]] = {}
|
|
113
118
|
self.scripts: Counter = Counter()
|
|
114
|
-
self.bridge_paths: list[str] = [] # Java / ObjC files
|
|
119
|
+
self.bridge_paths: list[str] = [] # Java / ObjC files scanned for bridge receivers (Java is also a language plugin)
|
|
115
120
|
|
|
116
121
|
def files(self, exts) -> list[str]:
|
|
117
122
|
return [f for e in exts for f in self.paths.get(e, [])]
|
|
@@ -175,7 +180,9 @@ def scan_tree(root: str | Path, rules=None, classifier=None) -> Scan:
|
|
|
175
180
|
sc.counts[ext] += 1
|
|
176
181
|
if ext in _SUPPORTED_EXTS:
|
|
177
182
|
sc.paths.setdefault(ext, []).append(rel_dir + fn)
|
|
178
|
-
|
|
183
|
+
# .java is a language plugin and still a bridge receiver source (Android
|
|
184
|
+
# @CapacitorPlugin / @ReactMethod). .m / .mm stay bridge-only until they have one.
|
|
185
|
+
if ext == ".java" or (ext in (".m", ".mm") and ext not in _SUPPORTED_EXTS):
|
|
179
186
|
sc.bridge_paths.append(rel_dir + fn)
|
|
180
187
|
elif not fn.startswith(".") and is_real_file(p):
|
|
181
188
|
lang = _shebang(p)
|
|
@@ -271,6 +278,15 @@ def _status(lang: str, st: dict | None) -> tuple[str, str | None]:
|
|
|
271
278
|
part += ("; skipped modules: " + ", ".join(m["module"] for m in sc["skipped_modules"][:5])
|
|
272
279
|
+ f" ({sc['skipped_modules'][0]['reason']})")
|
|
273
280
|
return "exact", f"scip-java index ({sc.get('source', 'scip')}){part}"
|
|
281
|
+
if lang == "java" and mode == "heuristic":
|
|
282
|
+
why = (st.get("scip") or {}).get("status") if isinstance(st.get("scip"), dict) else None
|
|
283
|
+
return "heuristic", ("tree-sitter syntax layer with receiver-type call resolution; no compiler index"
|
|
284
|
+
+ (f": {why}" if why else ""))
|
|
285
|
+
if lang == "java" and mode == "scip":
|
|
286
|
+
sc = st.get("scip") if isinstance(st.get("scip"), dict) else {}
|
|
287
|
+
n, k = st.get("scip_files"), st.get("files")
|
|
288
|
+
part = f"; {k - n} of {k} Java files not in the index keep heuristic calls" if n is not None and k and n < k else ""
|
|
289
|
+
return "exact", f"scip-java index ({sc.get('source', 'scip')}){part}"
|
|
274
290
|
if lang == "typescript" and st.get("program_files") == 0 and not st.get("nodes"):
|
|
275
291
|
return "not_indexed", "the TypeScript plugin ran but found no source files (tsconfig include / source dirs)"
|
|
276
292
|
return "exact", None
|
|
@@ -349,10 +365,6 @@ def compute(root: str | Path, plugins: dict, scip_imported: bool = False, report
|
|
|
349
365
|
other[lang]["reason"] = st.get("reason")
|
|
350
366
|
elif "status" not in st:
|
|
351
367
|
other[lang]["status"] = "exact" # a SCIP indexer ran
|
|
352
|
-
kj = ((plugins.get("kotlin") or {}).get("java") or {})
|
|
353
|
-
if kj.get("documents") and "java" in other and other["java"]["status"] == "unsupported":
|
|
354
|
-
other["java"].update(status="scip", reason=f"{kj['documents']} Java file(s) imported from the Kotlin build's "
|
|
355
|
-
"scip-java index (Kotlin exact mode)")
|
|
356
368
|
for o in other.values():
|
|
357
369
|
if o["status"] == "unsupported":
|
|
358
370
|
if scip_imported and o["language"] in ("go", "java"):
|
|
@@ -632,7 +644,7 @@ def render_summary(covs: dict[str, dict | None], db: str | None = None) -> str:
|
|
|
632
644
|
line += f"; fix: {e['hint']}"
|
|
633
645
|
out.append(line)
|
|
634
646
|
for e in (cov or {}).get("languages", []): # the mode an exact-capable language ran in, and why
|
|
635
|
-
if e["language"] in ("kotlin", "swift") and not _is_gap(e) and e.get("reason"):
|
|
647
|
+
if e["language"] in ("kotlin", "swift", "java") and not _is_gap(e) and e.get("reason"):
|
|
636
648
|
out.append(f" {e['language']} {e['files']} {e['status']}: {e['reason']}")
|
|
637
649
|
se = [e for e in (cov or {}).get("languages", []) if e.get("syntax_errors")]
|
|
638
650
|
if se:
|
|
@@ -691,7 +703,7 @@ def render(covs: dict[str, dict | None], all_files: bool = False) -> str:
|
|
|
691
703
|
for e in (cov or {}).get("languages", []):
|
|
692
704
|
out += syntax_error_lines(e, all_files)
|
|
693
705
|
for e in (cov or {}).get("languages", []): # which mode an exact-capable language ran in, and why
|
|
694
|
-
if e["language"] in ("kotlin", "swift") and not _is_gap(e) and e.get("reason"):
|
|
706
|
+
if e["language"] in ("kotlin", "swift", "java") and not _is_gap(e) and e.get("reason"):
|
|
695
707
|
out.append(f" {e['language']}: {e['files']} files {e['status']}: {e['reason']}")
|
|
696
708
|
if all_files:
|
|
697
709
|
for e in (cov or {}).get("languages", []):
|
|
@@ -24,13 +24,15 @@ INSTALL_DOC = "docs/install.md"
|
|
|
24
24
|
REPO = "https://github.com/cyberchronos00/code-graph"
|
|
25
25
|
GRAMMARS = {"rust": "tree_sitter_rust", "c_cpp": "tree_sitter_c", "kotlin": "tree_sitter_kotlin", "swift": "tree_sitter_swift"}
|
|
26
26
|
PIP_NAMES = {"tree_sitter": "tree-sitter", "tree_sitter_rust": "tree-sitter-rust", "tree_sitter_c": "tree-sitter-c",
|
|
27
|
-
"tree_sitter_cpp": "tree-sitter-cpp", "tree_sitter_kotlin": "tree-sitter-kotlin",
|
|
27
|
+
"tree_sitter_cpp": "tree-sitter-cpp", "tree_sitter_kotlin": "tree-sitter-kotlin",
|
|
28
|
+
"tree_sitter_java": "tree-sitter-java", "tree_sitter_swift": "tree-sitter-swift"}
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
# language -> the plugin packages its `cg index` run loads (besides the indexer, which loads all of them)
|
|
31
32
|
PLUGIN_PACKAGES = {"python": ("python", "pyweb", "django"), "typescript": ("ts", "tsweb", "nuxt", "nest", "nextjs", "express"),
|
|
32
33
|
"php": ("php", "laravel"), "dart": ("dart", "flutter"), "rust": ("rust", "native", "scip"),
|
|
33
|
-
"c_cpp": ("cfamily", "native", "scip"), "kotlin": ("kotlin", "scip"), "
|
|
34
|
+
"c_cpp": ("cfamily", "native", "scip"), "kotlin": ("kotlin", "scip"), "java": ("java",),
|
|
35
|
+
"swift": ("swift",)}
|
|
34
36
|
|
|
35
37
|
|
|
36
38
|
def _run(tool: str | None, args=("--version",)) -> tuple[str | None, bool]:
|
|
@@ -222,6 +224,34 @@ def _languages(tools: dict, root: Path | None, cfg: dict) -> list[dict]:
|
|
|
222
224
|
"set CG_KOTLIN_SCIP=1 (or pass --scip index.scip)")
|
|
223
225
|
else:
|
|
224
226
|
add("kotlin", "exact", "scip-java on the Gradle / Maven build")
|
|
227
|
+
# Java exact mode is the same scip-java run as Kotlin (CG_JAVA_SCIP or CG_KOTLIN_SCIP).
|
|
228
|
+
jdk_major = None
|
|
229
|
+
if has("java"):
|
|
230
|
+
from .plugins.kotlin.exact import java_major
|
|
231
|
+
jdk_major = java_major(tools["java"]["path"])
|
|
232
|
+
jdk_note = f"; JDK {jdk_major}" if jdk_major else ""
|
|
233
|
+
if not ts_ok or not _module("tree_sitter_java"):
|
|
234
|
+
add("java", "unavailable", "tree-sitter grammar missing", _pip("tree_sitter", "tree_sitter_java"))
|
|
235
|
+
elif env.get("JAVA_SCIP_FILE") or env.get("KOTLIN_SCIP_FILE"):
|
|
236
|
+
which = "CG_JAVA_SCIP_FILE" if env.get("JAVA_SCIP_FILE") else "CG_KOTLIN_SCIP_FILE (shared with Kotlin)"
|
|
237
|
+
add("java", "exact", which + jdk_note)
|
|
238
|
+
elif not has("scip-java") or not has("java"):
|
|
239
|
+
miss = " and ".join(t for t in ("scip-java", "java") if not has(t))
|
|
240
|
+
why = f"tree-sitter-java; {miss} not found{jdk_note}"
|
|
241
|
+
if jdk_major is not None and jdk_major < 17:
|
|
242
|
+
why += " (scip-java needs JDK 17, 21 or 25)"
|
|
243
|
+
add("java", "heuristic", why,
|
|
244
|
+
"install.sh --with java (JDK 17+ and scip-java via coursier), then CG_JAVA_SCIP=1")
|
|
245
|
+
elif jdk_major is not None and jdk_major < 17:
|
|
246
|
+
extra = "; unsupported Java 8/11 build JDK" if jdk_major in (8, 11) else ""
|
|
247
|
+
add("java", "heuristic", f"JDK too old (found {jdk_major}; scip-java needs JDK 17, 21 or 25){extra}",
|
|
248
|
+
"install JDK 17, 21 or 25, then CG_JAVA_SCIP=1")
|
|
249
|
+
elif env.get("JAVA_SCIP") != "1" and env.get("KOTLIN_SCIP") != "1":
|
|
250
|
+
add("java", "heuristic", "scip-java found but not run: it runs the Gradle / Maven build (the project's build scripts)"
|
|
251
|
+
+ jdk_note,
|
|
252
|
+
"set CG_JAVA_SCIP=1 (or CG_KOTLIN_SCIP=1; one run serves both) or pass --scip index.scip")
|
|
253
|
+
else:
|
|
254
|
+
add("java", "exact", "scip-java on the Gradle / Maven build" + jdk_note)
|
|
225
255
|
# Swift
|
|
226
256
|
if not ts_ok or not _module("tree_sitter_swift"):
|
|
227
257
|
add("swift", "unavailable", "tree-sitter grammar missing", _pip("tree_sitter", "tree_sitter_swift"))
|
|
@@ -441,7 +471,7 @@ def _legacy_lines(r: dict) -> list[str]:
|
|
|
441
471
|
names = r.get("legacy_env") or []
|
|
442
472
|
if names:
|
|
443
473
|
shown = ", ".join(names)
|
|
444
|
-
lines.append(f"note: {shown} is set; use the CG_* name (removed in 0.
|
|
474
|
+
lines.append(f"note: {shown} is set; use the CG_* name (removed in 0.19.0)")
|
|
445
475
|
leg = r.get("legacy_cache") or None
|
|
446
476
|
if leg:
|
|
447
477
|
if leg.get("path"):
|
|
@@ -469,12 +499,16 @@ def _mcp(rootp: Path | None) -> list:
|
|
|
469
499
|
|
|
470
500
|
|
|
471
501
|
def setup(langs: list[str] | None = None, quiet: bool = False) -> int:
|
|
472
|
-
"""`cg setup [typescript php dart]`: install the extractor dependencies for the languages whose toolchain is
|
|
473
|
-
present (
|
|
502
|
+
"""`cg setup [typescript php dart java]`: install the extractor dependencies for the languages whose toolchain is
|
|
503
|
+
present (typescript, php, dart by default). `java` prints the JDK 17+ hint and reuses the Kotlin scip-java
|
|
504
|
+
install path; it does not run a build. Returns 1 if an explicitly named one failed."""
|
|
474
505
|
from .plugins.dart.plugin import DartPlugin, find_dart
|
|
475
506
|
want = langs or list(extractors.SPECS)
|
|
476
507
|
rc = 0
|
|
477
508
|
for lang in want:
|
|
509
|
+
if lang == "java":
|
|
510
|
+
rc = rc or _setup_java(quiet)
|
|
511
|
+
continue
|
|
478
512
|
tool = {"typescript": "npm", "php": "composer", "dart": None}[lang]
|
|
479
513
|
need = {"typescript": "node", "php": "php", "dart": None}[lang]
|
|
480
514
|
dart = find_dart() if lang == "dart" else None
|
|
@@ -503,3 +537,22 @@ def setup(langs: list[str] | None = None, quiet: bool = False) -> int:
|
|
|
503
537
|
print(f"{lang}: failed: {e}", file=sys.stderr)
|
|
504
538
|
rc = 1
|
|
505
539
|
return rc
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
def _setup_java(quiet: bool) -> int:
|
|
543
|
+
"""`cg setup java`: the same scip-java / JDK hint as `install.sh --with java`. Heuristic mode needs neither."""
|
|
544
|
+
from .plugins.kotlin.exact import find_java, scip_java_candidates
|
|
545
|
+
jdk = find_java()
|
|
546
|
+
tools = scip_java_candidates()
|
|
547
|
+
if jdk:
|
|
548
|
+
print(f"java: JDK found ({jdk}). scip-java needs JDK 17+ (17, 21 or 25).")
|
|
549
|
+
else:
|
|
550
|
+
print("java: no JDK found. Install JDK 17+ (17, 21 or 25; https://adoptium.net).", file=sys.stderr)
|
|
551
|
+
if tools:
|
|
552
|
+
print(f"java: scip-java found ({tools[0]}). Exact mode stays opt-in, because it runs the build: CG_JAVA_SCIP=1")
|
|
553
|
+
else:
|
|
554
|
+
print("java: scip-java not found. install.sh --with java installs it (the same path as --with kotlin).",
|
|
555
|
+
file=sys.stderr)
|
|
556
|
+
if not quiet:
|
|
557
|
+
print("java: heuristic indexing uses tree-sitter-java and does not need a JDK.")
|
|
558
|
+
return 0
|
|
@@ -28,9 +28,11 @@ from .plugins.nextjs.plugin import NextPlugin
|
|
|
28
28
|
from .plugins.express.plugin import ExpressPlugin
|
|
29
29
|
from .plugins.astro.plugin import AstroPlugin
|
|
30
30
|
from .plugins.kotlin.plugin import KotlinPlugin
|
|
31
|
+
from .plugins.java.plugin import JavaPlugin
|
|
31
32
|
from .plugins.swift.plugin import SwiftPlugin
|
|
32
33
|
|
|
33
|
-
LANGUAGE_PLUGINS = [PhpPlugin(), TypeScriptPlugin(), PythonPlugin(), DartPlugin(), RustPlugin(), CFamilyPlugin(),
|
|
34
|
+
LANGUAGE_PLUGINS = [PhpPlugin(), TypeScriptPlugin(), PythonPlugin(), DartPlugin(), RustPlugin(), CFamilyPlugin(),
|
|
35
|
+
KotlinPlugin(), JavaPlugin(), SwiftPlugin(),
|
|
34
36
|
*SCIP_PLUGINS]
|
|
35
37
|
FRAMEWORK_PLUGINS = [LaravelPlugin(), NuxtPlugin(), DjangoPlugin(), FastAPIPlugin(), FlaskPlugin(), FlutterPlugin(), NestPlugin(), NextPlugin(), ExpressPlugin(), AstroPlugin()]
|
|
36
38
|
|
|
@@ -206,11 +208,18 @@ def index_project(root: str | Path, db_path: str | Path, name: str | None = None
|
|
|
206
208
|
for fw in frameworks:
|
|
207
209
|
if f"{fw.language}/{fw.name}" not in stats["plugins"]:
|
|
208
210
|
stats["plugins"][f"{fw.language}/{fw.name}"] = {"status": "detected; language plugin not active"}
|
|
211
|
+
kp = project.options.get("kotlin_plugin")
|
|
212
|
+
if kp is not None and not getattr(kp, "_exact_done", False):
|
|
213
|
+
kp._finish_exact(project, project.options.get("kotlin_files") or [], kp._exported_stats)
|
|
209
214
|
if scip:
|
|
210
215
|
from .plugins.scip.importer import import_scip
|
|
211
216
|
for s in scip:
|
|
212
217
|
if s in (project.options.get("scip_consumed") or []):
|
|
213
|
-
|
|
218
|
+
who = (project.options.get("scip_consumed_by") or {}).get(s) or ["kotlin"]
|
|
219
|
+
names = [w.capitalize() for w in who]
|
|
220
|
+
word = "plugin" if len(names) == 1 else "plugins"
|
|
221
|
+
stats["plugins"][f"scip:{s}"] = {
|
|
222
|
+
"status": f"imported by the {' and '.join(names)} {word} (exact layer)"}
|
|
214
223
|
continue
|
|
215
224
|
stats["plugins"][f"scip:{s}"] = import_scip(s, builder)
|
|
216
225
|
# generated / copied / vendored files: out of the graph (default) or labelled (attrs.generated)
|
|
@@ -946,7 +946,7 @@ def coverage(path: str | None = None, all_files: bool = False, json_output: bool
|
|
|
946
946
|
exact-mode indexer such as rust-analyzer or scip-clang is missing, skipped when the toolchain is missing, with the
|
|
947
947
|
install hint) and file completeness (discovered vs indexed, with parse failures, files over the size limit,
|
|
948
948
|
unmapped files outside the source roots, excluded files); unsupported source types by extension or shebang
|
|
949
|
-
(.go .
|
|
949
|
+
(.go .qml .sh ...); blind spots: route / handler registrations cg does not model, with file:line.
|
|
950
950
|
path (optional): a file or directory; says whether cg has it in the graph. all_files: list every file per bucket
|
|
951
951
|
(default: the first 5). json_output: the completeness object as JSON. Not covered, heuristic or a blind spot
|
|
952
952
|
means: use your normal search and file reading for that part."""
|