mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-19 11:50:09 -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 ; Indent children when matching this node
|
||||||
|
@indent_end ; Marks the end of indented block
|
||||||
@aligned_indent ; Behaves like python aligned/hanging indent
|
@aligned_indent ; Behaves like python aligned/hanging indent
|
||||||
@dedent ; Dedent children when matching this node
|
@dedent ; Dedent children when matching this node
|
||||||
@branch ; Dedent itself 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 = {
|
local map = {
|
||||||
auto = {},
|
auto = {},
|
||||||
indent = {},
|
indent = {},
|
||||||
|
indent_end = {},
|
||||||
dedent = {},
|
dedent = {},
|
||||||
branch = {},
|
branch = {},
|
||||||
ignore = {},
|
ignore = {},
|
||||||
|
|
@ -70,6 +71,9 @@ function M.get_indent(lnum)
|
||||||
if is_empty_line then
|
if is_empty_line then
|
||||||
local prevlnum = vim.fn.prevnonblank(lnum)
|
local prevlnum = vim.fn.prevnonblank(lnum)
|
||||||
node = get_last_node_at_line(root, prevlnum)
|
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
|
else
|
||||||
node = get_first_node_at_line(root, lnum)
|
node = get_first_node_at_line(root, lnum)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,9 @@
|
||||||
(switch_case)
|
(switch_case)
|
||||||
] @indent
|
] @indent
|
||||||
|
|
||||||
|
|
||||||
|
(statement_block "}" @indent_end)
|
||||||
|
|
||||||
[
|
[
|
||||||
(arguments (object))
|
(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