(grammar (start source))
(extra (class plain (char %20) (char %09) (char %0B) (char %0C)))
(rule source normal (seq (repeat0 (choice ordered (ref block) (seq (ref line) (alias newline (token (seq (optional (literal %0D)) (literal %0A))))) (alias newline (immediateToken (seq (repeat0 (class plain (char %20) (char %09) (char %0B) (char %0C))) (optional (literal %0D)) (literal %0A)))))) (choice ordered (ref line) empty)) (concept grammar.document))
(rule line silent (choice ordered (ref file_change) (ref binary_change) (ref index) (ref similarity) (ref old_file) (ref new_file) (ref location) (ref addition) (ref deletion) (ref context) (ref comment)) (concept grammar.diff.patch-line))
(rule header silent (choice ordered (ref file_change) (ref binary_change) (ref index) (ref similarity)) (concept grammar.diff.file-header))
(rule block normal (seq (ref command) (choice ordered (alias newline (token (seq (optional (literal %0D)) (literal %0A)))) (seq (repeat0 (class plain (char %20) (char %09) (char %0B) (char %0C))) (not (immediateToken any)))) (repeat0 (seq (ref header) (choice ordered (alias newline (token (seq (optional (literal %0D)) (literal %0A)))) (seq (repeat0 (class plain (char %20) (char %09) (char %0B) (char %0C))) (not (immediateToken any)))))) (not (seq (ref header) (choice ordered (alias newline (token (seq (optional (literal %0D)) (literal %0A)))) (seq (repeat0 (class plain (char %20) (char %09) (char %0B) (char %0C))) (not (immediateToken any)))))) (choice ordered (seq (ref old_file) (alias newline (token (seq (optional (literal %0D)) (literal %0A)))) (ref new_file) (alias newline (token (seq (optional (literal %0D)) (literal %0A)))) (ref hunks)) empty)) (concept grammar.diff.file-difference))
(rule hunks normal (seq (repeat1 (ref hunk)) (not (seq (ref location) (choice ordered (alias newline (token (seq (optional (literal %0D)) (literal %0A)))) (seq (repeat0 (class plain (char %20) (char %09) (char %0B) (char %0C))) (not (immediateToken any))))))) (concept grammar.diff.hunk-sequence))
(rule hunk normal (seq (capture labeled location (ref location)) (choice ordered (alias newline (token (seq (optional (literal %0D)) (literal %0A)))) (seq (repeat0 (class plain (char %20) (char %09) (char %0B) (char %0C))) (not (immediateToken any)))) (choice ordered (capture labeled changes (ref changes)) empty)) (concept grammar.diff.hunk))
(rule changes normal (seq (repeat1 (seq (ref change) (choice ordered (seq (repeat1 (alias newline (token (seq (optional (literal %0D)) (literal %0A))))) (not (alias newline (token (seq (optional (literal %0D)) (literal %0A)))))) (seq (repeat0 (class plain (char %20) (char %09) (char %0B) (char %0C))) (not (immediateToken any)))))) (not (seq (ref change) (choice ordered (alias newline (token (seq (optional (literal %0D)) (literal %0A)))) (seq (repeat0 (class plain (char %20) (char %09) (char %0B) (char %0C))) (not (immediateToken any))))))) (concept grammar.diff.change-sequence))
(rule change silent (choice ordered (ref addition) (ref deletion) (ref context)) (concept grammar.diff.change))
(rule command normal (seq (immediateToken (literal diff)) (alias argument (token (repeat1 (class plain (range A Z) (range a z) (range 0 9) (char _) (char -))))) (ref filename)) (concept grammar.diff.difference-command))
(rule file_change normal (choice ordered (seq (choice ordered (immediateToken (literal new)) (immediateToken (literal deleted))) (literal file) (literal mode) (ref mode)) (seq (choice ordered (immediateToken (literal new)) (immediateToken (literal old))) (literal mode) (ref mode)) (seq (immediateToken (literal rename)) (choice ordered (literal from) (literal to)) (ref filename))) (concept grammar.diff.file-change))
(rule binary_change normal (seq (immediateToken (literal Binary)) (literal files) (alias filename (repeat1 (seq (not (token (seq (literal and) (not (class negated (char %20) (char %09) (char %0B) (char %0C) (char %0D) (char %0A)))))) (alias word (token (repeat1 (class negated (char %20) (char %09) (char %0B) (char %0C) (char %0D) (char %0A)))))))) (literal and) (alias filename (repeat1 (seq (not (token (seq (literal differ) (not (class negated (char %20) (char %09) (char %0B) (char %0C) (char %0D) (char %0A)))))) (alias word (token (repeat1 (class negated (char %20) (char %09) (char %0B) (char %0C) (char %0D) (char %0A)))))))) (literal differ)) (concept grammar.diff.binary-file-change))
(rule index normal (seq (immediateToken (literal index)) (ref commit) (literal ..) (ref commit) (choice ordered (ref mode) empty)) (concept grammar.diff.index-line))
(rule similarity normal (seq (immediateToken (literal similarity)) (literal index) (alias score (token (repeat1 (range 0 9)))) (literal %25)) (concept grammar.diff.similarity-index))
(rule old_file normal (seq (immediateToken (literal ---)) (not (immediateToken (literal -))) (ref filename)) (concept grammar.diff.old-file-line))
(rule new_file normal (seq (immediateToken (literal %2B%2B%2B)) (not (immediateToken (literal %2B))) (ref filename)) (concept grammar.diff.new-file-line))
(rule location normal (seq (immediateToken (literal %40%40)) (ref line_range) (ref line_range) (literal %40%40) (choice ordered (alias anything (immediateToken (repeat1 (class negated (char %0D) (char %0A))))) empty)) (concept grammar.diff.hunk-header))
(rule addition normal (choice ordered (seq (immediateToken (literal %2B%2B%2B%2B)) (choice ordered (alias anything (immediateToken (repeat1 (class negated (char %0D) (char %0A))))) empty)) (seq (immediateToken (literal %2B%2B%2B)) (alias anything (immediateToken (seq (repeat0 (class plain (char %20) (char %09) (char %0B) (char %0C))) (class negated (char %20) (char %09) (char %0B) (char %0C) (char %0D) (char %0A)) (repeat0 (class negated (char %0D) (char %0A))))))) (immediateToken (literal %2B%2B%2B)) (seq (immediateToken (literal %2B%2B)) (choice ordered (alias anything (immediateToken (repeat1 (class negated (char %0D) (char %0A))))) empty)) (seq (immediateToken (literal %2B)) (choice ordered (alias anything (immediateToken (repeat1 (class negated (char %0D) (char %0A))))) empty))) (concept grammar.diff.added-line))
(rule deletion normal (choice ordered (seq (immediateToken (literal ----)) (choice ordered (alias anything (immediateToken (repeat1 (class negated (char %0D) (char %0A))))) empty)) (seq (immediateToken (literal ---)) (alias anything (immediateToken (seq (repeat0 (class plain (char %20) (char %09) (char %0B) (char %0C))) (class negated (char %20) (char %09) (char %0B) (char %0C) (char %0D) (char %0A)) (repeat0 (class negated (char %0D) (char %0A))))))) (immediateToken (literal ---)) (seq (immediateToken (literal --)) (choice ordered (alias anything (immediateToken (repeat1 (class negated (char %0D) (char %0A))))) empty)) (seq (immediateToken (literal -)) (choice ordered (alias anything (immediateToken (repeat1 (class negated (char %0D) (char %0A))))) empty))) (concept grammar.diff.deleted-line))
(rule context silent (seq (not (immediateToken (choice ordered (literal diff) (literal Binary) (literal index) (literal similarity) (literal new) (literal deleted) (literal old) (literal rename) (literal %40%40) (literal %2B) (literal -) (literal %23)))) (not (immediateToken (seq (repeat0 (class plain (char %20) (char %09) (char %0B) (char %0C))) (choice ordered (literal %0A) (literal %0D%0A))))) (alias context (immediateToken (repeat1 (class negated (char %0D) (char %0A)))))) (concept grammar.diff.context-line))
(rule comment normal (seq (immediateToken (literal %23)) (choice ordered (alias anything (immediateToken (repeat1 (class negated (char %0D) (char %0A))))) empty)) (concept grammar.comment))
(rule filename normal (repeat1 (seq (alias word (token (repeat1 (class negated (char %20) (char %09) (char %0B) (char %0C) (char %0D) (char %0A))))))) (concept grammar.diff.file-name))
(rule commit silent (alias commit (token (repeat 4 40 (class plain (range 0 9) (range a f))))) (concept grammar.diff.commit-hash))
(rule mode silent (alias mode (token (repeat1 (range 0 9)))) (concept grammar.diff.file-mode))
(rule line_range silent (alias line_range (token (seq (class plain (char %2B) (char -)) (repeat1 (range 0 9)) (optional (seq (literal %2C) (repeat1 (range 0 9))))))) (concept grammar.diff.line-range) (source-names (tree-sitter linerange)))