# Literal dash term

-test

==>

Program(Term)

# Quoted dash term

"-excluded"

==>

Program(QuotedTerm)

# Dash in middle

test-case

==>

Program(Term)

# Multiple dash terms

-one -two -three

==>

Program(AndExpr(Term,Term,Term))

# Negate file prefix

-file:test.js

==>

Program(NegateExpr(PrefixExpr(FileExpr)))

# Negate repo prefix

-repo:archived

==>

Program(NegateExpr(PrefixExpr(RepoExpr)))

# Negate lang prefix

-lang:python

==>

Program(NegateExpr(PrefixExpr(LangExpr)))

# Negate content prefix

-content:TODO

==>

Program(NegateExpr(PrefixExpr(ContentExpr)))

# Negate revision prefix

-rev:develop

==>

Program(NegateExpr(PrefixExpr(RevisionExpr)))

# Negate archived prefix

-archived:yes

==>

Program(NegateExpr(PrefixExpr(ArchivedExpr)))

# Negate fork prefix

-fork:yes

==>

Program(NegateExpr(PrefixExpr(ForkExpr)))

# Negate visibility prefix

-visibility:any

==>

Program(NegateExpr(PrefixExpr(VisibilityExpr)))

# Negate context prefix

-context:backend

==>

Program(NegateExpr(PrefixExpr(ContextExpr)))

# Negate symbol prefix

-sym:OldClass

==>

Program(NegateExpr(PrefixExpr(SymExpr)))

# Negate parentheses

-(test)

==>

Program(NegateExpr(ParenExpr(Term)))

# Negate group with multiple terms

-(test exclude)

==>

Program(NegateExpr(ParenExpr(AndExpr(Term,Term))))

# Negate group with prefix

-(file:test.js console.log)

==>

Program(NegateExpr(ParenExpr(AndExpr(PrefixExpr(FileExpr),Term))))

# Prefix with negated term

file:test.js -console

==>

Program(AndExpr(PrefixExpr(FileExpr),Term))

# Multiple prefixes with negation

file:test.js -lang:python

==>

Program(AndExpr(PrefixExpr(FileExpr),NegateExpr(PrefixExpr(LangExpr))))

# Complex negation pattern

function -file:test.js -lang:java

==>

Program(AndExpr(Term,NegateExpr(PrefixExpr(FileExpr)),NegateExpr(PrefixExpr(LangExpr))))

# Negation inside parentheses

(-file:test.js)

==>

Program(ParenExpr(NegateExpr(PrefixExpr(FileExpr))))

# Multiple negations in group

(-file:a.js -lang:python)

==>

Program(ParenExpr(AndExpr(NegateExpr(PrefixExpr(FileExpr)),NegateExpr(PrefixExpr(LangExpr)))))

# Mixed in parentheses

(include -file:test.js)

==>

Program(ParenExpr(AndExpr(Term,NegateExpr(PrefixExpr(FileExpr)))))

# Negate nested group

-((file:test.js))

==>

Program(NegateExpr(ParenExpr(ParenExpr(PrefixExpr(FileExpr)))))

# Negate short form prefix

-f:test.js

==>

Program(NegateExpr(PrefixExpr(FileExpr)))

# Negate short form repo

-r:myrepo

==>

Program(NegateExpr(PrefixExpr(RepoExpr)))

# Negate short form content

-c:console

==>

Program(NegateExpr(PrefixExpr(ContentExpr)))

# Negate with prefix in quotes

-file:"test file.js"

==>

Program(NegateExpr(PrefixExpr(FileExpr)))

# Complex with multiple negated prefixes

lang:typescript -file:*.test.ts -file:*.spec.ts

==>

Program(AndExpr(PrefixExpr(LangExpr),NegateExpr(PrefixExpr(FileExpr)),NegateExpr(PrefixExpr(FileExpr))))

# Negated group with prefix

-(file:test.js lang:python)

==>

Program(NegateExpr(ParenExpr(AndExpr(PrefixExpr(FileExpr),PrefixExpr(LangExpr)))))

# Negate empty group

-()

==>

Program(NegateExpr(ParenExpr))

# Negate with space after dash

- file:test.js

==>

Program(NegateExpr(PrefixExpr(FileExpr)))
