[
  (typeDef)
  (ifStmt)
  (whenStmt)
  (elifStmt)
  (elseStmt)
  (ofBranch) ; note: not caseStmt
  (whileStmt)
  (tryStmt)
  (tryExceptStmt)
  (tryFinallyStmt)
  (forStmt)
  (blockStmt)
  (staticStmt)
  (deferStmt)
  (asmStmt)
  ; exprStmt?
] @indent
;; increase the indentation level

[
  (ifStmt)
  (whenStmt)
  (elifStmt)
  (elseStmt)
  (ofBranch) ; note: not caseStmt
  (whileStmt)
  (tryStmt)
  (tryExceptStmt)
  (tryFinallyStmt)
  (forStmt)
  (blockStmt)
  (staticStmt)
  (deferStmt)
  (asmStmt)
  ; exprStmt?
] @extend
;; ???

[
  (returnStmt)
  (raiseStmt)
  (yieldStmt)
  (breakStmt)
  (continueStmt)
] @extend.prevent-once
;; end a level of indentation while staying indented

[
  ")" ; tuples
  "]" ; arrays, seqs
  "}" ; sets
] @outdent
;; end a level of indentation and unindent the line