mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-01 19:17:02 -04:00
feat(indent): ecma - support try_catch and if_else
This commit is contained in:
parent
bb60706433
commit
8f9d4ada35
6 changed files with 75 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -16,6 +16,9 @@
|
|||
(switch_case)
|
||||
] @indent
|
||||
|
||||
|
||||
(statement_block "}" @indent_end)
|
||||
|
||||
[
|
||||
(arguments (object))
|
||||
"("
|
||||
|
|
|
|||
13
tests/indent/ecma/if_else.js
Normal file
13
tests/indent/ecma/if_else.js
Normal 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()
|
||||
}
|
||||
8
tests/indent/ecma/try_catch.js
Normal file
8
tests/indent/ecma/try_catch.js
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
try {
|
||||
throw Error()
|
||||
} catch (err) {
|
||||
throw error
|
||||
} finally {
|
||||
console.log("42")
|
||||
}
|
||||
|
||||
46
tests/indent/javascript_spec.lua
Normal file
46
tests/indent/javascript_spec.lua
Normal 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue