# Simple OR test or example ==> Program(OrExpr(Term,Term)) # Multiple OR one or two or three ==> Program(OrExpr(Term,Term,Term)) # OR with prefixes file:test.js or file:example.js ==> Program(OrExpr(PrefixExpr(FileExpr),PrefixExpr(FileExpr))) # OR with negation test or -file:excluded.js ==> Program(OrExpr(Term,NegateExpr(PrefixExpr(FileExpr)))) # OR with quoted strings "first option" or "second option" ==> Program(OrExpr(QuotedTerm,QuotedTerm)) # OR with different prefixes lang:python or lang:javascript ==> Program(OrExpr(PrefixExpr(LangExpr),PrefixExpr(LangExpr))) # Multiple terms with OR function test or class example ==> Program(OrExpr(AndExpr(Term,Term),AndExpr(Term,Term))) # OR in parentheses (test or example) ==> Program(ParenExpr(OrExpr(Term,Term))) # OR with parentheses outside (test) or (example) ==> Program(OrExpr(ParenExpr(Term),ParenExpr(Term))) # Complex OR with grouping (file:*.js lang:javascript) or (file:*.ts lang:typescript) ==> Program(OrExpr(ParenExpr(AndExpr(PrefixExpr(FileExpr),PrefixExpr(LangExpr))),ParenExpr(AndExpr(PrefixExpr(FileExpr),PrefixExpr(LangExpr))))) # OR with mixed content test or file:example.js ==> Program(OrExpr(Term,PrefixExpr(FileExpr))) # Prefix OR term file:test.js or example ==> Program(OrExpr(PrefixExpr(FileExpr),Term)) # OR with short form prefixes f:test.js or r:myrepo ==> Program(OrExpr(PrefixExpr(FileExpr),PrefixExpr(RepoExpr))) # OR with repo prefixes repo:project1 or repo:project2 ==> Program(OrExpr(PrefixExpr(RepoExpr),PrefixExpr(RepoExpr))) # OR with revision prefixes rev:main or rev:develop ==> Program(OrExpr(PrefixExpr(RevisionExpr),PrefixExpr(RevisionExpr))) # OR with lang prefixes lang:rust or lang:go ==> Program(OrExpr(PrefixExpr(LangExpr),PrefixExpr(LangExpr))) # OR with content content:TODO or content:FIXME ==> Program(OrExpr(PrefixExpr(ContentExpr),PrefixExpr(ContentExpr))) # OR with negated terms -file:test.js or -file:spec.js ==> Program(OrExpr(NegateExpr(PrefixExpr(FileExpr)),NegateExpr(PrefixExpr(FileExpr)))) # OR in nested parentheses ((a or b) or (c or d)) ==> Program(ParenExpr(OrExpr(ParenExpr(OrExpr(Term,Term)),ParenExpr(OrExpr(Term,Term))))) # Multiple OR with parentheses and implicit AND (a or b) and (c or d) ==> Program(AndExpr(ParenExpr(OrExpr(Term,Term)),Term,ParenExpr(OrExpr(Term,Term)))) # OR with wildcards *.test.js or *.spec.js ==> Program(OrExpr(Term,Term)) # OR with regex patterns [a-z]+ or [0-9]+ ==> Program(OrExpr(Term,Term)) # OR with dots com.example.test or org.example.test ==> Program(OrExpr(Term,Term)) # OR with dashes test-one or test-two ==> Program(OrExpr(Term,Term)) # Word containing 'or' order ==> Program(Term) # Word containing 'or' in middle before ==> Program(Term) # OR at start or test ==> Program(⚠,Term) # OR at end (or becomes term) test or ==> Program(AndExpr(Term,Term)) # Multiple consecutive OR test or or example ==> Program(OrExpr(Term,⚠,Term)) # OR with all prefix types file:*.js or repo:myrepo or lang:javascript ==> Program(OrExpr(PrefixExpr(FileExpr),PrefixExpr(RepoExpr),PrefixExpr(LangExpr))) # Complex query with OR and negation (lang:python or lang:ruby) -file:test.py ==> Program(AndExpr(ParenExpr(OrExpr(PrefixExpr(LangExpr),PrefixExpr(LangExpr))),NegateExpr(PrefixExpr(FileExpr)))) # OR with quoted prefix values file:"test one.js" or file:"test two.js" ==> Program(OrExpr(PrefixExpr(FileExpr),PrefixExpr(FileExpr))) # OR with empty parentheses () or () ==> Program(OrExpr(ParenExpr,ParenExpr)) # OR with negated groups -(file:a.js) or -(file:b.js) ==> Program(OrExpr(NegateExpr(ParenExpr(PrefixExpr(FileExpr))),NegateExpr(ParenExpr(PrefixExpr(FileExpr)))))