diff options
| author | Connor Lay (Clay) <connorlay@pm.me> | 2022-02-12 15:12:05 -0800 |
|---|---|---|
| committer | Stephan Seitz <stephan.seitz@fau.de> | 2022-02-15 19:01:02 +0100 |
| commit | b62750e328e9595b34a30db2d03a30f0f983776c (patch) | |
| tree | c1755f061ed7f1b0e9f461a32b2134619bbb00ee | |
| parent | Highlight Gleam bitstrings (diff) | |
| download | nvim-treesitter-b62750e328e9595b34a30db2d03a30f0f983776c.tar nvim-treesitter-b62750e328e9595b34a30db2d03a30f0f983776c.tar.gz nvim-treesitter-b62750e328e9595b34a30db2d03a30f0f983776c.tar.bz2 nvim-treesitter-b62750e328e9595b34a30db2d03a30f0f983776c.tar.lz nvim-treesitter-b62750e328e9595b34a30db2d03a30f0f983776c.tar.xz nvim-treesitter-b62750e328e9595b34a30db2d03a30f0f983776c.tar.zst nvim-treesitter-b62750e328e9595b34a30db2d03a30f0f983776c.zip | |
Gleam indentation tests
| -rw-r--r-- | queries/gleam/indents.scm | 12 | ||||
| -rw-r--r-- | scripts/minimal_init.lua | 1 | ||||
| -rw-r--r-- | tests/indent/gleam/assert.gleam | 4 | ||||
| -rw-r--r-- | tests/indent/gleam/binary_expression.gleam | 4 | ||||
| -rw-r--r-- | tests/indent/gleam/case.gleam | 10 | ||||
| -rw-r--r-- | tests/indent/gleam/constant.gleam | 2 | ||||
| -rw-r--r-- | tests/indent/gleam/function.gleam | 15 | ||||
| -rw-r--r-- | tests/indent/gleam/import.gleam | 4 | ||||
| -rw-r--r-- | tests/indent/gleam/let.gleam | 4 | ||||
| -rw-r--r-- | tests/indent/gleam/list.gleam | 11 | ||||
| -rw-r--r-- | tests/indent/gleam/pipe.gleam | 4 | ||||
| -rw-r--r-- | tests/indent/gleam/todo.gleam | 5 | ||||
| -rw-r--r-- | tests/indent/gleam/try.gleam | 7 | ||||
| -rw-r--r-- | tests/indent/gleam/tuple.gleam | 11 | ||||
| -rw-r--r-- | tests/indent/gleam/type.gleam | 18 | ||||
| -rw-r--r-- | tests/indent/gleam_spec.lua | 127 |
16 files changed, 239 insertions, 0 deletions
diff --git a/queries/gleam/indents.scm b/queries/gleam/indents.scm index e795ea09e..e2259b688 100644 --- a/queries/gleam/indents.scm +++ b/queries/gleam/indents.scm @@ -1,16 +1,25 @@ ; Gleam indents similar to Rust and JavaScript [ + (assert) (case) (case_clause) (constant) (expression_group) + (external_function) (function) + (import) (let) (list) + (public_constant) + (public_external_function) (public_function) (public_opaque_type_definition) + (public_type_alias) (public_type_definition) + (todo) + (try) (tuple) + (type_alias) (type_definition) ] @indent @@ -19,3 +28,6 @@ "]" "}" ] @indent_end @branch + +; Gleam pipelines are not indented, but other binary expression chains are +((binary_expression operator: _ @_operator) @indent (#not-eq? @_operator "|>")) diff --git a/scripts/minimal_init.lua b/scripts/minimal_init.lua index 1c57ee538..8a6a8506a 100644 --- a/scripts/minimal_init.lua +++ b/scripts/minimal_init.lua @@ -3,6 +3,7 @@ vim.cmd [[runtime! plugin/plenary.vim]] vim.cmd [[runtime! plugin/nvim-treesitter.vim]] vim.cmd [[au BufRead,BufNewFile *.conf set filetype=hocon]] +vim.cmd [[au BufRead,BufNewFile *.gleam set filetype=gleam]] vim.o.swapfile = false vim.bo.swapfile = false diff --git a/tests/indent/gleam/assert.gleam b/tests/indent/gleam/assert.gleam new file mode 100644 index 000000000..2b2114628 --- /dev/null +++ b/tests/indent/gleam/assert.gleam @@ -0,0 +1,4 @@ +pub fn main() { + assert Ok(i) = + parse_int("123") +} diff --git a/tests/indent/gleam/binary_expression.gleam b/tests/indent/gleam/binary_expression.gleam new file mode 100644 index 000000000..6f59bc4f1 --- /dev/null +++ b/tests/indent/gleam/binary_expression.gleam @@ -0,0 +1,4 @@ +pub fn main() { + True && + False +} diff --git a/tests/indent/gleam/case.gleam b/tests/indent/gleam/case.gleam new file mode 100644 index 000000000..60238ce42 --- /dev/null +++ b/tests/indent/gleam/case.gleam @@ -0,0 +1,10 @@ +pub fn main() { + case 1 { + 1 -> "One" + 2 -> { + case 2 { + 2 -> "Two" + } + } + } +} diff --git a/tests/indent/gleam/constant.gleam b/tests/indent/gleam/constant.gleam new file mode 100644 index 000000000..6a38ba6c8 --- /dev/null +++ b/tests/indent/gleam/constant.gleam @@ -0,0 +1,2 @@ +pub const foo = + "bar" diff --git a/tests/indent/gleam/function.gleam b/tests/indent/gleam/function.gleam new file mode 100644 index 000000000..60c22777d --- /dev/null +++ b/tests/indent/gleam/function.gleam @@ -0,0 +1,15 @@ +import gleam/io + +pub fn main() { + io.println("Hello from main!") +} + +fn hidden() { + io.println("Hello from hidden!") +} + +pub external fn inspect(a) -> a = + "Elixir.IO" "inspect" + +external fn inspect(a) -> a = + "Elixir.IO" "inspect" diff --git a/tests/indent/gleam/import.gleam b/tests/indent/gleam/import.gleam new file mode 100644 index 000000000..c334bf995 --- /dev/null +++ b/tests/indent/gleam/import.gleam @@ -0,0 +1,4 @@ +import foo.{ + Bar, + baz, +} diff --git a/tests/indent/gleam/let.gleam b/tests/indent/gleam/let.gleam new file mode 100644 index 000000000..532b3f6fe --- /dev/null +++ b/tests/indent/gleam/let.gleam @@ -0,0 +1,4 @@ +pub fn main() { + let string = + "string" +} diff --git a/tests/indent/gleam/list.gleam b/tests/indent/gleam/list.gleam new file mode 100644 index 000000000..d6da4da34 --- /dev/null +++ b/tests/indent/gleam/list.gleam @@ -0,0 +1,11 @@ +pub fn main() { + [ + a, + ..[ + b, + ..[ + c, + ] + ] + ] +} diff --git a/tests/indent/gleam/pipe.gleam b/tests/indent/gleam/pipe.gleam new file mode 100644 index 000000000..8d38bb9c9 --- /dev/null +++ b/tests/indent/gleam/pipe.gleam @@ -0,0 +1,4 @@ +pub fn main() { + one() + |> two() +} diff --git a/tests/indent/gleam/todo.gleam b/tests/indent/gleam/todo.gleam new file mode 100644 index 000000000..407a85aef --- /dev/null +++ b/tests/indent/gleam/todo.gleam @@ -0,0 +1,5 @@ +pub fn main() { + todo( + "Foo" + ) +} diff --git a/tests/indent/gleam/try.gleam b/tests/indent/gleam/try.gleam new file mode 100644 index 000000000..b5f6d2cd1 --- /dev/null +++ b/tests/indent/gleam/try.gleam @@ -0,0 +1,7 @@ +pub fn main() { + try int_a = + parse_int(a) + try int_b = + parse_int(b) + Ok(int_a + int_b) +} diff --git a/tests/indent/gleam/tuple.gleam b/tests/indent/gleam/tuple.gleam new file mode 100644 index 000000000..d58303540 --- /dev/null +++ b/tests/indent/gleam/tuple.gleam @@ -0,0 +1,11 @@ +pub fn main() { + #( + a, + #( + b, + #( + c + ) + ) + ) +} diff --git a/tests/indent/gleam/type.gleam b/tests/indent/gleam/type.gleam new file mode 100644 index 000000000..bbe75f64f --- /dev/null +++ b/tests/indent/gleam/type.gleam @@ -0,0 +1,18 @@ +pub type Cat { + Cat(name: String, cuteness: Int) +} + +type User { + LoggedIn(name: String) + Guest +} + +pub opaque type Counter { + Counter(value: Int) +} + +pub type Headers = + List(#(String, String)) + +type Headers = + List(#(String, String)) diff --git a/tests/indent/gleam_spec.lua b/tests/indent/gleam_spec.lua new file mode 100644 index 000000000..1b3cbd8a9 --- /dev/null +++ b/tests/indent/gleam_spec.lua @@ -0,0 +1,127 @@ +local Runner = require("tests.indent.common").Runner + +local run = Runner:new(it, "tests/indent/gleam", { + tabstop = 2, + shiftwidth = 2, + softtabstop = 2, + expandtab = true, +}) + +describe("indent Gleam:", function() + describe("whole file:", function() + run:whole_file "." + end) + describe("new line:", function() + run:new_line("type.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("type.gleam", { on_line = 2, text = "//", indent = 2 }) + run:new_line("type.gleam", { on_line = 3, text = "//", indent = 0 }) + run:new_line("type.gleam", { on_line = 4, text = "//", indent = 0 }) + run:new_line("type.gleam", { on_line = 5, text = "//", indent = 2 }) + run:new_line("type.gleam", { on_line = 6, text = "//", indent = 2 }) + run:new_line("type.gleam", { on_line = 7, text = "//", indent = 2 }) + run:new_line("type.gleam", { on_line = 8, text = "//", indent = 0 }) + run:new_line("type.gleam", { on_line = 9, text = "//", indent = 0 }) + run:new_line("type.gleam", { on_line = 10, text = "//", indent = 2 }) + run:new_line("type.gleam", { on_line = 11, text = "//", indent = 2 }) + run:new_line("type.gleam", { on_line = 12, text = "//", indent = 0 }) + run:new_line("type.gleam", { on_line = 13, text = "//", indent = 0 }) + run:new_line("type.gleam", { on_line = 14, text = "//", indent = 2 }) + run:new_line("type.gleam", { on_line = 15, text = "//", indent = 0 }) + run:new_line("type.gleam", { on_line = 16, text = "//", indent = 0 }) + run:new_line("type.gleam", { on_line = 17, text = "//", indent = 2 }) + run:new_line("type.gleam", { on_line = 18, text = "//", indent = 0 }) + + run:new_line("function.gleam", { on_line = 1, text = "//", indent = 0 }) + run:new_line("function.gleam", { on_line = 2, text = "//", indent = 0 }) + run:new_line("function.gleam", { on_line = 3, text = "//", indent = 2 }) + run:new_line("function.gleam", { on_line = 4, text = "//", indent = 2 }) + run:new_line("function.gleam", { on_line = 5, text = "//", indent = 0 }) + run:new_line("function.gleam", { on_line = 6, text = "//", indent = 0 }) + run:new_line("function.gleam", { on_line = 7, text = "//", indent = 2 }) + run:new_line("function.gleam", { on_line = 8, text = "//", indent = 2 }) + run:new_line("function.gleam", { on_line = 9, text = "//", indent = 0 }) + run:new_line("function.gleam", { on_line = 10, text = "//", indent = 0 }) + run:new_line("function.gleam", { on_line = 11, text = "//", indent = 2 }) + run:new_line("function.gleam", { on_line = 12, text = "//", indent = 2 }) + run:new_line("function.gleam", { on_line = 13, text = "//", indent = 2 }) + run:new_line("function.gleam", { on_line = 14, text = "//", indent = 2 }) + run:new_line("function.gleam", { on_line = 15, text = "//", indent = 2 }) + + run:new_line("list.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("list.gleam", { on_line = 2, text = "//", indent = 4 }) + run:new_line("list.gleam", { on_line = 3, text = "//", indent = 4 }) + run:new_line("list.gleam", { on_line = 4, text = "//", indent = 6 }) + run:new_line("list.gleam", { on_line = 5, text = "//", indent = 6 }) + run:new_line("list.gleam", { on_line = 6, text = "//", indent = 8 }) + run:new_line("list.gleam", { on_line = 7, text = "//", indent = 8 }) + run:new_line("list.gleam", { on_line = 8, text = "//", indent = 6 }) + run:new_line("list.gleam", { on_line = 9, text = "//", indent = 4 }) + run:new_line("list.gleam", { on_line = 10, text = "//", indent = 2 }) + run:new_line("list.gleam", { on_line = 11, text = "//", indent = 0 }) + + run:new_line("tuple.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("tuple.gleam", { on_line = 2, text = "//", indent = 4 }) + run:new_line("tuple.gleam", { on_line = 3, text = "//", indent = 4 }) + run:new_line("tuple.gleam", { on_line = 4, text = "//", indent = 6 }) + run:new_line("tuple.gleam", { on_line = 5, text = "//", indent = 6 }) + run:new_line("tuple.gleam", { on_line = 6, text = "//", indent = 8 }) + run:new_line("tuple.gleam", { on_line = 7, text = "//", indent = 8 }) + run:new_line("tuple.gleam", { on_line = 8, text = "//", indent = 6 }) + run:new_line("tuple.gleam", { on_line = 9, text = "//", indent = 4 }) + run:new_line("tuple.gleam", { on_line = 10, text = "//", indent = 2 }) + run:new_line("tuple.gleam", { on_line = 11, text = "//", indent = 0 }) + + run:new_line("case.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("case.gleam", { on_line = 2, text = "//", indent = 4 }) + run:new_line("case.gleam", { on_line = 3, text = "//", indent = 4 }) + run:new_line("case.gleam", { on_line = 4, text = "//", indent = 6 }) + run:new_line("case.gleam", { on_line = 5, text = "//", indent = 8 }) + run:new_line("case.gleam", { on_line = 6, text = "//", indent = 8 }) + run:new_line("case.gleam", { on_line = 7, text = "//", indent = 6 }) + run:new_line("case.gleam", { on_line = 8, text = "//", indent = 4 }) + run:new_line("case.gleam", { on_line = 9, text = "//", indent = 2 }) + run:new_line("case.gleam", { on_line = 10, text = "//", indent = 0 }) + + run:new_line("let.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("let.gleam", { on_line = 2, text = "//", indent = 4 }) + run:new_line("let.gleam", { on_line = 3, text = "//", indent = 4 }) + run:new_line("let.gleam", { on_line = 4, text = "//", indent = 0 }) + + run:new_line("pipe.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("pipe.gleam", { on_line = 2, text = "//", indent = 2 }) + run:new_line("pipe.gleam", { on_line = 3, text = "//", indent = 2 }) + run:new_line("pipe.gleam", { on_line = 4, text = "//", indent = 0 }) + + run:new_line("binary_expression.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("binary_expression.gleam", { on_line = 2, text = "//", indent = 4 }) + run:new_line("binary_expression.gleam", { on_line = 3, text = "//", indent = 4 }) + run:new_line("binary_expression.gleam", { on_line = 4, text = "//", indent = 0 }) + + run:new_line("import.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("import.gleam", { on_line = 2, text = "//", indent = 2 }) + run:new_line("import.gleam", { on_line = 3, text = "//", indent = 2 }) + run:new_line("import.gleam", { on_line = 4, text = "//", indent = 0 }) + + run:new_line("constant.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("constant.gleam", { on_line = 2, text = "//", indent = 2 }) + + run:new_line("try.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("try.gleam", { on_line = 2, text = "//", indent = 4 }) + run:new_line("try.gleam", { on_line = 3, text = "//", indent = 2 }) + run:new_line("try.gleam", { on_line = 4, text = "//", indent = 4 }) + run:new_line("try.gleam", { on_line = 5, text = "//", indent = 2 }) + run:new_line("try.gleam", { on_line = 6, text = "//", indent = 2 }) + run:new_line("try.gleam", { on_line = 7, text = "//", indent = 0 }) + + run:new_line("assert.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("assert.gleam", { on_line = 2, text = "//", indent = 4 }) + run:new_line("assert.gleam", { on_line = 3, text = "//", indent = 2 }) + run:new_line("assert.gleam", { on_line = 4, text = "//", indent = 0 }) + + run:new_line("todo.gleam", { on_line = 1, text = "//", indent = 2 }) + run:new_line("todo.gleam", { on_line = 2, text = "//", indent = 4 }) + run:new_line("todo.gleam", { on_line = 3, text = "//", indent = 4 }) + run:new_line("todo.gleam", { on_line = 4, text = "//", indent = 2 }) + run:new_line("todo.gleam", { on_line = 5, text = "//", indent = 0 }) + end) +end) |
