cg-code-graph 0.19.0__tar.gz → 0.19.1__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.19.0/cg_code_graph.egg-info → cg_code_graph-0.19.1}/PKG-INFO +1 -1
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/__init__.py +1 -1
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/extractors.py +33 -8
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1/cg_code_graph.egg-info}/PKG-INFO +1 -1
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_packaging.py +76 -4
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/LICENSE +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/MANIFEST.in +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/README.md +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/__main__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/affected.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/agent_rules.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/agents.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/aitools.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/android_ipc.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/apple_ipc.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/apps.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/blindspots.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/bridges.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/brokers.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/cli.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/concepts.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/config.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/cache.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/detect.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/env.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/fsutil.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/generated.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/model.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/paths.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/store.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/core/syntax_errors.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/coverage.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/dart_isolates.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/doctor.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/explore.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/external.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/graphql.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/hooks.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/indexer.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/jobs.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/link.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/lint_async.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/local_ipc.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/local_sockets.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/mcp_install.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/mcp_server.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/parity.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/parity_structure.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/payload.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plans.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/platform_scan.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/platforms.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/astro/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/astro/content.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/astro/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/cfamily/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/cfamily/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/cfamily/syntax.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/bridges.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/extractor/bin/extract.dart +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/extractor/pubspec.lock +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/extractor/pubspec.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/http.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/models.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/program.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/django/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/django/extras.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/django/models.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/django/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/django/schemas.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/django/shapes.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/django/urls.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/express/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/express/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/flutter/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/flutter/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/java/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/java/exact.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/java/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/jvm/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/jvm/interop.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/jvm/spring.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/kotlin/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/kotlin/exact.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/kotlin/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/kotlin/reparse.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/laravel/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/laravel/broadcast.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/laravel/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/laravel/tests.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/laravel/values.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/native/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/native/gates.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/native/runner.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/native/scipread.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/native/ts.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/nest/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/nest/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/nextjs/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/nextjs/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/nuxt/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/nuxt/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/external.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/extractor/composer.json +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/extractor/composer.lock +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/extractor/extract.php +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/gating.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/http_client.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/strings.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/python/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/python/aitools.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/python/external.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/python/fields.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/python/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/python/refs.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/python/roots.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/python/socketio.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/python/subproc.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/python/tests.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/python/values.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/pyweb/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/pyweb/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/pyweb/values.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/rust/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/rust/cargo.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/rust/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/rust/syntax.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/scip/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/scip/importer.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/scip/scip.proto +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/scip/scip_pb2.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/stubs/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/stubs/plugins.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/swift/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/swift/baseurl.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/swift/exact.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/swift/indexstore.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/swift/packages.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/swift/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/baseurl.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/extractor/extract.mjs +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/extractor/fw.mjs +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/extractor/package-lock.json +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/extractor/package.json +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/extractor/rr.mjs +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/nav.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/plugin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/react_router.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/tsweb/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/tsweb/common.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/tsweb/data.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/c_cpp.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/common.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/dart.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/django-ninja.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/django.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/djangorestframework.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/express.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/java.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/kotlin.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/laravel.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/nest.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/nextjs.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/nuxt.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/php.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/python.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/react-router.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/rust.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/spring.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/swift.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/presets/typescript.yaml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/process_runs.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/protocols/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/protocols/builtin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/protocols/matchers.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/protocols/view.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/query.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/realtime.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/realtime_events.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/realtime_native.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/realtime_ws.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/roundtrip.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/routes.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/rpc.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/sdk_systems.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/sockets.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/starters.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/tests_index.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/udp_apps.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/__init__.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/graph.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/server.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/static/app.css +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/static/app.js +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/static/index.html +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/static/layered.js +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/static/vendor/VERSIONS.txt +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/static/vendor/cose-base.js +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/static/vendor/cytoscape-fcose.js +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/static/vendor/cytoscape.min.js +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/static/vendor/layout-base.js +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/tools/package-lock.json +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/tools/package.json +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/viz/tools/shoot.mjs +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/watch.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/webhooks.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/xcode.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph.egg-info/SOURCES.txt +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph.egg-info/dependency_links.txt +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph.egg-info/entry_points.txt +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph.egg-info/requires.txt +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph.egg-info/top_level.txt +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/pyproject.toml +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/setup.cfg +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_affected.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_agents_install.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_agents_md.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_ai_tools.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_android_ipc.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_apple_ipc.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_astro.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_astro_content.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_astro_server.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_bridges.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_bridges_pigeon_monorepo.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_brokers.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_cache_clean.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_cache_invalidation.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_cache_migration.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_channels_tests.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_cli_output.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_completeness.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_config_extras.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_coverage.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_coverage_ts_hint.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_dart_isolates.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_dispatch_interfaces.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_django_flutter.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_docs_languages.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_docs_links.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_elysia.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_enum_constants.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_env.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_explore.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_external.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_gating.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_generated.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_graphql.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_hooks.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_impact_overrides.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_index_isolation.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_inherited_overrides.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_java.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_java_exact.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_jobs.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_js_refs.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_js_runtime.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_kotlin.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_kotlin_binding.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_kotlin_exact.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_kotlin_fields.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_kotlin_mixed.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_kotlin_nav_consts.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_kotlin_props.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_laravel_determinism.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_laravel_resources.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_lint_async.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_local_ipc.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_local_sockets.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_mcp.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_mcp_index.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_mcp_install.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_native_cfamily.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_native_concurrency.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_native_rust.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_nuxt_import_dirs.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_nuxt_rootsrc.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_parity.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_parity_structure.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_php_http.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_php_props.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_plain_js.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_plans.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_platform_gaps.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_platform_type_variants.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_platforms.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_platforms_apple.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_presets_config.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_process_ipc.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_process_runs.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_protocols.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_app_tests_module.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_collection_chains.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_compat.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_entry_refs.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_fields.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_infer_cycles.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_roots.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_subprocess_tests.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_tests.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_web_hosts.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_web_routes.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_python_web_routes_more.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_react_router.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_realtime.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_realtime_native.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_roundtrip.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_route_tables.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_routes_search_explain.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_rpc.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_scip_health.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_sdk_external.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_snippet.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_sockets.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_spring.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_starters_budget.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_binding.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_exact.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_facts.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_fields.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_modules.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_more.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_nav_values.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_parse_errors.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_props.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_sdk.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_testing.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_swift_values.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_tests_scope.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_ts_fields.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_ts_fields_js_vue.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_ts_file_specs.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_ts_frameworks.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_ts_nuxt.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_ts_src_tsconfig.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_values.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_viz.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_vue_nav.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_watch.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_webhooks.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_websockets.py +0 -0
- {cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/tests/test_workspace_link.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""code-graph: deterministic code knowledge graph (beta)."""
|
|
2
|
-
__version__ = "0.19.
|
|
2
|
+
__version__ = "0.19.1"
|
|
@@ -5,8 +5,9 @@ The extractor sources ship inside the package (cg_code_graph/plugins/{ts,php,dar
|
|
|
5
5
|
|
|
6
6
|
- a checkout whose extractor directory already has them (`npm ci` run there) keeps using that directory;
|
|
7
7
|
- otherwise the sources are copied into a per-user cache directory and the dependencies installed there, on first
|
|
8
|
-
use or by `cg setup`. The directory is keyed by the lock file
|
|
9
|
-
|
|
8
|
+
use or by `cg setup`. The directory is keyed by the lock file and the extractor sources (names and contents), so a
|
|
9
|
+
release that adds or edits a module installs into a fresh directory. A cache directory that is missing a listed
|
|
10
|
+
source is incomplete and is rebuilt.
|
|
10
11
|
|
|
11
12
|
Cache root (core/cache.py): $CG_CACHE, else %LOCALAPPDATA%\\cg on Windows,
|
|
12
13
|
else $XDG_CACHE_HOME/cg or ~/.cache/cg; the extractors live in <root>/extractors.
|
|
@@ -46,7 +47,8 @@ class Spec:
|
|
|
46
47
|
|
|
47
48
|
|
|
48
49
|
SPECS = {
|
|
49
|
-
"typescript": Spec("typescript", PLUGINS / "ts" / "extractor", ("extract.mjs", "fw.mjs", "
|
|
50
|
+
"typescript": Spec("typescript", PLUGINS / "ts" / "extractor", ("extract.mjs", "fw.mjs", "rr.mjs", "package.json",
|
|
51
|
+
"package-lock.json"),
|
|
50
52
|
"package-lock.json", ("node_modules/typescript/package.json",), "npm", "TypeScript / JavaScript"),
|
|
51
53
|
"php": Spec("php", PLUGINS / "php" / "extractor", ("extract.php", "composer.json", "composer.lock"), "composer.lock",
|
|
52
54
|
("vendor/autoload.php",), "composer", "PHP"),
|
|
@@ -63,20 +65,42 @@ def _installed(d: Path, spec: Spec) -> bool:
|
|
|
63
65
|
return any((d / m).exists() for m in spec.markers)
|
|
64
66
|
|
|
65
67
|
|
|
68
|
+
def _missing_sources(spec: Spec, d: Path) -> list[str]:
|
|
69
|
+
"""Listed sources that exist in the package but not in the cache directory."""
|
|
70
|
+
return [rel for rel in spec.sources if (spec.pkg / rel).exists() and not (d / rel).exists()]
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _cache_key(spec: Spec) -> str:
|
|
74
|
+
"""Lock file plus every source path and its bytes, so a new or edited module does not reuse an old install."""
|
|
75
|
+
h = hashlib.sha256()
|
|
76
|
+
lock = spec.pkg / spec.lock
|
|
77
|
+
h.update(lock.read_bytes() if lock.exists() else b"")
|
|
78
|
+
for rel in spec.sources:
|
|
79
|
+
h.update(b"\0")
|
|
80
|
+
h.update(rel.encode())
|
|
81
|
+
src = spec.pkg / rel
|
|
82
|
+
h.update(b"\0")
|
|
83
|
+
h.update(src.read_bytes() if src.exists() else b"")
|
|
84
|
+
return h.hexdigest()[:12]
|
|
85
|
+
|
|
86
|
+
|
|
66
87
|
def cache_dir(lang: str) -> Path:
|
|
67
88
|
spec = SPECS[lang]
|
|
68
|
-
|
|
69
|
-
key = hashlib.sha256(lock.read_bytes() if lock.exists() else b"").hexdigest()[:12]
|
|
70
|
-
return cache_root() / f"{lang}-{key}"
|
|
89
|
+
return cache_root() / f"{lang}-{_cache_key(spec)}"
|
|
71
90
|
|
|
72
91
|
|
|
73
92
|
def workdir(lang: str) -> Path:
|
|
74
93
|
"""The directory the extractor runs from: the package's own one when its dependencies are installed there (a
|
|
75
|
-
development checkout), else the cache directory (sources synced into it; dependencies maybe not yet installed).
|
|
94
|
+
development checkout), else the cache directory (sources synced into it; dependencies maybe not yet installed).
|
|
95
|
+
A cache directory missing a listed source is rebuilt from the package sources."""
|
|
76
96
|
spec = SPECS[lang]
|
|
77
97
|
if _installed(spec.pkg, spec):
|
|
78
98
|
return spec.pkg
|
|
79
99
|
d = cache_dir(lang)
|
|
100
|
+
if d.exists() and _missing_sources(spec, d):
|
|
101
|
+
# Incomplete copy (for example a 0.19.0 typescript cache that predates a module): drop it and start over
|
|
102
|
+
# when the key still matches, otherwise cache_dir already points at a fresh directory.
|
|
103
|
+
shutil.rmtree(d, ignore_errors=True)
|
|
80
104
|
_sync(spec, d)
|
|
81
105
|
return d
|
|
82
106
|
|
|
@@ -101,7 +125,8 @@ def status(lang: str) -> dict:
|
|
|
101
125
|
if _installed(spec.pkg, spec):
|
|
102
126
|
return {"installed": True, "dir": str(spec.pkg), "where": "package"}
|
|
103
127
|
d = cache_dir(lang)
|
|
104
|
-
|
|
128
|
+
ready = _installed(d, spec) and not _missing_sources(spec, d)
|
|
129
|
+
return {"installed": ready, "dir": str(d), "where": "cache"}
|
|
105
130
|
|
|
106
131
|
|
|
107
132
|
JS_RUNTIME_MISSING = (
|
|
@@ -15,6 +15,21 @@ from cg_code_graph.core import extractors
|
|
|
15
15
|
|
|
16
16
|
ROOT = Path(__file__).resolve().parent.parent
|
|
17
17
|
|
|
18
|
+
_RUNTIME_SUFFIXES = {".mjs", ".js", ".php", ".dart"}
|
|
19
|
+
_SKIP_DIRS = {"node_modules", "vendor", ".dart_tool", ".bin"}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _runtime_sources(pkg: Path) -> list[str]:
|
|
23
|
+
"""Extractor modules that must be listed on Spec.sources (lockfiles and dependency trees are not runtime modules)."""
|
|
24
|
+
found = []
|
|
25
|
+
for p in pkg.rglob("*"):
|
|
26
|
+
if not p.is_file() or p.suffix not in _RUNTIME_SUFFIXES:
|
|
27
|
+
continue
|
|
28
|
+
if any(part in _SKIP_DIRS for part in p.relative_to(pkg).parts):
|
|
29
|
+
continue
|
|
30
|
+
found.append(p.relative_to(pkg).as_posix())
|
|
31
|
+
return found
|
|
32
|
+
|
|
18
33
|
|
|
19
34
|
def test_pyproject_metadata():
|
|
20
35
|
meta = tomllib.loads((ROOT / "pyproject.toml").read_text())
|
|
@@ -34,6 +49,10 @@ def test_pyproject_metadata():
|
|
|
34
49
|
for spec in extractors.SPECS.values():
|
|
35
50
|
for rel in spec.sources:
|
|
36
51
|
assert (spec.pkg / rel).exists(), rel
|
|
52
|
+
# every runtime module in the plugin folder is copied into the cache, or a pip install fails with ERR_MODULE_NOT_FOUND
|
|
53
|
+
for spec in extractors.SPECS.values():
|
|
54
|
+
for rel in _runtime_sources(spec.pkg):
|
|
55
|
+
assert rel in spec.sources, (spec.lang, rel)
|
|
37
56
|
|
|
38
57
|
|
|
39
58
|
def _fake_spec(tmp_path, monkeypatch):
|
|
@@ -55,22 +74,75 @@ def test_extractor_runs_from_user_cache_without_deps_in_package(tmp_path, monkey
|
|
|
55
74
|
assert (d / "extract.mjs").read_text() == "// v1\n" and not (d / "fw.mjs").exists()
|
|
56
75
|
st = extractors.status("typescript")
|
|
57
76
|
assert st == {"installed": False, "dir": str(d), "where": "cache"}
|
|
58
|
-
# dependencies installed there: reused
|
|
77
|
+
# dependencies installed there: reused while the sources are unchanged
|
|
59
78
|
(d / "node_modules" / "typescript").mkdir(parents=True)
|
|
60
79
|
(d / "node_modules" / "typescript" / "package.json").write_text("{}")
|
|
61
|
-
(pkg / "extract.mjs").write_text("// v2\n")
|
|
62
80
|
assert extractors.ensure("typescript") == d # no install command run: the marker is there
|
|
63
|
-
assert (d / "extract.mjs").read_text() == "// v2\n"
|
|
64
81
|
assert extractors.status("typescript")["installed"]
|
|
82
|
+
# edited extractor source: a new cache key, so the broken or stale directory is not reused
|
|
83
|
+
(pkg / "extract.mjs").write_text("// v2\n")
|
|
84
|
+
d_src = extractors.workdir("typescript")
|
|
85
|
+
assert d_src != d and (d_src / "extract.mjs").read_text() == "// v2\n"
|
|
65
86
|
# a new lock file: a fresh directory
|
|
66
87
|
(pkg / "package-lock.json").write_text('{"lockfileVersion": 3, "x": 1}\n')
|
|
67
|
-
assert extractors.workdir("typescript") !=
|
|
88
|
+
assert extractors.workdir("typescript") != d_src
|
|
68
89
|
# a checkout with the dependencies in the package directory keeps using it
|
|
69
90
|
(pkg / "node_modules" / "typescript").mkdir(parents=True)
|
|
70
91
|
(pkg / "node_modules" / "typescript" / "package.json").write_text("{}")
|
|
71
92
|
assert extractors.workdir("typescript") == pkg and extractors.status("typescript")["where"] == "package"
|
|
72
93
|
|
|
73
94
|
|
|
95
|
+
def test_cache_missing_listed_source_is_rebuilt(tmp_path, monkeypatch):
|
|
96
|
+
"""A cache directory that lost a listed source is not treated as installed and is rebuilt with that file."""
|
|
97
|
+
pkg = _fake_spec(tmp_path, monkeypatch)
|
|
98
|
+
(pkg / "rr.mjs").write_text("export const rr = 1\n")
|
|
99
|
+
spec = extractors.SPECS["typescript"]
|
|
100
|
+
spec = extractors.Spec(spec.lang, pkg, spec.sources + ("rr.mjs",), spec.lock, spec.markers, spec.tool, spec.label)
|
|
101
|
+
monkeypatch.setitem(extractors.SPECS, "typescript", spec)
|
|
102
|
+
d = extractors.workdir("typescript")
|
|
103
|
+
(d / "node_modules" / "typescript").mkdir(parents=True)
|
|
104
|
+
(d / "node_modules" / "typescript" / "package.json").write_text("{}")
|
|
105
|
+
assert extractors.status("typescript")["installed"]
|
|
106
|
+
(d / "rr.mjs").unlink()
|
|
107
|
+
assert not extractors.status("typescript")["installed"]
|
|
108
|
+
rebuilt = extractors.workdir("typescript")
|
|
109
|
+
assert rebuilt == d
|
|
110
|
+
assert (rebuilt / "rr.mjs").read_text() == "export const rr = 1\n"
|
|
111
|
+
assert (rebuilt / "extract.mjs").read_text() == "// v1\n"
|
|
112
|
+
assert not (rebuilt / "node_modules").exists() # the incomplete install was removed, not patched in place
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def test_typescript_cache_index_without_network(tmp_path, monkeypatch):
|
|
116
|
+
"""Pip-style install: package dir has no node_modules, so indexing uses the cache and a local node_modules link."""
|
|
117
|
+
nm = extractors.SPECS["typescript"].pkg / "node_modules"
|
|
118
|
+
if not (nm / "typescript" / "package.json").exists():
|
|
119
|
+
pytest.skip("typescript extractor node_modules is not installed")
|
|
120
|
+
from cg_code_graph.indexer import index_project
|
|
121
|
+
monkeypatch.setenv("CG_CACHE", str(tmp_path / "cgcache"))
|
|
122
|
+
real = extractors._installed
|
|
123
|
+
|
|
124
|
+
def installed(d, spec):
|
|
125
|
+
if spec.lang == "typescript" and d == spec.pkg:
|
|
126
|
+
return False
|
|
127
|
+
return real(d, spec)
|
|
128
|
+
|
|
129
|
+
def run(cmd, d, spec):
|
|
130
|
+
assert spec.lang == "typescript", cmd
|
|
131
|
+
link = d / "node_modules"
|
|
132
|
+
if not link.exists():
|
|
133
|
+
link.symlink_to(nm, target_is_directory=True)
|
|
134
|
+
|
|
135
|
+
monkeypatch.setattr(extractors, "_installed", installed)
|
|
136
|
+
monkeypatch.setattr(extractors, "_run", run)
|
|
137
|
+
root = ROOT / "examples" / "bookstore-react-router"
|
|
138
|
+
stats = index_project(root, tmp_path / "rr.db", root.name)
|
|
139
|
+
assert stats["nodes"] > 0
|
|
140
|
+
import sqlite3
|
|
141
|
+
routes = sqlite3.connect(tmp_path / "rr.db").execute(
|
|
142
|
+
"SELECT id FROM nodes WHERE kind IN ('route', 'page')").fetchall()
|
|
143
|
+
assert routes
|
|
144
|
+
|
|
145
|
+
|
|
74
146
|
def test_extractor_install_failure_names_the_tool(tmp_path, monkeypatch):
|
|
75
147
|
_fake_spec(tmp_path, monkeypatch)
|
|
76
148
|
monkeypatch.setattr(extractors, "install_command", lambda lang, dart=None: ["cg-no-such-npm", "ci"])
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/extractor/bin/extract.dart
RENAMED
|
File without changes
|
{cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/extractor/pubspec.lock
RENAMED
|
File without changes
|
{cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/dart/extractor/pubspec.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/extractor/composer.json
RENAMED
|
File without changes
|
{cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/extractor/composer.lock
RENAMED
|
File without changes
|
{cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/php/extractor/extract.php
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/extractor/extract.mjs
RENAMED
|
File without changes
|
|
File without changes
|
{cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/extractor/package-lock.json
RENAMED
|
File without changes
|
{cg_code_graph-0.19.0 → cg_code_graph-0.19.1}/cg_code_graph/plugins/ts/extractor/package.json
RENAMED
|
File without changes
|
|
File without changes
|