codingest 0.2.34

codingest — standalone extraction of KGLite's code-tree component: parse polyglot codebases into kglite knowledge graphs (tree-sitter parsers, call/type/route edges, docs pass, multi-rev merge)
Documentation
[package]
name = "codingest"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
description = "codingest — standalone extraction of KGLite's code-tree component: parse polyglot codebases into kglite knowledge graphs (tree-sitter parsers, call/type/route edges, docs pass, multi-rev merge)"
keywords = ["knowledge-graph", "code-analysis", "tree-sitter", "cypher", "kglite"]
categories = ["development-tools", "parser-implementations"]

# Requires the kglite 0.15 engine API (`kglite::api::code_entities`); the
# workspace pins the current engine floor (0.21.4).

[lib]
name = "codingest"
doctest = false

# codingest accuracy harness — reports CALLS-resolution stats + node/edge
# counts for a repo as JSON. Run with
# `cargo run -p codingest --bin codingest_stats --release -- <path>`.
[[bin]]
name = "codingest_stats"
path = "src/bin/codingest_stats.rs"

# codingest Cypher query/traversal benchmark — builds a repo TWICE with the
# codingest builder and runs an identical Cypher workload against each build,
# reporting per-query medians + cross-build query-result parity (determinism).
# `cargo run -p codingest --bin codingest_bench --release -- <path> [--json]`
[[bin]]
name = "codingest_bench"
path = "src/bin/codingest_bench.rs"

[features]
# Docs pass — ingests a repo's markdown as `:Doc` nodes and links them to
# code symbols. Reuses kglite's OKF parser, hence the `kglite/okf` gate.
# (This is the feature named `okf` inside kglite's in-tree code_tree.)
# Default ON for parity with the kglite wheel + mcp-server builds.
default = ["docs"]
docs = ["kglite/okf"]

[dependencies]
base64 = { workspace = true }
kglite = { workspace = true }
sha2 = { workspace = true }

serde = { version = "1.0.229", features = ["derive"] }
serde_json = "1.0.154"
regex = "1.13.1"
rayon = "1.12"
tree-sitter = "0.26.13"
tree-sitter-python = "0.25.0"
tree-sitter-rust = "0.24.2"
tree-sitter-typescript = "0.23.2"
tree-sitter-javascript = "0.25.0"
tree-sitter-go = "0.25.0"
tree-sitter-java = "0.23.5"
tree-sitter-c = "0.24.2"
tree-sitter-cpp = "0.23.4"
tree-sitter-c-sharp = "0.23.5"
tree-sitter-swift = "0.7.4"
tree-sitter-php = "0.25.1"
tree-sitter-html = "0.23.2"
tree-sitter-css = "0.25.0"
tree-sitter-dart = "0.3.0"
tree-sitter-r = "1.3.0"
# 0.23.1 is the newest release (2024-09); it binds via tree-sitter-language
# 0.1 (runtime-agnostic LanguageFn), so it carries no tree-sitter runtime
# ceiling and links cleanly against tree-sitter 0.26.
tree-sitter-julia = "0.23.1"
toml = "1.1.8"
walkdir = "2.5.0"
tempfile = "3.27.0"
aho-corasick = "1.1.5"

[dev-dependencies]
tempfile = "3.27.0"
# `tests/grammar_kinds.rs` parses the parser sources as Rust instead of
# regexing them, which is what makes `match node.kind() { "lit" => … }` arms
# exactly extractable (a regex over arm bodies false-positives on every other
# string literal in the body). `full` = item/statement/expression syntax,
# `visit` = the borrowing visitor the extractor implements. `span-locations`
# on proc-macro2 is what gives the failure message a real `file:line` for each
# offending literal; without it every span reports line 1.
syn = { version = "3.0.9", features = ["full", "visit"] }
proc-macro2 = { version = "1.0.107", features = ["span-locations"] }