aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/gdscript/indents.scm
blob: 36b989f93327712eaba9a66850f29254833f27c8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
[
  (lambda)
  (function_definition)
  (constructor_definition)
  (for_statement)
  (while_statement)
  (if_statement)
  (class_definition)
  (match_statement)
  (pattern_section)
  (setget)
  (match_body)
  (set_body)
  (get_body)
] @indent.begin

[
  (elif_clause)
  (else_clause)
] @indent.branch

[
  (string)
  (comment)
  (array)
  (dictionary)
  (parenthesized_expression)
  (ERROR)
] @indent.auto

[
  (pass_statement)
  (continue_statement)
  (break_statement)
  (return_statement)
] @indent.dedent

[
  (ERROR
    "[")
  (ERROR
    "(")
  (ERROR
    "{")
] @indent.begin

; This only works with expanded tabs.
; ((parameters) @indent.align (#set! indent.open_delimiter "(") (#set! indent.close_delimiter ")"))
; ((arguments)  @indent.align (#set! indent.open_delimiter "(") (#set! indent.close_delimiter ")"))
; The following queries either do not agree with the current body parsing or are
; attempted workarounds. Specifically as the last statement of a body. Opening
; a new line in between statements works well.
;
; The overall experience is poor, so I've opted for @indent.auto.
;
; The gdscript parser will need to be patched to accommodate more interactive
; edits. As far as I can tell the parser greedily consumes whitespace
; as a zero-width token which causes trouble when inserting indents.
; This indents correctly with tabs.
; (arguments) @indent.begin
; (parameters) @indent.begin
; (array) @indent.begin
; (dictionary) @indent.begin
; (parenthesized_expression) @indent.begin
; Partial workaround for when the cursor is on the bracket character and a newline
; is created with <o>. Without this the newline is opened with extra
; indentation.
; (body (_ (array "]" @indent.end) ) _)
; Problematic behaviors occur at the last statement of a body.
; with @dedent:
;   - [ | ] i<CR> will dedent ] to 0.
;   - [
;   ]| o will open new line at correct indentation.
; with @auto:
;   - [ | ] i<CR> same
;   - [
;   ]| o will open new line with extra indent.
;(body (_ (array "]" @indent.auto) ) .)