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