feat(indent): ecma - support try_catch and if_else

This commit is contained in:
Munif Tanjim 2022-01-21 17:11:46 +06:00 committed by Christian Clason
parent bb60706433
commit 8f9d4ada35
6 changed files with 75 additions and 0 deletions

View file

@ -270,6 +270,7 @@ the node describing the language and `@content` to describe the injection region
```
@indent ; Indent children when matching this node
@indent_end ; Marks the end of indented block
@aligned_indent ; Behaves like python aligned/hanging indent
@dedent ; Dedent children when matching this node
@branch ; Dedent itself when matching this node

View file

@ -31,6 +31,7 @@ local get_indents = tsutils.memoize_by_buf_tick(function(bufnr, root, lang)
local map = {
auto = {},
indent = {},
indent_end = {},
dedent = {},
branch = {},
ignore = {},
@ -70,6 +71,9 @@ function M.get_indent(lnum)
if is_empty_line then
local prevlnum = vim.fn.prevnonblank(lnum)
node = get_last_node_at_line(root, prevlnum)
if q.indent_end[node:id()] then
node = get_first_node_at_line(root, lnum)
end
else
node = get_first_node_at_line(root, lnum)
end

View file

@ -16,6 +16,9 @@
(switch_case)
] @indent
(statement_block "}" @indent_end)
[
(arguments (object))
"("

View file

@ -0,0 +1,13 @@
if (cond1) {
do_1()
if (cond1a) {
do_1a()
} else {
do_1_fallback()
}
} else if (cond2) {
do_2()
} else {
do_fallback()
}

View file

@ -0,0 +1,8 @@
try {
throw Error()
} catch (err) {
throw error
} finally {
console.log("42")
}

View file

@ -0,0 +1,46 @@
local Runner = require("tests.indent.common").Runner
-- local XFAIL = require("tests.indent.common").XFAIL
local run = Runner:new(it, "tests/indent", {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
filetype = "javascript",
})
describe("indent JavaScript:", function()
describe("whole file:", function()
run:whole_file({ "ecma/" }, {
expected_failures = {},
})
end)
describe("new line:", function()
for _, info in ipairs {
{ 1, 2 },
{ 2, 2 },
{ 3, 2 },
{ 4, 2 },
{ 5, 2 },
{ 6, 2 },
{ 7, 0 },
} do
run:new_line("ecma/try_catch.js", { on_line = info[1], text = "hello()", indent = info[2] })
end
for _, info in ipairs {
{ 1, 2 },
{ 2, 2 },
{ 3, 2 },
{ 5, 4 },
{ 6, 4 },
{ 8, 2 },
{ 9, 2 },
{ 12, 2 },
{ 13, 0 },
} do
run:new_line("ecma/if_else.js", { on_line = info[1], text = "hello()", indent = info[2] })
end
end)
end)