oak-fsharp 0.0.11

High-performance incremental F# (F Sharp) parser for the oak ecosystem with flexible configuration, supporting functional programming and .NET ecosystem integration.
Documentation
# 🛠️ oak-fsharp Developer Guide


Fsharp support for the Oak language framework.

Welcome to the internal implementation of the F# parser. This module provides the core logic for tokenizing and parsing F# source code into a high-fidelity syntax tree.

## 📦 Core Components


- **Lexer**: Tokenizes F# source code, handling indentation-sensitive syntax, computation expressions, and active patterns with full fidelity.
- **Parser**: Implements the F# grammar, producing a Green Tree that represents the concrete syntax.
- **AST**: Provides a type-safe Red Tree facade for easy traversal and analysis.
- **Language**: Defines the `FSharpLanguage` configuration and integration with the Oak framework.

## 🚀 Usage Example


### Basic Parsing


```rust
use oak_fsharp::{FSharpParser, SourceText, FSharpLanguage};

fn parse_fsharp_code(code: &str) {
    let source = SourceText::new(code);
    let config = FSharpLanguage::new();
    let parser = FSharpParser::new(&config);
    let result = parser.parse(&source);

    if result.is_success() {
        let root = result.root();
        println!("AST Root: {:?}", root);
    }
}
```

### Incremental Parsing


```rust
use oak_fsharp::{FSharpParser, SourceText, FSharpLanguage};

fn incremental_update(old_code: &str, new_code: &str) {
    let config = FSharpLanguage::new();
    let mut parser = FSharpParser::new(&config);
    
    // Initial parse
    let initial_source = SourceText::new(old_code);
    let _ = parser.parse(&initial_source);
    
    // Incremental update
    let updated_source = SourceText::new(new_code);
    let result = parser.parse(&updated_source);
    
    if result.is_success() {
        println!("Incremental parse completed successfully.");
    }
}
```

## 🔍 Diagnostics


The parser provides detailed diagnostics for syntax errors, including error ranges and helpful messages.

```rust
let result = parser.parse(&source);
for diagnostic in result.diagnostics() {
    println!("Error at {:?}: {}", diagnostic.range(), diagnostic.message());
}
```