From f669924df2d19b73146fcb8034fbb436b38391cd Mon Sep 17 00:00:00 2001 From: Pham Huy Hoang Date: Thu, 12 Jan 2023 17:16:48 +0900 Subject: indents(c): update if cases --- queries/c/indents.scm | 105 ++++++++++++++++++++++++++------------------------ 1 file changed, 55 insertions(+), 50 deletions(-) (limited to 'queries') diff --git a/queries/c/indents.scm b/queries/c/indents.scm index 185ace10c..db7b3a1c9 100644 --- a/queries/c/indents.scm +++ b/queries/c/indents.scm @@ -10,80 +10,85 @@ ] @indent ( - if_statement - condition: (_) @indent -) + ERROR + "for" "(" @indent ";" ";" ")" @indent_end) ( - (if_statement - consequence: (_ ";" @indent_end) @_consequence + (for_statement + body: (_) @_body ) @indent - (#not-has-type? @_consequence compound_statement) -) + (#not-has-type? @_body compound_statement) +) -;; if-else case, -;; with else that is not if/compound statement ( - (if_statement - consequence: (_ ";" @indent_end) @_consequence - "else" @branch - alternative: (_) @_alternative - )@indent - (#not-has-type? @_consequence compound_statement) - (#not-has-type? @_alternative compound_statement) + while_statement + condition: (_) @indent +) +( + (while_statement + body: (_) @_body + ) @indent + (#not-has-type? @_body compound_statement) ) -;; if-elseif-else case ( - if_statement - consequence: (_) @_consequence - alternative: - (if_statement "else" @branch) - (#not-has-type? @_consequence compound_statement) + (if_statement) + (ERROR "else") @indent ) -;; if- else case -;; The alternative should be one of the cases below -;; because the alternative is a nested tree inside the original if -;; dedent to offset the indent it should have gotten -;; Does not support multi chained bare ifs +( + if_statement + condition: (_) @indent +) +;; Make sure all cases of if-else are tagged with @indent +;; So we will offset the indents for the else case ( (if_statement - consequence: (_ ";" @indent_end) @_consequence + consequence: (compound_statement) "else" @branch alternative: [ - (compound_statement) @dedent - (if_statement - consequence: (_) @_consequence (#not-has-type? @_consequence compound_statement) - ) @dedent - (if_statement consequence: (compound_statement) @dedent) + [ "{" "}" ] @branch + (compound_statement ["{" "}"] @branch) + (_) ] - )@indent - (#not-has-type? @_consequence compound_statement) + ) @indent ) - -( - ERROR - "for" "(" @indent ";" ";" ")" @indent_end) ( - (for_statement - body: (_) @_body + (if_statement + consequence: (_ ";" @indent_end) @_consequence ) @indent - (#not-has-type? @_body compound_statement) + (#not-has-type? @_consequence compound_statement) ) - ( - while_statement - condition: (_) @indent + (if_statement + consequence: (_) @_consequence + "else" @branch + alternative: + [ + [ "{" "}" ] @branch + (compound_statement ["{" "}"] @branch) + (_) + ] + ) + (#not-has-type? @_consequence compound_statement) ) + +;; Dedent for chaining if-else statements +;; this will go recursively through each if-elseif +;; if-elseif -> second `if` is dedented once, indented twice +;; if-elseif-elseif -> third `if` is dedented twice, indented 3 times +;; -> all are indented once ( - (while_statement - body: (_) @_body - ) @indent - (#not-has-type? @_body compound_statement) + (if_statement + consequence: (_) + alternative: + [ + (if_statement consequence: (compound_statement) @dedent) + (_) + ] @dedent + ) ) - (compound_statement "}" @indent_end) [ -- cgit v1.2.3-70-g09d2