diff --git a/Cargo.toml b/Cargo.toml index 9ca884e..208bf00 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "tree-sitter-bp" description = "Blueprint grammar for the tree-sitter parsing library" -version = "0.3.0" +version = "0.4.0" keywords = ["incremental", "parsing", "android", "blueprint"] categories = ["parsing", "text-editors"] repository = "https://git.belanyi.fr/ambroisie/tree-sitter-bp" diff --git a/package.json b/package.json index ce8f4f9..4c4fe4c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tree-sitter-bp", - "version": "0.3.0", + "version": "0.4.0", "description": "Blueprint grammar for tree-sitter", "main": "bindings/node", "types": "bindings/node", diff --git a/queries/indents.scm b/queries/indents.scm index 9e63d1e..9eca576 100644 --- a/queries/indents.scm +++ b/queries/indents.scm @@ -11,6 +11,15 @@ (select_expression ")" @indent.branch) +(select_value) @indent.begin +(select_value + ")" @indent.branch) + +(select_pattern + "(" @indent.begin) +(select_pattern + ")" @indent.branch) + (select_cases) @indent.begin (select_cases "}" @indent.branch) diff --git a/test/indent/select.bp b/test/indent/select.bp index 6d95b2c..6c432b2 100644 --- a/test/indent/select.bp +++ b/test/indent/select.bp @@ -26,3 +26,35 @@ foo = select( default: 0, } ) + +foo = select(( + arch(), + os(), +), { + (default, default): [], +}) + +foo = select( + (arch(), os()), + { + (default, default): [], + } +) + +// We're really getting into more and more unlikely choices here... +foo = select( + ( + arch(), + os(), + ), + { + (default, default): [], + } +) + +foo = select((arch(), os()), { + ( + default, + default, + ): [], +}) diff --git a/test/indent_spec.lua b/test/indent_spec.lua index 26b9d3b..e3a7f3d 100644 --- a/test/indent_spec.lua +++ b/test/indent_spec.lua @@ -1,6 +1,7 @@ package.path = package.path .. ";" .. vim.env.NVIM_TREESITTER .. "/?.lua" local Runner = require("tests.indent.common").Runner +local XFAIL = require("tests.indent.common").XFAIL -- FIXME: path to root local runner = Runner:new(it, ".", { @@ -19,7 +20,7 @@ describe("indent Blueprint:", function() }) runner:whole_file("test/indent/", { expected_failures = { - -- NOTE: none for now + "test/indent/select.bp", }, }) end) @@ -47,5 +48,14 @@ describe("indent Blueprint:", function() runner:new_line("test/indent/select.bp", { on_line = 26, text = 'default: "value"', indent = 8 }, "default case, trailing, alternate formatting") runner:new_line("test/indent/select.bp", { on_line = 26, text = '}', indent = 4 }, "select cases closing delimiter, alternate formatting") runner:new_line("test/indent/select.bp", { on_line = 27, text = ')', indent = 0 }, "select expression closing delimiter, alternate formatting") + runner:new_line("test/indent/select.bp", { on_line = 30, text = 'device()', indent = 4 }, "multi-valued select condition, begin") + runner:new_line("test/indent/select.bp", { on_line = 31, text = 'device()', indent = 4 }, "multi-valued select condition, middle") + runner:new_line("test/indent/select.bp", { on_line = 32, text = 'device()', indent = 4 }, "multi-valued select condition, end") + runner:new_line("test/indent/select.bp", { on_line = 46, text = 'device()', indent = 8 }, "multi-valued select condition, begin, alternate formatting", XFAIL) + runner:new_line("test/indent/select.bp", { on_line = 47, text = 'device()', indent = 8 }, "multi-valued select condition, middle, alternate formatting", XFAIL) + runner:new_line("test/indent/select.bp", { on_line = 48, text = 'device()', indent = 8 }, "multi-valued select condition, end, alternate formatting", XFAIL) + runner:new_line("test/indent/select.bp", { on_line = 56, text = 'default,', indent = 8 }, "multi-valued select case, begin", XFAIL) + runner:new_line("test/indent/select.bp", { on_line = 57, text = 'default,', indent = 8 }, "multi-valued select case, middle", XFAIL) + runner:new_line("test/indent/select.bp", { on_line = 58, text = 'default,', indent = 8 }, "multi-valued select case, end", XFAIL) end) end)