cg-code-graph 0.23.1__tar.gz → 0.23.3__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.23.1/cg_code_graph.egg-info → cg_code_graph-0.23.3}/PKG-INFO +2 -2
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/__init__.py +1 -1
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/cli.py +22 -1
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/model.py +1 -1
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/doctor.py +13 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/mcp_server.py +34 -10
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/platforms.py +61 -1
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/nuxt/plugin.py +336 -19
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/swift/exact.py +8 -1
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/swift/plugin.py +51 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/ts/extractor/extract.mjs +23 -3
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/query.py +102 -9
- cg_code_graph-0.23.3/cg_code_graph/update_check.py +122 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3/cg_code_graph.egg-info}/PKG-INFO +2 -2
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph.egg-info/SOURCES.txt +7 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph.egg-info/requires.txt +1 -1
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/pyproject.toml +1 -1
- cg_code_graph-0.23.3/tests/test_issue_201.py +137 -0
- cg_code_graph-0.23.3/tests/test_issue_204.py +79 -0
- cg_code_graph-0.23.3/tests/test_issue_212.py +82 -0
- cg_code_graph-0.23.3/tests/test_nuxt_i18n.py +89 -0
- cg_code_graph-0.23.3/tests/test_nuxt_nitro.py +103 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_snippet.py +4 -1
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_binding.py +1 -1
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_parse_errors.py +6 -1
- cg_code_graph-0.23.3/tests/test_update_check.py +96 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/LICENSE +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/MANIFEST.in +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/README.md +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/__main__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/affected.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/agent_rules.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/agents.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/aitools.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/android_ipc.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/apple_ipc.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/apps.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/blindspots.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/bridges.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/brokers.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/concepts.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/config.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/cache.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/detect.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/env.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/extractors.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/fsutil.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/generated.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/paths.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/redact.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/store.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/core/syntax_errors.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/coverage.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/dart_isolates.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/explore.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/external.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/graphql.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/guard_facts.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/hooks.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/indexer.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/insecure_transport.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/install_rules.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/jobs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/link.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/lint_async.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/local_ipc.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/local_sockets.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/mcp_graphs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/mcp_install.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/parity.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/parity_structure.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/payload.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plans.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/platform_scan.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/astro/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/astro/content.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/astro/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/cfamily/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/cfamily/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/cfamily/syntax.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/dart/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/dart/bridges.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/dart/extractor/bin/extract.dart +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/dart/extractor/pubspec.lock +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/dart/extractor/pubspec.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/dart/http.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/dart/models.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/dart/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/dart/program.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/django/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/django/extras.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/django/models.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/django/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/django/schemas.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/django/shapes.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/django/urls.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/express/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/express/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/flutter/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/flutter/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/java/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/java/exact.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/java/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/jvm/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/jvm/interop.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/jvm/spring.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/kotlin/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/kotlin/exact.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/kotlin/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/kotlin/reparse.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/laravel/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/laravel/broadcast.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/laravel/massassign.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/laravel/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/laravel/tests.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/laravel/values.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/native/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/native/gates.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/native/runner.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/native/scipread.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/native/ts.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/nest/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/nest/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/nextjs/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/nextjs/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/nuxt/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/php/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/php/external.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/php/extractor/composer.json +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/php/extractor/composer.lock +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/php/extractor/extract.php +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/php/gating.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/php/http_client.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/php/inline_guards.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/php/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/php/strings.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/python/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/python/aitools.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/python/external.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/python/fields.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/python/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/python/refs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/python/roots.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/python/socketio.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/python/subproc.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/python/tests.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/python/values.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/pyweb/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/pyweb/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/pyweb/values.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/rust/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/rust/cargo.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/rust/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/rust/syntax.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/scip/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/scip/importer.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/scip/scip.proto +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/scip/scip_pb2.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/stubs/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/stubs/plugins.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/swift/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/swift/baseurl.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/swift/indexstore.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/swift/packages.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/ts/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/ts/baseurl.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/ts/extractor/fw.mjs +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/ts/extractor/package-lock.json +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/ts/extractor/package.json +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/ts/extractor/rr.mjs +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/ts/nav.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/ts/plugin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/ts/react_router.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/tsweb/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/tsweb/common.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/plugins/tsweb/data.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/c_cpp.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/common.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/dart.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/django-ninja.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/django.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/djangorestframework.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/express.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/java.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/kotlin.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/laravel.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/nest.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/nextjs.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/nuxt.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/php.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/python.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/react-router.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/rust.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/spring.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/swift.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/presets/typescript.yaml +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/process_runs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/protocols/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/protocols/builtin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/protocols/matchers.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/protocols/view.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/realtime.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/realtime_events.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/realtime_native.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/realtime_ws.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/roundtrip.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/routes.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/rpc.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/sdk_systems.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/sockets.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/ssrf_input.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/starters.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/surface.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/tests_index.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/udp_apps.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/__init__.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/graph.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/server.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/static/app.css +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/static/app.js +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/static/index.html +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/static/layered.js +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/static/vendor/VERSIONS.txt +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/static/vendor/cose-base.js +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/static/vendor/cytoscape-fcose.js +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/static/vendor/cytoscape.min.js +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/static/vendor/layout-base.js +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/tools/package-lock.json +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/tools/package.json +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/viz/tools/shoot.mjs +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/watch.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/webhook_subs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/webhooks.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph/xcode.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph.egg-info/dependency_links.txt +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph.egg-info/entry_points.txt +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/cg_code_graph.egg-info/top_level.txt +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/setup.cfg +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_affected.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_agents_install.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_agents_md.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_ai_tools.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_android_ipc.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_apple_ipc.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_astro.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_astro_content.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_astro_server.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_bridges.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_bridges_pigeon_monorepo.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_brokers.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_cache_clean.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_cache_invalidation.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_cache_migration.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_channels_tests.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_cli_output.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_completeness.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_config_extras.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_coverage.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_coverage_ts_hint.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_dart_isolates.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_db_connections.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_dead_wrappers.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_dispatch_interfaces.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_django_flutter.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_docs_languages.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_docs_links.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_echo_ref.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_echo_wrapper.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_elysia.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_enum_constants.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_env.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_explore.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_external.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_fp_batch.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_gating.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_generated.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_graphql.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_hooks.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_impact_overrides.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_index_isolation.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_inherited_overrides.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_inline_guards.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_install_rules.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_issue_192.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_issue_202.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_issue_203.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_issue_205.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_issue_206.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_issue_207.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_issue_208.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_issue_209.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_issue_210.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_issue_211.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_issue_211_used_at.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_java.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_java_exact.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_jobs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_js_refs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_js_runtime.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_kotlin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_kotlin_binding.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_kotlin_exact.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_kotlin_fields.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_kotlin_mixed.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_kotlin_nav_consts.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_kotlin_props.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_laravel_determinism.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_laravel_resources.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_link_origin.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_lint_async.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_listing_files.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_local_ipc.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_local_sockets.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_mass_assignment.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_mcp.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_mcp_index.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_mcp_install.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_mcp_instructions.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_mcp_multi_graph.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_native_cfamily.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_native_concurrency.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_native_rust.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_nuxt_import_dirs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_nuxt_rootsrc.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_nuxt_side_dirs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_packaging.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_parity.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_parity_structure.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_php_http.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_php_props.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_plain_js.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_plans.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_platform_gaps.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_platform_type_variants.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_platforms.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_platforms_apple.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_presets_config.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_process_ipc.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_process_runs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_protocols.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_app_tests_module.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_collection_chains.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_compat.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_entry_refs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_fields.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_infer_cycles.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_roots.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_subprocess_tests.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_tests.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_web_hosts.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_web_routes.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_python_web_routes_more.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_react_router.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_readers_writers_specs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_realtime.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_realtime_native.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_redact_salt.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_request_keys.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_roundtrip.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_route_specs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_route_tables.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_routes_search_explain.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_rpc.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_scip_health.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_sdk_external.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_sdk_external_infra.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_sdk_external_mail.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_sockets.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_spring.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_ssrf.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_starters_budget.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_surface.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_surface_transport.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_exact.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_facts.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_fields.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_modules.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_more.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_nav_values.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_props.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_sdk.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_testing.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_swift_values.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_tests_scope.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_ts_fields.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_ts_fields_js_vue.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_ts_file_specs.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_ts_frameworks.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_ts_node_http.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_ts_nuxt.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_ts_src_tsconfig.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_unguarded.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_values.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_viz.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_vue_nav.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_watch.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_webhooks.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_webhooks_152.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_webhooks_152b.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/tests/test_websockets.py +0 -0
- {cg_code_graph-0.23.1 → cg_code_graph-0.23.3}/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.23.
|
|
3
|
+
Version: 0.23.3
|
|
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
|
|
@@ -18,7 +18,7 @@ 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
20
|
Requires-Dist: tree-sitter-java>=0.23
|
|
21
|
-
Requires-Dist: tree-sitter-swift<0.
|
|
21
|
+
Requires-Dist: tree-sitter-swift<0.8,>=0.6
|
|
22
22
|
Provides-Extra: dev
|
|
23
23
|
Requires-Dist: pytest>=8; extra == "dev"
|
|
24
24
|
Provides-Extra: watch
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""code-graph: deterministic code knowledge graph (beta)."""
|
|
2
|
-
__version__ = "0.23.
|
|
2
|
+
__version__ = "0.23.3"
|
|
@@ -100,9 +100,24 @@ def _impact_labels(rows: list[dict], name_of, group_of) -> list[str]:
|
|
|
100
100
|
return labels
|
|
101
101
|
|
|
102
102
|
|
|
103
|
+
def _version_text(version: str) -> str:
|
|
104
|
+
"""`cg X.Y.Z`, plus a second line when the cached newer-release check (written by `cg doctor`) knows of a newer
|
|
105
|
+
release. Reads the cache only: never connects (#98)."""
|
|
106
|
+
try:
|
|
107
|
+
from .update_check import check, notice
|
|
108
|
+
n = notice(check(version, network=False))
|
|
109
|
+
except Exception:
|
|
110
|
+
n = None
|
|
111
|
+
return f"cg {version}" + (f"\n{n}" if n else "")
|
|
112
|
+
|
|
113
|
+
|
|
103
114
|
def main(argv=None):
|
|
104
115
|
from . import __version__
|
|
105
116
|
ap = argparse.ArgumentParser(prog="cg")
|
|
117
|
+
args_in = sys.argv[1:] if argv is None else list(argv)
|
|
118
|
+
if args_in[:1] == ["--version"]:
|
|
119
|
+
print(_version_text(__version__)) # printed here: argparse's version action re-wraps a second line
|
|
120
|
+
return 0
|
|
106
121
|
ap.add_argument("--version", action="version", version=f"cg {__version__}")
|
|
107
122
|
sub = ap.add_subparsers(dest="cmd", required=True)
|
|
108
123
|
p = sub.add_parser("index", help="detect languages / frameworks under ROOT and build the graph DB (stats JSON on stdout, coverage on stderr)"); p.add_argument("root"); p.add_argument("--db", required=True); p.add_argument("--name"); p.add_argument("--scip", action="append"); p.add_argument("--gates", help="gate scenarios JSON (e.g. examples/bookstore.gates.json)")
|
|
@@ -718,7 +733,8 @@ def main(argv=None):
|
|
|
718
733
|
print(Q.connections_line(res["connections"]))
|
|
719
734
|
if not res["callers"] and not res["entry_points"]:
|
|
720
735
|
print(Q.explain_no_callers(st, a.spec, res["targets"], a.min_confidence)); return
|
|
721
|
-
|
|
736
|
+
nc = res.get("callers_candidate") or 0
|
|
737
|
+
print(f"callers (transitive): {len(res['callers']) - nc}" + (f" (+{nc} candidate)" if nc else ""))
|
|
722
738
|
caller_names = _impact_labels(res["callers"], lambda c: c.get("fqn") or c["id"], lambda c: c.get("module") or c.get("kind"))
|
|
723
739
|
for c, nm in zip(res["callers"], caller_names):
|
|
724
740
|
loc = f" @ {c['file']}:{c['line']}" if Q.NATIVE_FILE_RE.search(c.get("file") or "") else ""
|
|
@@ -862,6 +878,11 @@ def render_node(d: dict) -> str:
|
|
|
862
878
|
unk = at.get("platform_unknown") or []
|
|
863
879
|
ps = ", ".join(p + ("?" if p in unk else "") for p in at["platforms"]) or "none of the targets"
|
|
864
880
|
out.append(f" platforms: {ps}" + (f" ({at['platform_expr']})" if at.get("platform_expr") else ""))
|
|
881
|
+
if n.get("kind") == "i18n" and at.get("definitions"):
|
|
882
|
+
out.append(" definitions: " + ", ".join(f"{x.get('locale') or '-'} {x['file']}:{x['line']}" for x in at["definitions"]))
|
|
883
|
+
if at.get("missing_locales"):
|
|
884
|
+
out.append(" missing locales: " + ", ".join(at["missing_locales"]))
|
|
885
|
+
at = {k: v for k, v in at.items() if k not in ("definitions", "defined_in", "missing_locales")}
|
|
865
886
|
rest = {k: v for k, v in at.items() if k not in ("platforms", "platform_unknown", "platform_expr", "platform_at", "platforms_other")}
|
|
866
887
|
if rest:
|
|
867
888
|
out.append(" attrs: " + ", ".join(f"{k}={v if isinstance(v, str) else json.dumps(v, default=str, ensure_ascii=False)}"
|
|
@@ -56,7 +56,7 @@ EDGE_KINDS: dict[str, tuple[bool, str]] = {
|
|
|
56
56
|
"HTTP_CALLS": (True, "client code calls an HTTP endpoint (method + path template)"),
|
|
57
57
|
"MATCHES_ROUTE": (True, "client endpoint matched to a backend route (cross-repo link)"),
|
|
58
58
|
"USES_LAYOUT": (False, "page uses layout"),
|
|
59
|
-
"USES_I18N": (
|
|
59
|
+
"USES_I18N": (True, "code/template uses i18n key (propagating: a key's users are its dependents in reaches / impact, #182)"),
|
|
60
60
|
"REFERENCES_TYPE": (False, "code references a type/interface"),
|
|
61
61
|
# value facts
|
|
62
62
|
"READS_SETTING": (True, "code reads a JSON settings key (getSetting('a.b', default))"),
|
|
@@ -407,12 +407,25 @@ def report(root: str | Path | None = None, scip: list | None = None) -> dict:
|
|
|
407
407
|
"legacy_cache": cache.legacy_report(),
|
|
408
408
|
**({"hooks_outdated": _outdated_hooks(rootp)} if rootp is not None else {}),
|
|
409
409
|
"update": "uv tool upgrade cg-code-graph | pipx upgrade cg-code-graph | install.sh --update",
|
|
410
|
+
"latest": _latest(),
|
|
410
411
|
**({"scip": [scip_health(x) for x in scip]} if scip else {}),
|
|
411
412
|
}
|
|
412
413
|
|
|
413
414
|
|
|
415
|
+
def _latest() -> dict:
|
|
416
|
+
"""Newer-release check (#98): PyPI at most once a day, cached; never fails or blocks for long."""
|
|
417
|
+
from .update_check import check
|
|
418
|
+
try:
|
|
419
|
+
return check()
|
|
420
|
+
except Exception:
|
|
421
|
+
return {"current": __version__, "latest": None, "newer": False, "source": "none", "disabled": None}
|
|
422
|
+
|
|
423
|
+
|
|
414
424
|
def render(r: dict) -> str:
|
|
415
425
|
out = [f"cg {r['cg']} (Python {r['python']}, {r['os']}; {r['package']}{', checkout' if r['checkout'] else ''})"]
|
|
426
|
+
from .update_check import notice
|
|
427
|
+
if (n := notice(r.get("latest") or {})):
|
|
428
|
+
out.append(f"newer release: {n}")
|
|
416
429
|
out.append("tools:")
|
|
417
430
|
for k, v in r["tools"].items():
|
|
418
431
|
out.append(f" {k:<14} {v['version'] or 'not found'}" + (f" ({v['path']})" if v["path"] else "")
|
|
@@ -601,7 +601,9 @@ def impact(method: str, min_confidence: str = "heuristic", max_items: int = 60,
|
|
|
601
601
|
dropped_line = [f"not built for {pf}: {', '.join(short(t) for t in dropped[:6])}"] if pf and dropped else []
|
|
602
602
|
out = pline + dropped_line + [f"targets: {', '.join(short(t) for t in r['targets'][:5])}", *via_default, *Q.override_lines(r),
|
|
603
603
|
*([Q.connections_line(r["connections"])] if r.get("connections") else []),
|
|
604
|
-
f"transitive callers: {
|
|
604
|
+
f"transitive callers: {r.get('callers_resolved', len(r['callers']))}"
|
|
605
|
+
+ (f" (+{r['callers_candidate']} candidate)" if r.get("callers_candidate") else "")
|
|
606
|
+
+ f"; entry points: {len(r['entry_points'])}"]
|
|
605
607
|
if not r["callers"] and not r["entry_points"]:
|
|
606
608
|
return "\n".join(out + [Q.explain_no_callers(st, method, r["targets"], min_confidence)])
|
|
607
609
|
byk = defaultdict(list)
|
|
@@ -619,7 +621,7 @@ def impact(method: str, min_confidence: str = "heuristic", max_items: int = 60,
|
|
|
619
621
|
out.append(f" {lab}{Q.CANDIDATE_LABEL if e.get('candidate') else ''}{Q.platform_label(e)}{hop}")
|
|
620
622
|
bymod = defaultdict(list)
|
|
621
623
|
for c in r["callers"]:
|
|
622
|
-
bymod[
|
|
624
|
+
bymod[Q.caller_group(c)].append(c)
|
|
623
625
|
dup_lines = []
|
|
624
626
|
for mod in sorted(bymod):
|
|
625
627
|
cs = bymod[mod]
|
|
@@ -631,8 +633,10 @@ def impact(method: str, min_confidence: str = "heuristic", max_items: int = 60,
|
|
|
631
633
|
out.append("same name in one module: " + "; ".join(dup_lines))
|
|
632
634
|
mods = defaultdict(int)
|
|
633
635
|
for c in r["callers"]:
|
|
634
|
-
|
|
635
|
-
|
|
636
|
+
if not c.get("candidate"): # candidates are listed on their own below (#204)
|
|
637
|
+
mods[Q.caller_group(c)] += 1
|
|
638
|
+
if mods:
|
|
639
|
+
out.append("\ncallers by module: " + ", ".join(f"{m}×{c}" for m, c in sorted(mods.items(), key=lambda x: -x[1])))
|
|
636
640
|
gen = [c for c in r["callers"] if c.get("generated")]
|
|
637
641
|
if gen: # indexed with --include-generated: callers in files a generator writes
|
|
638
642
|
out.append(f"in generated / copied files ({len(gen)}): " + ", ".join(f"{short(c['id'])} [{c['generated']}]" for c in gen[:8])
|
|
@@ -648,8 +652,13 @@ def impact(method: str, min_confidence: str = "heuristic", max_items: int = 60,
|
|
|
648
652
|
for c in vo[:8]) + (f" …+{len(vo) - 8}" if len(vo) > 8 else ""))
|
|
649
653
|
cand = [c for c in r["callers"] if c.get("candidate")]
|
|
650
654
|
if cand or any(e.get("candidate") for e in r["entry_points"]): # reached through a candidate call edge (#83)
|
|
651
|
-
out.append(f"candidate callers ({len(cand)}): " + ", ".join(short(c["id"]) for c in cand[:12])
|
|
655
|
+
out.append(f"candidate callers ({len(cand)}): " + ", ".join(short(c["id"]) + Q.fanout_text(c) for c in cand[:12])
|
|
652
656
|
+ (f" …+{len(cand) - 12}" if len(cand) > 12 else "") + "\n" + Q.CANDIDATE_NOTE)
|
|
657
|
+
od = [c for c in r["callers"] if c.get("omits_default")]
|
|
658
|
+
if od: # calls that leave out a defaulted argument and so run its default (#212)
|
|
659
|
+
out.append(f"through an omitted default argument ({len(od)}): "
|
|
660
|
+
+ ", ".join(f"{short(c['id'])} ({c['omits_default']}: of {short(c.get('default_of'))})" for c in od[:8])
|
|
661
|
+
+ (f" …+{len(od) - 8}" if len(od) > 8 else ""))
|
|
653
662
|
vb = [c for c in r["callers"] if c.get("via_base")]
|
|
654
663
|
if vb: # calls the base declaration; the target is reached through the override
|
|
655
664
|
out.append(f"via base ({len(vb)}): " + ", ".join(f"{short(c['id'])} -> {c['via_base']}" for c in vb[:8])
|
|
@@ -702,12 +711,26 @@ def callers(symbol: str, min_confidence: str = "heuristic", limit: int = 60) ->
|
|
|
702
711
|
if not rows:
|
|
703
712
|
return head + f"\nno direct callers of {symbol!r} in indexed code (min_confidence={min_confidence}). try: impact() for " \
|
|
704
713
|
f"entry points, reaches() for every dependent over all edge kinds, node() for its other edges"
|
|
705
|
-
|
|
706
|
-
|
|
714
|
+
# one row per call site: a site linked to several per-platform definitions of the target is one site (#201)
|
|
715
|
+
seen, uniq = set(), []
|
|
716
|
+
for r in rows:
|
|
717
|
+
if (r["src"], r["kind"], r["file"], r["line"]) not in seen:
|
|
718
|
+
seen.add((r["src"], r["kind"], r["file"], r["line"]))
|
|
719
|
+
uniq.append(r)
|
|
720
|
+
rows = uniq
|
|
721
|
+
is_cand = [bool(r["attrs"] and '"binding": "candidate"' in r["attrs"]) for r in rows]
|
|
722
|
+
res = [r for r, cd in zip(rows, is_cand) if not cd]
|
|
723
|
+
cands = [r for r, cd in zip(rows, is_cand) if cd]
|
|
724
|
+
# selector-only candidates (receiver type unknown) are counted apart from resolved callers (#204)
|
|
725
|
+
out = [head, f"direct callers: {len({r['src'] for r in res})} ({len(res)} sites)"
|
|
726
|
+
+ (f"; candidate callers: {len({r['src'] for r in cands})} ({len(cands)} site{'' if len(cands) == 1 else 's'}, receiver type unknown)"
|
|
727
|
+
if cands else "")]
|
|
728
|
+
for r in (res + cands)[:limit]:
|
|
707
729
|
c = "" if r["confidence"] == "exact" else f" ~{r['confidence'][0]}"
|
|
708
730
|
k = "ref" if r["kind"] == "REFERENCES_FN" else r["kind"]
|
|
709
|
-
cand = Q.
|
|
710
|
-
out.append(f" {short(r['src'])} {k}@{at((r['file'] or '?') + ':' + str(r['line']))}{c}{cand}"
|
|
731
|
+
cand = Q.candidate_label(r["attrs"], r["dst"]) if r in cands else ""
|
|
732
|
+
out.append(f" {short(r['src'])} {k}@{at((r['file'] or '?') + ':' + str(r['line']))}{c}{cand}"
|
|
733
|
+
+ Q.omitted_default_label(r["attrs"]))
|
|
711
734
|
if len(rows) > limit:
|
|
712
735
|
out.append(f" … +{len(rows) - limit} more (raise limit)")
|
|
713
736
|
return "\n".join(out)
|
|
@@ -1086,7 +1109,8 @@ def node(id_or_symbol: str) -> str:
|
|
|
1086
1109
|
for k, v in sorted(byk.items()):
|
|
1087
1110
|
if k == "CONTAINS":
|
|
1088
1111
|
continue
|
|
1089
|
-
|
|
1112
|
+
# `<id> :<line>`: a variant id carries its own `@N` (`refreshStatus@24 :12`, #201)
|
|
1113
|
+
s = "; ".join(f"{short(r['o'])} :{r['line']}{'!g' if r['gate'] else ''}" for r in v[:6])
|
|
1090
1114
|
out.append(f" {k}: {s}{' …' if len(v) > 6 else ''}")
|
|
1091
1115
|
return "\n".join(out)
|
|
1092
1116
|
|
|
@@ -29,6 +29,7 @@ on any target follow the implementation that target builds.
|
|
|
29
29
|
"""
|
|
30
30
|
from __future__ import annotations
|
|
31
31
|
|
|
32
|
+
import dataclasses
|
|
32
33
|
import fnmatch
|
|
33
34
|
import json
|
|
34
35
|
import os
|
|
@@ -658,11 +659,13 @@ def apply(project, builder) -> dict:
|
|
|
658
659
|
etag[k] = hit
|
|
659
660
|
targets, tsrc = declared_targets(root, cfg, marks, set(langs) | ({"c_cpp"} if langs & {"c", "cpp"} else set()))
|
|
660
661
|
_write_attrs(builder, ntag, nvals, etag, targets)
|
|
662
|
+
narrowed = _narrow_variant_edges(builder, nvals, etag)
|
|
661
663
|
_variant_platforms(builder, nvals, targets)
|
|
662
664
|
unknown = [m for m in marks if any(m["cond"].values().get(p) is None for p in targets)]
|
|
663
665
|
tagged_files = sorted({m["file"] for m in marks})
|
|
664
666
|
st = {"targets": targets, "target_sources": tsrc, "conditions": len(marks), "files_with_conditions": len(tagged_files),
|
|
665
|
-
"tagged_nodes": len(ntag), "tagged_edges": len(etag), "variant_edges": mirrored,
|
|
667
|
+
"tagged_nodes": len(ntag), "tagged_edges": len(etag), "variant_edges": mirrored,
|
|
668
|
+
"variant_edges_narrowed": narrowed, "text_scanned_files": scanned,
|
|
666
669
|
"unevaluated_conditions": len(unknown),
|
|
667
670
|
"unevaluated_per_target": {p: sum(1 for m in unknown if m["cond"].values().get(p) is None) for p in targets},
|
|
668
671
|
"unevaluated_samples": sorted({f"{m['cond'].text} @ {m['file']}:{m['line']}" for m in unknown})[:8]}
|
|
@@ -824,6 +827,63 @@ def _write_attrs(builder, ntag, nvals, etag, targets=None) -> None:
|
|
|
824
827
|
put(e.attrs, ms, _combine([m["cond"].values() for m in ms]))
|
|
825
828
|
|
|
826
829
|
|
|
830
|
+
def _narrow_variant_edges(builder, nvals: dict, etag: dict) -> int:
|
|
831
|
+
"""A reference made where only some targets build (`#if os(macOS)` around the caller or the call) reaches only the
|
|
832
|
+
per-platform definitions built on one of those targets (#201): a macOS-only call of `refreshStatus()` links the
|
|
833
|
+
macOS definition, not the `#else` stub. A reference whose definition is not built anywhere the site is moves to the
|
|
834
|
+
sibling definitions that are (the `#else` type's `Self()` names its own type), and a Swift `init` of a sibling
|
|
835
|
+
variant type that declares no initializer of its own (the implicit one) is no reference at all. References from
|
|
836
|
+
code built everywhere keep linking every definition."""
|
|
837
|
+
alts = {}
|
|
838
|
+
for ids in _alt_groups(builder, nvals).values():
|
|
839
|
+
if len(ids) > 1 and any(i in nvals for i in ids):
|
|
840
|
+
for i in ids:
|
|
841
|
+
alts[i] = ids
|
|
842
|
+
inits: dict[str, list] = defaultdict(list) # Swift type -> its init nodes
|
|
843
|
+
parent: dict[str, str] = {}
|
|
844
|
+
for e in builder.edges.values():
|
|
845
|
+
if e.kind == "CONTAINS" and e.src.startswith("class:"):
|
|
846
|
+
parent[e.dst] = e.src
|
|
847
|
+
dn = builder.nodes.get(e.dst)
|
|
848
|
+
if dn is not None and dn.name == "init":
|
|
849
|
+
inits[e.src].append(e.dst)
|
|
850
|
+
|
|
851
|
+
def avail(i):
|
|
852
|
+
return {p for p in KNOWN if _avail(nvals.get(i), p)}
|
|
853
|
+
|
|
854
|
+
drop, adds = [], []
|
|
855
|
+
for k, e in builder.edges.items():
|
|
856
|
+
if e.kind in ("CONTAINS", "DEFINES", "GATED_BY"):
|
|
857
|
+
continue
|
|
858
|
+
vals = ([nvals[e.src]] if e.src in nvals else []) + [m["cond"].values() for m in etag.get(k, ())]
|
|
859
|
+
if not vals:
|
|
860
|
+
continue
|
|
861
|
+
site = {p for p, v in _combine(vals).items() if v is not False}
|
|
862
|
+
if not site or avail(e.dst) & site:
|
|
863
|
+
continue
|
|
864
|
+
ids = alts.get(e.dst)
|
|
865
|
+
if ids:
|
|
866
|
+
other = [i for i in ids if i != e.dst and avail(i) & site]
|
|
867
|
+
if other:
|
|
868
|
+
drop.append(k)
|
|
869
|
+
adds += [(e, i) for i in other]
|
|
870
|
+
continue
|
|
871
|
+
dn = builder.nodes.get(e.dst)
|
|
872
|
+
if dn is None or dn.lang != "swift" or dn.name != "init" or e.dst not in parent:
|
|
873
|
+
continue
|
|
874
|
+
own = parent[e.dst]
|
|
875
|
+
sib = [v for v in alts.get(own) or () if v != own and avail(v) & site]
|
|
876
|
+
if sib and all(not inits.get(v) for v in sib):
|
|
877
|
+
drop.append(k) # the sibling variant type's implicit initializer
|
|
878
|
+
for k in drop:
|
|
879
|
+
builder.edges.pop(k, None)
|
|
880
|
+
for e, nid in adds:
|
|
881
|
+
key = (e.src, nid, e.kind, e.file, e.line, e.gate)
|
|
882
|
+
if key not in builder.edges:
|
|
883
|
+
builder.edges[key] = dataclasses.replace(e, dst=nid, attrs={**(e.attrs or {}), "platform_variant_of": e.dst})
|
|
884
|
+
return len(drop)
|
|
885
|
+
|
|
886
|
+
|
|
827
887
|
def _variant_platforms(builder, nvals: dict, targets) -> int:
|
|
828
888
|
"""A reference into one of a symbol's per-platform definitions (Rust / C / C++ / Swift `#if` branches) carries
|
|
829
889
|
`variant_platforms`: the targets that definition is built for. Every definition is linked (_mirror), so a caller
|