From 2f5deed45628e4960fabfe28735d73a82eb59d98 Mon Sep 17 00:00:00 2001 From: Pham Huy Hoang Date: Tue, 10 Jan 2023 14:04:27 +0900 Subject: indents(c): Refactor indent queries --- queries/c/indents.scm | 86 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 75 insertions(+), 11 deletions(-) (limited to 'queries') diff --git a/queries/c/indents.scm b/queries/c/indents.scm index 661ae8228..185ace10c 100644 --- a/queries/c/indents.scm +++ b/queries/c/indents.scm @@ -1,28 +1,92 @@ [ - (compound_statement) - (preproc_arg) + (compound_statement) (field_declaration_list) (case_statement) (enumerator_list) - (struct_specifier) (compound_literal_expression) (initializer_list) - (while_statement) - (for_statement) - (switch_statement) + (init_declarator) (expression_statement) ] @indent -(if_statement condition: (_) @indent) -((if_statement + +( + if_statement + condition: (_) @indent +) +( + (if_statement + consequence: (_ ";" @indent_end) @_consequence + ) @indent + (#not-has-type? @_consequence 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) +) + +;; if-elseif-else case +( + if_statement consequence: (_) @_consequence + alternative: + (if_statement "else" @branch) (#not-has-type? @_consequence compound_statement) - ) @indent) -(init_declarator) @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 + consequence: (_ ";" @indent_end) @_consequence + "else" @branch + alternative: + [ + (compound_statement) @dedent + (if_statement + consequence: (_) @_consequence (#not-has-type? @_consequence compound_statement) + ) @dedent + (if_statement consequence: (compound_statement) @dedent) + ] + )@indent + (#not-has-type? @_consequence compound_statement) +) + +( + ERROR + "for" "(" @indent ";" ";" ")" @indent_end) +( + (for_statement + body: (_) @_body + ) @indent + (#not-has-type? @_body compound_statement) +) + +( + while_statement + condition: (_) @indent +) +( + (while_statement + body: (_) @_body + ) @indent + (#not-has-type? @_body compound_statement) +) + (compound_statement "}" @indent_end) [ - "else" ")" "}" (statement_identifier) -- cgit v1.2.3-70-g09d2