protobuf-lsp 0.1.4

A Language Server Protocol implementation for Protocol Buffers (protobuf)
Documentation
use protobuf_lsp::parser::ProtoParser;
use tokio::runtime::Runtime;
use std::fs;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let args: Vec<String> = std::env::args().collect();

    if args.len() < 2 {
        eprintln!("Usage: {} <proto-file>", args[0]);
        return Ok(());
    }

    let file_path = &args[1];
    let content = fs::read_to_string(file_path)?;

    let rt = Runtime::new().unwrap();
    let parser = ProtoParser::new();
    let uri = format!("file://{}", file_path);

    println!("Testing error extraction for: {}", file_path);

    let parse_result = rt.block_on(async {
        parser.parse(uri, &content).await
    });

    match parse_result {
        Ok(proto) => {
            println!("\n--- Parse Result ---");
            println!("Package: {:?}", proto.package);
            println!("Messages: {}", proto.messages.len());
            println!("Total parse errors: {}", proto.parse_errors.len());

            if !proto.parse_errors.is_empty() {
                println!("\n--- Parse Errors ---");
                for (idx, error) in proto.parse_errors.iter().enumerate() {
                    println!("Error {}: Line {}, Col {} - {}",
                        idx + 1,
                        error.line + 1,
                        error.character + 1,
                        error.message
                    );
                }
            } else {
                println!("\n✅ No parse errors found!");
            }
        }
        Err(e) => {
            eprintln!("Parse failed: {}", e);
        }
    }

    Ok(())
}