codmap 0.0.24__tar.gz → 0.0.25__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.
- {codmap-0.0.24/codmap.egg-info → codmap-0.0.25}/PKG-INFO +2 -2
- {codmap-0.0.24 → codmap-0.0.25}/README.md +1 -1
- {codmap-0.0.24 → codmap-0.0.25}/codemap/extract/behavior.py +5 -1
- {codmap-0.0.24 → codmap-0.0.25/codmap.egg-info}/PKG-INFO +2 -2
- {codmap-0.0.24 → codmap-0.0.25}/codmap.egg-info/SOURCES.txt +1 -0
- {codmap-0.0.24 → codmap-0.0.25}/pyproject.toml +1 -1
- codmap-0.0.25/tests/test_r1c75_reexported_class_calls.py +58 -0
- {codmap-0.0.24 → codmap-0.0.25}/LICENSE +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/__init__.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/apidiff.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/arch.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/cli.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/diagnostics.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/extract/__init__.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/extract/attrflow.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/extract/dataflow.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/extract/dispatch.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/extract/griffe_extractor.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/extract/gsource.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/extract/probe.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/extract/roots.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/extract/union.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/freshness.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/incremental.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/integrations/__init__.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/integrations/base.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/integrations/cocoindex.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/integrations/gate.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/integrations/gitnexus.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/integrations/registry.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/integrations/transport.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/model.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/provenance.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/query.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/scope.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/__init__.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/_scip_pb2.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/api_surface.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/apidiff.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/architecture.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/audit.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/check.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/ctags.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/currency.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/impact.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/limits.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/livingdocs.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/mcp_server.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/mermaid.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/pack.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/rag.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/review.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/scip.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/semantic.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/server.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/session.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/subsystems.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/serve/vault.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/store.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/tomlio.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codemap/watch.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codmap.egg-info/dependency_links.txt +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codmap.egg-info/entry_points.txt +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codmap.egg-info/requires.txt +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/codmap.egg-info/top_level.txt +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/setup.cfg +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_epistemic.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_gitnexus_router.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_impact_depth.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_integrations.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_issue3_serve_freshness.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_livingdocs.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m0_api_surface.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m11_argcontract.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m12_dataflow.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m15_review.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m16_architecture.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m17_mcp.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m18_freshness.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m1_5_semantics.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m1_query.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m2_views.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m32_watch.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m3_serve.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m4_behavior.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m5_deep.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m6_repo_scope.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m7_dispatch.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_m9_family.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_pack_honesty.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c13_callgraph_accuracy.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c13_grep_vs_graph.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c16_semantic.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c20_attribute_edges.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c21_flat_layout.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c22_source_visible_refs.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c23_hard_python.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c24_test_mapping.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c25_provenance.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c26_deep_union.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c27_config_honesty.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c28_limit_envelope.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c29_lazy_imports.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c2_ctags.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c30_local_import_calls.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c30f1_reexport_calls.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c30f2_check_scope.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c31_path_origin.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c32_report_json.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c33_query_signature.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c34_signature_kinds.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c35_contract_location.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c36_target_resolution.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c37_rule_mutation.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c38_tool_drift.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c39_edge_resolution.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c3_arch_contract.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c3_dogfood.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c40_flow_reach.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c41_scope_membership.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c42_deep_tier_stability.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c43_incremental_splice.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c44_absent_answers.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c45_repeat_union.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c46_shadowed_definitions.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c47_incremental_resample.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c48_type_checking_imports.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c49_type_only_cycles.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c4_complexity.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c50_flow_entry_points.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c53_narrowing_declared.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c54_deterministic_rendering.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c55_override_grade.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c56_stub_files.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c57_facade_package.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c58_cycle_tangles.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c59_completeness_drop.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c5_apidiff.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c60_nested_definitions.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c62_phantom_rules.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c63_answer_format.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c64_dependency_probe.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c66_pack_direction.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c68_dotted_imports.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c69_contract_validation.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c6_pack.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c70_check_graph_currency.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c71_attribute_chain_calls.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c72_flat_inference_in_packages.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c73_cli_version.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c74_call_site_conservation.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c7_edge_vocab.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c8_deadcode.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_r1c9_incremental.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_scip_export.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_scope.py +0 -0
- {codmap-0.0.24 → codmap-0.0.25}/tests/test_subsystems.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codmap
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.25
|
|
4
4
|
Summary: Static analyzer that turns a package's source into a queryable code graph.
|
|
5
5
|
Author-email: kogriv <kogriv@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -44,7 +44,7 @@ and a **SCIP index** for interop with Sourcegraph / Glean and other precise-code
|
|
|
44
44
|
|
|
45
45
|
[](https://github.com/kogriv/codemap/actions/workflows/ci.yml)
|
|
46
46
|
|
|
47
|
-
**Status:** 🟢 M0–M20 implemented + research track (R1/R2) — schema 0.13, **
|
|
47
|
+
**Status:** 🟢 M0–M20 implemented + research track (R1/R2) — schema 0.13, **1130 tests with no failures on
|
|
48
48
|
Python 3.11–3.14** ([in CI](docs/ci.md): the full suite including the dogfood pass, a determinism check, a
|
|
49
49
|
wheel smoke test, and ctags/SCIP interop against the real CLIs), warm serve surface with 31 ops (28 exposed
|
|
50
50
|
as MCP tools), and SCIP export. See **[DESIGN.md](DESIGN.md)** (product design &
|
|
@@ -8,7 +8,7 @@ and a **SCIP index** for interop with Sourcegraph / Glean and other precise-code
|
|
|
8
8
|
|
|
9
9
|
[](https://github.com/kogriv/codemap/actions/workflows/ci.yml)
|
|
10
10
|
|
|
11
|
-
**Status:** 🟢 M0–M20 implemented + research track (R1/R2) — schema 0.13, **
|
|
11
|
+
**Status:** 🟢 M0–M20 implemented + research track (R1/R2) — schema 0.13, **1130 tests with no failures on
|
|
12
12
|
Python 3.11–3.14** ([in CI](docs/ci.md): the full suite including the dogfood pass, a determinism check, a
|
|
13
13
|
wheel smoke test, and ctags/SCIP interop against the real CLIs), warm serve surface with 31 ops (28 exposed
|
|
14
14
|
as MCP tools), and SCIP export. See **[DESIGN.md](DESIGN.md)** (product design &
|
|
@@ -682,7 +682,11 @@ def _resolve(call, modpath, class_prefix, imports, modmembers, members, reexport
|
|
|
682
682
|
tgt = imports[head]
|
|
683
683
|
if not _is_internal(tgt, modpath):
|
|
684
684
|
return f"{tgt}.{'.'.join(parts)}", "external"
|
|
685
|
-
|
|
685
|
+
# R1-C75 (design ``reexported_class_calls.md``): the head first. A class bound through
|
|
686
|
+
# a package re-export (`from pkg import Cls`) is no node under the package's name, so
|
|
687
|
+
# `Cls.method()` died on its first hop while `Cls()` resolved. Unchanged for a head that
|
|
688
|
+
# is a node or names no re-export.
|
|
689
|
+
cur = _follow_reexport(tgt, reexports or {}, nodes)
|
|
686
690
|
for part in parts:
|
|
687
691
|
cur = _follow_reexport(f"{cur}.{part}", reexports or {}, nodes)
|
|
688
692
|
if len(parts) == 1 or cur in nodes:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codmap
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.25
|
|
4
4
|
Summary: Static analyzer that turns a package's source into a queryable code graph.
|
|
5
5
|
Author-email: kogriv <kogriv@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -44,7 +44,7 @@ and a **SCIP index** for interop with Sourcegraph / Glean and other precise-code
|
|
|
44
44
|
|
|
45
45
|
[](https://github.com/kogriv/codemap/actions/workflows/ci.yml)
|
|
46
46
|
|
|
47
|
-
**Status:** 🟢 M0–M20 implemented + research track (R1/R2) — schema 0.13, **
|
|
47
|
+
**Status:** 🟢 M0–M20 implemented + research track (R1/R2) — schema 0.13, **1130 tests with no failures on
|
|
48
48
|
Python 3.11–3.14** ([in CI](docs/ci.md): the full suite including the dogfood pass, a determinism check, a
|
|
49
49
|
wheel smoke test, and ctags/SCIP interop against the real CLIs), warm serve surface with 31 ops (28 exposed
|
|
50
50
|
as MCP tools), and SCIP export. See **[DESIGN.md](DESIGN.md)** (product design &
|
|
@@ -146,6 +146,7 @@ tests/test_r1c71_attribute_chain_calls.py
|
|
|
146
146
|
tests/test_r1c72_flat_inference_in_packages.py
|
|
147
147
|
tests/test_r1c73_cli_version.py
|
|
148
148
|
tests/test_r1c74_call_site_conservation.py
|
|
149
|
+
tests/test_r1c75_reexported_class_calls.py
|
|
149
150
|
tests/test_r1c7_edge_vocab.py
|
|
150
151
|
tests/test_r1c8_deadcode.py
|
|
151
152
|
tests/test_r1c9_incremental.py
|
|
@@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta"
|
|
|
9
9
|
# version. README says this plainly, since `pip install codmap` / `import codemap` is a
|
|
10
10
|
# seam a reader will otherwise hit by surprise.
|
|
11
11
|
name = "codmap"
|
|
12
|
-
version = "0.0.
|
|
12
|
+
version = "0.0.25"
|
|
13
13
|
description = "Static analyzer that turns a package's source into a queryable code graph."
|
|
14
14
|
readme = "README.md"
|
|
15
15
|
# M20/D1: measured, not assumed. Each release of the declared range runs the full suite in
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""R1-C75 — a call through a class name that came in by a package re-export.
|
|
2
|
+
|
|
3
|
+
`from pkg.indicators import LibraryManager` + `LibraryManager.create_indicator()` was unresolved in the
|
|
4
|
+
fast tier, while the same call after a direct import of the defining module resolved, and so did a bare
|
|
5
|
+
`LibraryManager()` through the re-export. Design: docs/design/reexported_class_calls.md.
|
|
6
|
+
"""
|
|
7
|
+
from codemap.extract import extract
|
|
8
|
+
|
|
9
|
+
FILES = {
|
|
10
|
+
"__init__.py": "",
|
|
11
|
+
"indicators/__init__.py": "from .library.manager import LibraryManager\n",
|
|
12
|
+
"indicators/library/__init__.py": "",
|
|
13
|
+
"indicators/library/manager.py": (
|
|
14
|
+
"class LibraryManager:\n"
|
|
15
|
+
" @classmethod\n def create_indicator(cls, name):\n return name\n\n"
|
|
16
|
+
" @staticmethod\n def load_all():\n return 1\n"),
|
|
17
|
+
"analysis/__init__.py": "",
|
|
18
|
+
"analysis/s/__init__.py": "",
|
|
19
|
+
"analysis/s/direct.py": (
|
|
20
|
+
"from ...indicators.library.manager import LibraryManager\n\n\n"
|
|
21
|
+
"def direct():\n return LibraryManager.create_indicator('x')\n"),
|
|
22
|
+
"analysis/s/viare.py": (
|
|
23
|
+
"from ...indicators import LibraryManager\n\n\n"
|
|
24
|
+
"def via_reexport():\n return LibraryManager.create_indicator('x'), LibraryManager.load_all()\n\n\n"
|
|
25
|
+
"def construct():\n return LibraryManager()\n"),
|
|
26
|
+
"analysis/s/absre.py": (
|
|
27
|
+
"from rpkg.indicators import LibraryManager\n\n\n"
|
|
28
|
+
"def absolute_reexport():\n return LibraryManager.create_indicator('x')\n"),
|
|
29
|
+
}
|
|
30
|
+
M = "rpkg.indicators.library.manager.LibraryManager"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _graph(tmp_path):
|
|
34
|
+
root = tmp_path / "rpkg"
|
|
35
|
+
for rel, body in FILES.items():
|
|
36
|
+
p = root / rel
|
|
37
|
+
p.parent.mkdir(parents=True, exist_ok=True)
|
|
38
|
+
p.write_text(body)
|
|
39
|
+
return extract(str(root))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _calls(g, src):
|
|
43
|
+
return sorted(e.target for e in g.edges if e.type == "calls" and e.source == src)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def test_a_method_of_a_reexported_class_resolves(tmp_path):
|
|
47
|
+
g = _graph(tmp_path)
|
|
48
|
+
assert _calls(g, "rpkg.analysis.s.viare.via_reexport") == [f"{M}.create_indicator", f"{M}.load_all"]
|
|
49
|
+
assert _calls(g, "rpkg.analysis.s.absre.absolute_reexport") == [f"{M}.create_indicator"]
|
|
50
|
+
for fn, n in (("viare.via_reexport", 2), ("absre.absolute_reexport", 1)):
|
|
51
|
+
c = g.nodes[f"rpkg.analysis.s.{fn}"].extras["calls"]
|
|
52
|
+
assert (c["resolved"], c["unresolved"]) == (n, 0)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def test_the_direct_import_and_the_bare_constructor_are_unchanged(tmp_path):
|
|
56
|
+
g = _graph(tmp_path)
|
|
57
|
+
assert _calls(g, "rpkg.analysis.s.direct.direct") == [f"{M}.create_indicator"]
|
|
58
|
+
assert _calls(g, "rpkg.analysis.s.viare.construct") == [M]
|
|
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
|
|
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
|
|
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
|