Gleam indentation tests

This commit is contained in:
Connor Lay (Clay) 2022-02-12 15:12:05 -08:00 committed by Stephan Seitz
parent 4a5720332d
commit b62750e328
16 changed files with 239 additions and 0 deletions

View file

@ -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 "|>"))

View file

@ -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

View file

@ -0,0 +1,4 @@
pub fn main() {
assert Ok(i) =
parse_int("123")
}

View file

@ -0,0 +1,4 @@
pub fn main() {
True &&
False
}

View file

@ -0,0 +1,10 @@
pub fn main() {
case 1 {
1 -> "One"
2 -> {
case 2 {
2 -> "Two"
}
}
}
}

View file

@ -0,0 +1,2 @@
pub const foo =
"bar"

View file

@ -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"

View file

@ -0,0 +1,4 @@
import foo.{
Bar,
baz,
}

View file

@ -0,0 +1,4 @@
pub fn main() {
let string =
"string"
}

View file

@ -0,0 +1,11 @@
pub fn main() {
[
a,
..[
b,
..[
c,
]
]
]
}

View file

@ -0,0 +1,4 @@
pub fn main() {
one()
|> two()
}

View file

@ -0,0 +1,5 @@
pub fn main() {
todo(
"Foo"
)
}

View file

@ -0,0 +1,7 @@
pub fn main() {
try int_a =
parse_int(a)
try int_b =
parse_int(b)
Ok(int_a + int_b)
}

View file

@ -0,0 +1,11 @@
pub fn main() {
#(
a,
#(
b,
#(
c
)
)
)
}

View file

@ -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))

127
tests/indent/gleam_spec.lua Normal file
View file

@ -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)