Files
wehub-resource-sync 41cb1c0170
OpenSSF Scorecard / scorecard (push) Failing after 0s
DCO / dco (push) Failing after 0s
CodeQL SAST / analyze (push) Failing after 1s
Deploy Pages / deploy (push) Failing after 1s
chore: import upstream snapshot with attribution
2026-07-13 12:28:05 +08:00

34 lines
1.4 KiB
C

/* rust_rustdoc.h — Ingest `cargo +nightly rustdoc --output-format json`
* output into the Rust LSP type registry.
*
* Per the FOLLOWUP-extension Option A: when a project opts in by
* running rustdoc once, we can ingest the resulting JSON and register
* every item (struct, trait, fn, method) with accurate signatures.
* That eliminates the "unseeded external crate" gap because rustdoc
* already did the macro expansion and type resolution.
*
* The schema is rustdoc's "Crate" type. We handle:
* - paths { id → { path: [..], kind: "struct"|"trait"|... } }
* - index { id → Item { name, inner: { Function|Struct|... }, … } }
*
* We ignore everything we don't understand. The JSON format is unstable
* across rustdoc versions; we tolerate missing fields gracefully and
* just skip items we can't make sense of.
*
* Schema reference: https://github.com/rust-lang/rust/blob/master/src/rustdoc-json-types/lib.rs
*/
#ifndef CBM_LSP_RUST_RUSTDOC_H
#define CBM_LSP_RUST_RUSTDOC_H
#include "../arena.h"
#include "type_registry.h"
/* Ingest a rustdoc JSON document into the registry. `crate_qn` is the
* QN prefix to use for items (e.g. "serde" for crate `serde`). Returns
* the number of items registered. */
int cbm_rust_rustdoc_ingest(CBMTypeRegistry* reg, CBMArena* arena,
const char* json, int json_len, const char* crate_qn);
#endif /* CBM_LSP_RUST_RUSTDOC_H */