Skip to content

Commit 416cf0c

Browse files
committed
docs: README reflects vendored scalpel as built-in default (drop removed [scalpel] extra)
1 parent 372db10 commit 416cf0c

1 file changed

Lines changed: 9 additions & 11 deletions

File tree

README.md

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,9 @@ For the optional **live Neo4j push** (`--emit neo4j --neo4j-uri …`), install t
104104
pip install 'codeanalyzer-python[neo4j]'
105105
```
106106

107-
For the **Scalpel-backed points-to oracle** at level 4, install the `scalpel` extra. It is optional:
108-
when it is absent, level 4 automatically falls back to the built-in type-based oracle.
109-
110-
```sh
111-
pip install 'codeanalyzer-python[scalpel]'
112-
```
107+
The **Scalpel-backed points-to oracle** at level 4 is vendored and built in — no extra install
108+
required. If Scalpel cannot resolve a construct, level 4 automatically falls back to the built-in
109+
type-based oracle.
113110

114111
### Install via shell script
115112

@@ -529,11 +526,12 @@ symbol-table signature by construction
529526
- **Points-to oracle (level 4):** the **Scalpel** may-alias oracle — `ScalpelAliasOracle`
530527
(`codeanalyzer/dataflow/scalpel_oracle.py`) — consumes Scalpel's SSA copy/const facts to answer
531528
`may_alias(path_a, path_b)`, adding the alias-aware DDG edges (`prov: ["points-to"]`) and the
532-
interprocedural summaries. `python-scalpel` is an **optional dependency**
533-
(`pip install 'codeanalyzer-python[scalpel]'`); when it is absent or cannot resolve a construct,
534-
the analyzer automatically falls back to the built-in `TypeBasedAliasOracle` (Jedi-inferred types;
535-
unknown types conservatively alias), keeping the `may_alias` interface total. Call dispatch comes
536-
from the merged Jedi(+PyCG) call graph, treated as a frozen oracle.
529+
interprocedural summaries. Scalpel is **vendored** — a `typed_ast`-free slice built into the
530+
package under `codeanalyzer/dataflow/scalpel/` — so it is the **default** level-4 oracle with no
531+
external dependency to install; the analyzer falls back to the built-in `TypeBasedAliasOracle`
532+
(Jedi-inferred types; unknown types conservatively alias) only when Scalpel can't resolve a
533+
construct or a per-callable build fails, keeping the `may_alias` interface total. Call dispatch
534+
comes from the merged Jedi(+PyCG) call graph, treated as a frozen oracle.
537535
- **Summaries:** relational formal-in → formal-out flows composed bottom-up over the Tarjan SCC
538536
condensation of the call graph, a monotone fixpoint within SCCs; globals ride as extra formals,
539537
closure captures bind at definition sites.

0 commit comments

Comments
 (0)