nvim-treesitter/queries/python/indents.scm
George Harker d1333dd7e5 refactor(indent)!: Rework indent, aligned indent
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
2023-03-24 13:07:53 -04:00

105 lines
2.1 KiB
Scheme

[
(import_from_statement)
(parenthesized_expression)
(generator_expression)
(list_comprehension)
(set_comprehension)
(dictionary_comprehension)
(tuple_pattern)
(list_pattern)
(binary_operator)
(lambda)
(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
(#set! "immediate_indent" 1))
((while_statement) @indent
(#set! "immediate_indent" 1))
((try_statement) @indent
(#set! "immediate_indent" 1))
(ERROR "try" ":" @indent (#set! "immediate_indent" 1))
((function_definition) @indent
(#set! "immediate_indent" 1))
((class_definition) @indent
(#set! "immediate_indent" 1))
((with_statement) @indent
(#set! "immediate_indent" 1))
(if_statement
condition: (parenthesized_expression) @aligned_indent
(#set! "delimiter" "()")
(#set! "avoid_last_matching_next" 1))
(while_statement
condition: (parenthesized_expression) @aligned_indent
(#set! "delimiter" "()")
(#set! "avoid_last_matching_next" 1))
(ERROR "(" @aligned_indent (#set! "delimiter" "()") . (_))
((argument_list) @aligned_indent
(#set! "delimiter" "()"))
((parameters) @aligned_indent
(#set! "delimiter" "()")
(#set! "avoid_last_matching_next" 1))
((tuple) @aligned_indent
(#set! "delimiter" "()"))
(ERROR "[" @aligned_indent (#set! "delimiter" "[]") . (_))
(ERROR "{" @aligned_indent (#set! "delimiter" "{}") . (_))
(parenthesized_expression ")" @indent_end)
(generator_expression ")" @indent_end)
(list_comprehension "]" @indent_end)
(set_comprehension "}" @indent_end)
(dictionary_comprehension "}" @indent_end)
(tuple_pattern ")" @indent_end)
(list_pattern "]" @indent_end)
(return_statement
[
(_) @indent_end
(_
[
(_)
")"
"}"
"]"
] @indent_end .)
(attribute
attribute: (_) @indent_end)
(call
arguments: (_ ")" @indent_end))
"return" @indent_end
] .)
[
")"
"]"
"}"
(elif_clause)
(else_clause)
(except_clause)
(finally_clause)
] @branch
(string) @auto