Skip to main content

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 assets;
25pub mod consistency;
26pub mod contracts_lock;
27pub mod discovery;
28pub mod graph;
29pub mod json;
30pub mod lock;
31pub mod manifest;
32#[cfg(feature = "schema")]
33pub mod manifest_schema;
34pub mod packages;
35pub mod parse_cache;
36pub mod paths;
37pub mod roots;
38pub mod schema_registry;
39pub mod workspace;
40
41mod diagnostics;
42
43pub use consistency::{
44    check_directory_kind_consistency, check_directory_name_consistency,
45    check_group_kind_consistency, check_group_module_docs, check_path_name_alignment,
46};
47pub use diagnostics::{AttributedError, LabelFile};
48pub use discovery::{
49    ParsedFile, RecoveredSources, case_effective_tier, check_file_directory_conflicts,
50    discover_bynk_files, discover_project_files, parse_sources, parse_sources_recovering,
51    read_adapter_binding, read_adapter_include, read_source, suite_effective_tier_is_system,
52};
53pub use graph::{detect_consumes_cycles, detect_provider_dependency_cycles};
54pub use json::json_string;
55pub use manifest::{
56    DependencySource, DependencySpec, PackageConfig, RegistryConfig, WorkspaceConfig,
57    read_package_config,
58};
59pub use packages::{
60    GraphProblem, Package, PackageGraph, PackageId, dependency_trees, display_names,
61    display_unit_name, resolve_graph, split_canonical,
62};
63pub use paths::{
64    MANIFEST_MAP_TABLES, MANIFEST_TABLES, ProjectPaths, ProjectPathsError, TestTarget,
65    UnstableConfig, WorkersConfig, check_manifest, check_manifest_str, commons_dir_for,
66    duplicate_compatibility_flag_warning, is_multi_file_layout, is_unpinned_range, normalize_rel,
67    read_unstable_config, renamed_unit_name, render_package_json, try_read_project_paths,
68    try_read_project_paths_with, try_read_test_targets, try_read_unstable_config,
69    try_read_unstable_config_with, try_read_workers_config, try_read_workers_config_with,
70    ts_output_path, unit_path_matches, worker_dir_name, worker_file_source_path,
71    worker_handlers_output_path, worker_handlers_source_path,
72};
73pub use roots::{Roots, SchemaLock, UnitKind};
74pub use workspace::{Workspace, find_parent_workspace, is_workspace_root, load_workspace};