mirror of
https://github.com/helix-editor/helix
synced 2024-11-10 10:34:45 +01:00
Add indent queries for scheme (and reuse them for common-lisp & racket). (#8720)
This commit is contained in:
parent
e868678139
commit
cb0bc25a9f
@ -16,7 +16,7 @@
|
||||
| clojure | ✓ | | | `clojure-lsp` |
|
||||
| cmake | ✓ | ✓ | ✓ | `cmake-language-server` |
|
||||
| comment | ✓ | | | |
|
||||
| common-lisp | ✓ | | | `cl-lsp` |
|
||||
| common-lisp | ✓ | | ✓ | `cl-lsp` |
|
||||
| cpon | ✓ | | ✓ | |
|
||||
| cpp | ✓ | ✓ | ✓ | `clangd` |
|
||||
| crystal | ✓ | ✓ | | `crystalline` |
|
||||
@ -128,7 +128,7 @@
|
||||
| python | ✓ | ✓ | ✓ | `pylsp` |
|
||||
| qml | ✓ | | ✓ | `qmlls` |
|
||||
| r | ✓ | | | `R` |
|
||||
| racket | ✓ | | | `racket` |
|
||||
| racket | ✓ | | ✓ | `racket` |
|
||||
| regex | ✓ | | | |
|
||||
| rego | ✓ | | | `regols` |
|
||||
| rescript | ✓ | ✓ | | `rescript-language-server` |
|
||||
@ -140,7 +140,7 @@
|
||||
| rust | ✓ | ✓ | ✓ | `rust-analyzer` |
|
||||
| sage | ✓ | ✓ | | |
|
||||
| scala | ✓ | | ✓ | `metals` |
|
||||
| scheme | ✓ | | | |
|
||||
| scheme | ✓ | | ✓ | |
|
||||
| scss | ✓ | | | `vscode-css-language-server` |
|
||||
| slint | ✓ | | ✓ | `slint-lsp` |
|
||||
| smithy | ✓ | | | `cs` |
|
||||
|
@ -1278,6 +1278,7 @@ roots = []
|
||||
file-types = ["rkt", "rktd", "rktl", "scrbl"]
|
||||
shebangs = ["racket"]
|
||||
comment-token = ";"
|
||||
indent = { tab-width = 2, unit = " " }
|
||||
language-servers = [ "racket" ]
|
||||
grammar = "scheme"
|
||||
|
||||
|
1
runtime/queries/common-lisp/indents.scm
Normal file
1
runtime/queries/common-lisp/indents.scm
Normal file
@ -0,0 +1 @@
|
||||
; inherits: scheme
|
1
runtime/queries/racket/indents.scm
Normal file
1
runtime/queries/racket/indents.scm
Normal file
@ -0,0 +1 @@
|
||||
; inherits: scheme
|
43
runtime/queries/scheme/indents.scm
Normal file
43
runtime/queries/scheme/indents.scm
Normal file
@ -0,0 +1,43 @@
|
||||
; This roughly follows the description at: https://github.com/ds26gte/scmindent#how-subforms-are-indented
|
||||
|
||||
; Exclude literals in the first patterns, since different rules apply for them.
|
||||
; Similarly, exclude certain keywords (detected by a regular expression).
|
||||
; If a list has 2 elements on the first line, it is aligned to the second element.
|
||||
(list . (_) @first . (_) @anchor
|
||||
(#same-line? @first @anchor)
|
||||
(#set! "scope" "tail")
|
||||
(#not-kind-eq? @first "boolean") (#not-kind-eq? @first "character") (#not-kind-eq? @first "string") (#not-kind-eq? @first "number")
|
||||
(#not-match? @first "def.*|let.*|set!")) @align
|
||||
; If the first element in a list is also a list and on a line by itself, the outer list is aligned to it
|
||||
(list . (list) @anchor .
|
||||
(#set! "scope" "tail")
|
||||
(#not-kind-eq? @first "boolean") (#not-kind-eq? @first "character") (#not-kind-eq? @first "string") (#not-kind-eq? @first "number")) @align
|
||||
(list . (list) @anchor . (_) @second
|
||||
(#not-same-line? @anchor @second)
|
||||
(#set! "scope" "tail")
|
||||
(#not-kind-eq? @first "boolean") (#not-kind-eq? @first "character") (#not-kind-eq? @first "string") (#not-kind-eq? @first "number")
|
||||
(#not-match? @first "def.*|let.*|set!")) @align
|
||||
; If the first element in a list is not a list and on a line by itself, the outer list is aligned to
|
||||
; it plus 1 additional space. This cannot currently be modelled exactly by our indent queries,
|
||||
; but the following is equivalent, assuming that:
|
||||
; - the indent width is 2 (the default for scheme)
|
||||
; - There is no space between the opening parenthesis of the list and the first element
|
||||
(list . (_) @first .
|
||||
(#not-kind-eq? @first "boolean") (#not-kind-eq? @first "character") (#not-kind-eq? @first "string") (#not-kind-eq? @first "number")
|
||||
(#not-match? @first "def.*|let.*|set!")) @indent
|
||||
(list . (_) @first . (_) @second
|
||||
(#not-same-line? @first @second)
|
||||
(#not-kind-eq? @first "boolean") (#not-kind-eq? @first "character") (#not-kind-eq? @first "string") (#not-kind-eq? @first "number")
|
||||
(#not-match? @first "def.*|let.*|set!")) @indent
|
||||
|
||||
; If the first element in a list is a literal, align the list to it
|
||||
(list . [(boolean) (character) (string) (number)] @anchor
|
||||
(#set! "scope" "tail")) @align
|
||||
|
||||
; If the first element is among a set of predefined keywords, align the list to this element
|
||||
; plus 1 space (using the same workaround as above for now). This is a simplification since actually
|
||||
; the second line of the list should be indented by 2 spaces more in some cases. Supporting this would
|
||||
; be possible but require significantly more patterns.
|
||||
(list . (symbol) @first
|
||||
(#match? @first "def.*|let.*|set!")) @indent
|
||||
|
Loading…
Reference in New Issue
Block a user