| Crates.io | oak-folding |
| lib.rs | oak-folding |
| version | 0.0.1 |
| created_at | 2026-01-23 02:17:21.951986+00 |
| updated_at | 2026-01-23 02:17:21.951986+00 |
| description | Code folding logic and AST-based region detection for the Oak framework. |
| homepage | |
| repository | https://github.com/ygg-lang/oaks |
| max_upload_size | |
| id | 2063178 |
| size | 19,624 |
A lightweight and efficient code folding engine for the Oak ecosystem, designed to provide accurate folding ranges based on AST analysis.
Oak Code Folding is a specialized library for calculating folding ranges in source code. It leverages oak-core's red-green tree structure to identify logical blocks that can be collapsed in an editor, such as function bodies, class definitions, large comments, and import blocks.
Basic example of implementing a folding provider:
use oak_folding::{FoldingProvider, FoldingRange, FoldingRangeKind};
use oak_core::{language::Language, tree::RedNode};
struct MyFoldingProvider;
impl<L: Language> FoldingProvider<L> for MyFoldingProvider {
fn folding_ranges(&self, root: &RedNode<L::ElementType>) -> Vec<FoldingRange> {
let mut ranges = Vec::new();
// Traverse the tree and identify nodes that should be foldable
// ...
ranges
}
}
use oak_folding::{FoldingProvider, FoldingRange, FoldingRangeKind};
use oak_core::tree::RedNode;
use my_language::MyLanguage;
pub struct MyLanguageFoldingProvider;
impl FoldingProvider<MyLanguage> for MyLanguageFoldingProvider {
fn folding_ranges(&self, root: &RedNode<MyLanguage::ElementType>) -> Vec<FoldingRange> {
let mut ranges = Vec::new();
// Example: Fold function bodies
for node in root.descendants() {
if node.kind().is_function() {
ranges.push(FoldingRange {
range: node.range(),
kind: None,
});
}
}
ranges
}
}
The engine supports several standard folding kinds:
FoldingRangeKind::Comment: For multi-line comment blocks.FoldingRangeKind::Imports: For grouped import/include statements.FoldingRangeKind::Region: For custom user-defined regions (e.g., #region in C#).oak-core visitors.Oak Code Folding is a core component used by:
textDocument/foldingRange support.Contributions are welcome! Please feel free to submit issues or pull requests.
Oak Code Folding - Accurate code folding for every language 🚀