From d1333dd7e51729a581fed3e429fa035bff77a3db Mon Sep 17 00:00:00 2001 From: George Harker Date: Sun, 19 Mar 2023 18:09:18 -0700 Subject: refactor(indent)!: Rework indent, aligned indent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit indents now use @indent.X style captures, and indent.PROP for properties to set on those captures, as documented in the help. Captures are: indent.auto indent.begin indent.end indent.dedent indent.branch indent.ignore indent.align indent.zero Properties are: indent.immediate indent.start_at_same_line indent.open_delimiter indent.close_delimiter indent.increment indent.avoid_last_matching_next Multiple opening delims on one line and multiple closing on a line are collapsed so as not to over indent, The final line of @indent.align blocks which must in some cases be treated specially to avoid clashing with the next line is treated the same regardless of whether the @indent.align capture actually uses aligned indentation or just normal indentation. The indent.avoid_last_matching_next property controls this. Adjust python to use these. List, set, dict and tuple all use @indent.align which permits both hanging and aligned styles. Finally, try: on it’s own will indent when typing live but make no guaranteeds about whole-file formatting. Includes lucario387:fix-align-indent --- queries/python/indents.scm | 49 ++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 19 deletions(-) (limited to 'queries') diff --git a/queries/python/indents.scm b/queries/python/indents.scm index cc13587ec..82933c159 100644 --- a/queries/python/indents.scm +++ b/queries/python/indents.scm @@ -1,8 +1,4 @@ [ - (list) - (dictionary) - (set) - (import_from_statement) (parenthesized_expression) @@ -20,6 +16,16 @@ (concatenated_string) ] @indent +((list) @aligned_indent + (#set! "delimiter" "[]") +) +((dictionary) @aligned_indent + (#set! "delimiter" "{}") +) +((set) @aligned_indent + (#set! "delimiter" "{}") +) + ((for_statement) @indent (#set! "immediate_indent" 1)) ((if_statement) @indent @@ -28,8 +34,7 @@ (#set! "immediate_indent" 1)) ((try_statement) @indent (#set! "immediate_indent" 1)) -((ERROR "try" ":") @indent - (#set! "immediate_indent" 1)) +(ERROR "try" ":" @indent (#set! "immediate_indent" 1)) ((function_definition) @indent (#set! "immediate_indent" 1)) ((class_definition) @indent @@ -40,27 +45,24 @@ (if_statement condition: (parenthesized_expression) @aligned_indent (#set! "delimiter" "()") - (#set! "final_line_indent" 1) ; parenthesized_expression already indented -) + (#set! "avoid_last_matching_next" 1)) (while_statement condition: (parenthesized_expression) @aligned_indent (#set! "delimiter" "()") - (#set! "final_line_indent" 1) ; parenthesized_expression already indented -) + (#set! "avoid_last_matching_next" 1)) -((ERROR "(" . (_)) @aligned_indent - (#set! "delimiter" "()")) -((argument_list ")" @indent_end) @aligned_indent +(ERROR "(" @aligned_indent (#set! "delimiter" "()") . (_)) +((argument_list) @aligned_indent (#set! "delimiter" "()")) ((parameters) @aligned_indent (#set! "delimiter" "()") - (#set! "final_line_indent" 1)) -((tuple ")" @indent_end) @aligned_indent + (#set! "avoid_last_matching_next" 1)) +((tuple) @aligned_indent (#set! "delimiter" "()")) -(list "]" @indent_end) -(dictionary "}" @indent_end) -(set "}" @indent_end) +(ERROR "[" @aligned_indent (#set! "delimiter" "[]") . (_)) + +(ERROR "{" @aligned_indent (#set! "delimiter" "{}") . (_)) (parenthesized_expression ")" @indent_end) (generator_expression ")" @indent_end) @@ -75,9 +77,17 @@ (return_statement [ (_) @indent_end - (_ (_) @indent_end .) + (_ + [ + (_) + ")" + "}" + "]" + ] @indent_end .) (attribute attribute: (_) @indent_end) + (call + arguments: (_ ")" @indent_end)) "return" @indent_end ] .) @@ -92,3 +102,4 @@ ] @branch (string) @auto + -- cgit v1.2.3-70-g09d2