bynk_project/lib.rs
1//! Bynk's project model (#1113, P4.0): discovery, the unit dependency graph,
2//! path resolution, cross-unit consistency checks, and the schema-registry
3//! document's read/write halves.
4//!
5//! Extracted from `bynk-emit/src/project.rs` and its `project/` submodule
6//! tree so `bynk-emit` becomes a *dependent* of this crate rather than owning
7//! this code directly (`design/tracks/project-model.md` §3, §6 row P4.0).
8//! `bynk-check`/`bynk-syntax`/grammar/AST/emitter language surface is
9//! untouched — a crate-boundary and internal-representation move, not a
10//! language change.
11//!
12//! What did **not** move (stays in `bynk-emit`, per the slice's own scope):
13//! `schema_registry::reconcile` and its helpers (`bynk_check`-coupled via
14//! `UnitTable`, pending P4.1's `bynk-check` entry point); `diagnostics::Mode`,
15//! `ErrorSink`, `ProjectAnalysis`, `ProjectFailure`, `ContextSequenceInfo`,
16//! `ContextBoundaryInfo` (facts about how the pipeline is driven/consumed,
17//! not about the project itself); `symbols` (`UnitTable`, `bynk_check`-coupled
18//! via `resolver::MethodTable`); `validate`/`tests_emit` (checking and test
19//! codegen, not project modelling).
20//!
21//! The public surface below is enumerated by hand (R10.4-style) — no blanket
22//! `pub use module::*`.
23
24pub mod consistency;
25pub mod discovery;
26pub mod graph;
27pub mod json;
28pub mod parse_cache;
29pub mod paths;
30pub mod roots;
31pub mod schema_registry;
32
33mod diagnostics;
34
35pub use consistency::{
36 check_directory_kind_consistency, check_directory_name_consistency,
37 check_group_kind_consistency, check_path_name_alignment,
38};
39pub use diagnostics::AttributedError;
40pub use discovery::{
41 ParsedFile, RecoveredSources, case_effective_tier, check_file_directory_conflicts,
42 discover_bynk_files, discover_project_files, parse_sources, parse_sources_recovering,
43 read_adapter_binding, read_source, suite_effective_tier_is_system,
44};
45pub use graph::{detect_consumes_cycles, detect_provider_dependency_cycles};
46pub use json::json_string;
47pub use paths::{
48 MANIFEST_TABLES, ProjectPaths, ProjectPathsError, check_manifest, check_manifest_str,
49 commons_dir_for, is_multi_file_layout, is_unpinned_range, normalize_rel, renamed_unit_name,
50 render_package_json, try_read_project_paths, try_read_project_paths_with, ts_output_path,
51 unit_path_matches, worker_dir_name, worker_handlers_output_path, worker_handlers_source_path,
52};
53pub use roots::{Roots, SchemaLock, UnitKind};