Skip to main content

oak_pretty_print/
lib.rs

1#![doc(html_logo_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
2#![doc(html_favicon_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
3#![feature(new_range_api)]
4pub extern crate alloc;
5extern crate self as oak_pretty_print;
6
7#[doc(hidden)]
8pub mod __private {
9    pub use crate::alloc;
10}
11
12// Public modules
13pub mod builtin_rules;
14pub mod comment;
15pub mod config;
16pub mod document;
17pub mod errors;
18pub mod formatter;
19pub mod rules;
20pub mod to_doc;
21
22// Re-export commonly used types
23pub use crate::{
24    builtin_rules::create_builtin_rules,
25    comment::{Comment, CommentCollector, CommentKind, CommentProcessor},
26    config::{FormatConfig, IndentStyle, LineEnding},
27    errors::FormatResult,
28    formatter::{FormatContext, FormatOutput, Formatter},
29    rules::{FormatRule, RuleSet},
30    to_doc::{AsDocument, ToDocument},
31};
32pub use oak_core::language::Language;
33
34pub use crate::document::Document;
35pub type Doc<'a> = Document<'a>;
36
37pub use oak_macros::{AsDocument, FormatRule, define_rules, doc};
38
39/// 空文档
40pub const NIL: Document<'static> = Document::Nil;
41/// 强制换行
42pub const LINE: Document<'static> = Document::Line;
43
44/// 增加缩进
45pub fn indent<'a>(doc: Document<'a>) -> Document<'a> {
46    Document::indent(doc)
47}
48
49/// 将多个文档用指定分隔符连接
50pub fn join<'a>(docs: impl IntoIterator<Item = Document<'a>>, separator: Document<'a>) -> Document<'a> {
51    Document::join(docs, separator)
52}
53/// 软换行
54pub const SOFT_LINE: Document<'static> = Document::SoftLine;
55/// 软换行(带空格)
56pub const SOFT_LINE_SPACE: Document<'static> = Document::SoftLineSpace;
57/// 强制换行且会导致父级 Group 也展开
58pub const HARD_LINE: Document<'static> = Document::HardLine;