codeanalyzer-python 1.5.0__py3-none-any.whl → 1.5.1__py3-none-any.whl
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.
- codeanalyzer/dataflow/builder.py +1 -0
- codeanalyzer/neo4j/project.py +6 -0
- codeanalyzer/schema/py_schema.py +5 -0
- {codeanalyzer_python-1.5.0.dist-info → codeanalyzer_python-1.5.1.dist-info}/METADATA +3 -2
- {codeanalyzer_python-1.5.0.dist-info → codeanalyzer_python-1.5.1.dist-info}/RECORD +9 -9
- {codeanalyzer_python-1.5.0.dist-info → codeanalyzer_python-1.5.1.dist-info}/WHEEL +0 -0
- {codeanalyzer_python-1.5.0.dist-info → codeanalyzer_python-1.5.1.dist-info}/entry_points.txt +0 -0
- {codeanalyzer_python-1.5.0.dist-info → codeanalyzer_python-1.5.1.dist-info}/licenses/LICENSE +0 -0
- {codeanalyzer_python-1.5.0.dist-info → codeanalyzer_python-1.5.1.dist-info}/licenses/NOTICE +0 -0
codeanalyzer/dataflow/builder.py
CHANGED
codeanalyzer/neo4j/project.py
CHANGED
|
@@ -257,17 +257,23 @@ def _project_program_graphs(
|
|
|
257
257
|
# endpoint functions' identity maps), so they land on the very PyBodyNode ids
|
|
258
258
|
# projected above — a formal_in global id equals _global_ordinal(callee.id,
|
|
259
259
|
# "@formal_in:0"). No dangling references.
|
|
260
|
+
# `var` (#195): the callee-side formal's variable, set on every edge by the
|
|
261
|
+
# SDG assembler and carried on `ParamEdge.var`. The catalog declared it and
|
|
262
|
+
# nothing wrote it, so `r.var` predicates went three-valued across every
|
|
263
|
+
# call boundary.
|
|
260
264
|
for e in app.param_in or []:
|
|
261
265
|
b.edge(
|
|
262
266
|
"PY_PARAM_IN",
|
|
263
267
|
NodeRef("PyBodyNode", "id", e.src),
|
|
264
268
|
NodeRef("PyBodyNode", "id", e.dst),
|
|
269
|
+
prune({"var": e.var}),
|
|
265
270
|
)
|
|
266
271
|
for e in app.param_out or []:
|
|
267
272
|
b.edge(
|
|
268
273
|
"PY_PARAM_OUT",
|
|
269
274
|
NodeRef("PyBodyNode", "id", e.src),
|
|
270
275
|
NodeRef("PyBodyNode", "id", e.dst),
|
|
276
|
+
prune({"var": e.var}),
|
|
271
277
|
)
|
|
272
278
|
|
|
273
279
|
|
codeanalyzer/schema/py_schema.py
CHANGED
|
@@ -171,7 +171,12 @@ class SummaryEdge(BaseModel):
|
|
|
171
171
|
|
|
172
172
|
@builder
|
|
173
173
|
class ParamEdge(BaseModel):
|
|
174
|
+
"""A `param_in` (actual_in → formal_in) or `param_out` (formal_out → actual_out)
|
|
175
|
+
edge at application scope. `var` is the callee-side formal's variable — the
|
|
176
|
+
parameter name, or `<return>` for the return port — always set (#195), the
|
|
177
|
+
same value codeanalyzer-typescript carries on its `param_in[].var`."""
|
|
174
178
|
src: str; dst: str
|
|
179
|
+
var: Optional[str] = None
|
|
175
180
|
|
|
176
181
|
|
|
177
182
|
@builder
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: codeanalyzer-python
|
|
3
|
-
Version: 1.5.
|
|
3
|
+
Version: 1.5.1
|
|
4
4
|
Summary: Static analysis for Python — canonical schema v2 (symbol table, call graph, and native CFG/PDG/SDG dataflow) as analysis.json or a Neo4j property graph.
|
|
5
5
|
Author-email: Rahul Krishna <i.m.ralk@gmail.com>
|
|
6
6
|
License-File: LICENSE
|
|
@@ -535,7 +535,8 @@ just populate more of the same tree:
|
|
|
535
535
|
{ "id": "can://<app>/@external/os/getcwd", "kind": "external",
|
|
536
536
|
"name": "getcwd", "module": "os" }
|
|
537
537
|
},
|
|
538
|
-
"param_in": [ { "src": "can://…/main(a)@6:4/actual_in:0", "dst": "can://…/helper(x)@formal_in:0"
|
|
538
|
+
"param_in": [ { "src": "can://…/main(a)@6:4/actual_in:0", "dst": "can://…/helper(x)@formal_in:0",
|
|
539
|
+
"var": "x" } ], // var = the callee formal
|
|
539
540
|
"param_out": [ { "src": "can://…/helper(x)@formal_out", "dst": "can://…/main(a)@6:4/actual_out" } ]
|
|
540
541
|
}
|
|
541
542
|
}
|
|
@@ -13,7 +13,7 @@ codeanalyzer/artifacts/parsers.py,sha256=xOjC53tT0Mv0k7ONGwzl5XUvpBLnZlEcGmyrX5D
|
|
|
13
13
|
codeanalyzer/dataflow/__init__.py,sha256=HCNOH24rAGLUMG94N9aC-2SsAWSntk3uys7e39ipU5o,1725
|
|
14
14
|
codeanalyzer/dataflow/access_paths.py,sha256=wC8Q9qD-RZzkoFWMVvu_6uNNmYP8z48OGp9h9v3F1d4,23623
|
|
15
15
|
codeanalyzer/dataflow/alias.py,sha256=ZYKY0DiR3GHv6YJr7C001Lode9rZsk6-gxdomUyIvwg,3928
|
|
16
|
-
codeanalyzer/dataflow/builder.py,sha256=
|
|
16
|
+
codeanalyzer/dataflow/builder.py,sha256=grzgpl82KzNiwlgdTx60INMxkTZvddT3JzgaBRO4xh4,32839
|
|
17
17
|
codeanalyzer/dataflow/cfg.py,sha256=u5YXJjAaDshdgv-9kWWITbBJFP-MwXKq6hbNh0fhDm8,25307
|
|
18
18
|
codeanalyzer/dataflow/defuse.py,sha256=LrX1ToOZzR79NlAGg5T647UAFkpiEqEnT7t0K5RXOiI,4377
|
|
19
19
|
codeanalyzer/dataflow/dominance.py,sha256=X7Ki1QRdVqaseYsJtiUL7m9MbcC2WHEv9b8bczSLFUA,5086
|
|
@@ -48,7 +48,7 @@ codeanalyzer/neo4j/__init__.py,sha256=8Ei6uThTOqmul6GhnKoGOjLXJZbyDwF5Jo-8I8NxnA
|
|
|
48
48
|
codeanalyzer/neo4j/bolt.py,sha256=8l70iGDjY3Kdm-W1sb3b3O1uqLjDrVPYTpXhnkXdZOY,13694
|
|
49
49
|
codeanalyzer/neo4j/cypher.py,sha256=-wledvXVrcLJRtSC5MCn1N3tqgC06rNfPBn0w6POqHo,6239
|
|
50
50
|
codeanalyzer/neo4j/emit.py,sha256=OBCO77TDTaNpqk9Di3JIQzBouLpHPdgoXuPSs44iJuU,3587
|
|
51
|
-
codeanalyzer/neo4j/project.py,sha256=
|
|
51
|
+
codeanalyzer/neo4j/project.py,sha256=wKvX7C1vamGswzoBRX09BZ1hOm1NJWoSdtQ7UNt2qTE,39102
|
|
52
52
|
codeanalyzer/neo4j/rows.py,sha256=n_J3NVIusLPsHMjPCWaYvlL5sFm6V-kl_Z6B_BTH8Fk,10140
|
|
53
53
|
codeanalyzer/neo4j/schema.py,sha256=ZRjBxpagBsQrPbD5BbeAZlj3ilTeYe4AsquztRDaH4M,14735
|
|
54
54
|
codeanalyzer/options/__init__.py,sha256=6NewN0a-1HAEgKcxQjYyVn2WEDLrhax8h3WLgZddeqI,94
|
|
@@ -59,7 +59,7 @@ codeanalyzer/schema/call_graph_ids.py,sha256=mWAhJDBsW8i-siJiINOHCXEm4qM6F_5se9-
|
|
|
59
59
|
codeanalyzer/schema/ids.py,sha256=YuioNK3Y-M2NcCBiGH4AB4rDezlqu6ycNO0R3O-Jxho,4388
|
|
60
60
|
codeanalyzer/schema/l1_body.py,sha256=_sca0mTkMRb-5lasep87faGjDxZJd9jGB0hmBx3uCgk,1757
|
|
61
61
|
codeanalyzer/schema/l2_callees.py,sha256=CTcBeGoO04DstDC6h-1sHMbbIrHDEOMxP01U9VLBcfc,2327
|
|
62
|
-
codeanalyzer/schema/py_schema.py,sha256=
|
|
62
|
+
codeanalyzer/schema/py_schema.py,sha256=4xJto32nWqHx0dkge4qHsV2JZSjbyv4ojnqpyBm78sQ,24588
|
|
63
63
|
codeanalyzer/semantic_analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
64
|
codeanalyzer/semantic_analysis/call_graph.py,sha256=6YEB_wTn5-oQYLrbIhJYE0BsHl4fpWPoy5Hwd9mTnGc,11918
|
|
65
65
|
codeanalyzer/semantic_analysis/defuse_linker.py,sha256=bSn1rCun28OQqSd2NOc9aVBSm47Gt9Iul4r_gwfqO1w,64930
|
|
@@ -70,9 +70,9 @@ codeanalyzer/syntactic_analysis/symbol_table_builder.py,sha256=eTknBDlUuuQd3JEwb
|
|
|
70
70
|
codeanalyzer/utils/__init__.py,sha256=hC6VWdR5rerSqBxzu9KQHTASWqwrrYJv-CMDwrTlzkc,137
|
|
71
71
|
codeanalyzer/utils/logging.py,sha256=Fw0tattPAOMs3o0JMjjXhRVLIF64f-SCcygUXF9jqeg,904
|
|
72
72
|
codeanalyzer/utils/progress_bar.py,sha256=C9JtzVdd10lIxTv-KA6PebqjKWueC_vMGwVzAtHuHIw,2818
|
|
73
|
-
codeanalyzer_python-1.5.
|
|
74
|
-
codeanalyzer_python-1.5.
|
|
75
|
-
codeanalyzer_python-1.5.
|
|
76
|
-
codeanalyzer_python-1.5.
|
|
77
|
-
codeanalyzer_python-1.5.
|
|
78
|
-
codeanalyzer_python-1.5.
|
|
73
|
+
codeanalyzer_python-1.5.1.dist-info/METADATA,sha256=Ujo3QIsG8aBykzxm3Mjw_OLCD3b8oaiIrLP1wTvOVD8,44845
|
|
74
|
+
codeanalyzer_python-1.5.1.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
|
|
75
|
+
codeanalyzer_python-1.5.1.dist-info/entry_points.txt,sha256=v4Vux0Nnx7sOntVk_CH7W9RX6SkIkvR1FQYq73oVlCQ,105
|
|
76
|
+
codeanalyzer_python-1.5.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
77
|
+
codeanalyzer_python-1.5.1.dist-info/licenses/NOTICE,sha256=MdVkNYqHJ20on2FmWvgD4WpMsX5mir33xdyPvTXd0A0,1223
|
|
78
|
+
codeanalyzer_python-1.5.1.dist-info/RECORD,,
|
|
File without changes
|
{codeanalyzer_python-1.5.0.dist-info → codeanalyzer_python-1.5.1.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{codeanalyzer_python-1.5.0.dist-info → codeanalyzer_python-1.5.1.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|