fix: Resolve compilation errors for multiple definitions and parser issues

Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-09-10 16:12:11 -03:00
parent 9e11756d4a
commit 22cd07284b
4 changed files with 89 additions and 45 deletions

41
src/parser/filter.pest Normal file
View File

@@ -0,0 +1,41 @@
WHITESPACE = _{ " " | "\t" | "\n" | "\r" }
// This Pest grammar defines the syntax for filter chains used in the Keep application.
// Main entry point for parsing multiple filters separated by pipes
filters = { SOI ~ filter ~ (pipe ~ filter)* ~ EOI }
// A single filter with optional options
filter = { filter_name ~ options? }
// Filter name (alphanumeric with underscores)
filter_name = @{ [a-zA-Z_][a-zA-Z0-9_]* }
// Options block with parentheses
options = { "(" ~ WO ~ option* ~ WO ~ ")" }
// Single option: either named (name=value) or unnamed (just value)
option = { WO ~ (option_name ~ WO ~ "=" ~ WO ~ option_value | option_value) }
// Option name (alphanumeric with underscores)
option_name = @{ [a-zA-Z_][a-zA-Z0-9_]* }
// Option value: number, boolean, or quoted string
option_value = { number | boolean | string }
// Simple number (integer or float)
number = @{ ("-")? ~ [0-9]+ ~ ('.' ~ [0-9]+)? }
// Boolean true or false
boolean = { "true" | "false" }
// Quoted string (double or single quotes)
string = { (dquote ~ (!dquote ~ [^"])* ~ dquote) | (squote ~ (!squote ~ [^'])* ~ squote) }
dquote = { '"' }
squote = { '\'' }
// Pipe separator
pipe = { "|" }
// Optional whitespace
WO = { (WHITESPACE)* }