mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-01 11:06:54 -04:00
fix(html): fix wrong indents for script/style tags
This commit is contained in:
parent
28baed7698
commit
8c71c6c5ed
6 changed files with 91 additions and 2 deletions
|
|
@ -1,9 +1,32 @@
|
|||
[
|
||||
(element)
|
||||
(
|
||||
(element
|
||||
(start_tag
|
||||
(tag_name) @_not_special)
|
||||
)
|
||||
(#not-any-of? @_not_special "meta" "link")
|
||||
)
|
||||
(element (self_closing_tag))
|
||||
] @indent
|
||||
|
||||
; These tags are usually written one-lined and doesnt use self-closing tags so special-cased them
|
||||
; but add indent to the tag to make sure attributes inside them are still indented if written multi-lined
|
||||
(
|
||||
(start_tag
|
||||
(tag_name) @_special)
|
||||
(#any-of? @_special "meta" "link")
|
||||
) @indent
|
||||
|
||||
|
||||
; These are the nodes that will be captured when we do `normal o`
|
||||
; But last element has already been ended, so capturing this
|
||||
; to mark end of last element
|
||||
(element (end_tag [">"] @indent_end))
|
||||
(element (self_closing_tag "/>" @indent_end))
|
||||
|
||||
; Script/style elements aren't indented, so only branch the end tag of other elements
|
||||
(element (end_tag) @branch)
|
||||
[
|
||||
(end_tag)
|
||||
">"
|
||||
"/>"
|
||||
] @branch
|
||||
|
|
|
|||
4
tests/indent/html/issue-3986.html
Normal file
4
tests/indent/html/issue-3986.html
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<div>
|
||||
<div>
|
||||
</div>
|
||||
</div>
|
||||
12
tests/indent/html/script_style.html
Normal file
12
tests/indent/html/script_style.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<head>
|
||||
<style>
|
||||
a {
|
||||
stroke-linecap: round;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const foo = "bar"
|
||||
</script>
|
||||
</body>
|
||||
14
tests/indent/html/self_closing_tag.html
Normal file
14
tests/indent/html/self_closing_tag.html
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title></title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="css/style.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<br/>
|
||||
<button
|
||||
id = "123"
|
||||
</body>
|
||||
</html>
|
||||
8
tests/indent/html/start_tag.html
Normal file
8
tests/indent/html/start_tag.html
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<meta charset="UTF-8">
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta
|
||||
charset="UTF-8"
|
||||
</head>
|
||||
</html>
|
||||
28
tests/indent/html_spec.lua
Normal file
28
tests/indent/html_spec.lua
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
local Runner = require("tests.indent.common").Runner
|
||||
local runner = Runner:new(it, "tests/indent/html", {
|
||||
tabstop = 2,
|
||||
shiftwidth = 2,
|
||||
expandtab = true,
|
||||
})
|
||||
|
||||
describe("indent HTML:", function()
|
||||
describe("whole file:", function()
|
||||
runner:whole_file "."
|
||||
end)
|
||||
|
||||
describe("new line:", function()
|
||||
runner:new_line("start_tag.html", { on_line = 1, text = "anything", indent = 0 })
|
||||
runner:new_line("start_tag.html", { on_line = 4, text = "anything", indent = 4 })
|
||||
runner:new_line("start_tag.html", { on_line = 6, text = "charset = utf-8", indent = 6 })
|
||||
runner:new_line("start_tag.html", { on_line = 6, text = ">", indent = 4 })
|
||||
runner:new_line("start_tag.html", { on_line = 6, text = "/>", indent = 4 })
|
||||
runner:new_line("issue-3986.html", { on_line = 3, text = "indent once", indent = 2 })
|
||||
runner:new_line("self_closing_tag.html", { on_line = 10, text = "Something", indent = 4 })
|
||||
runner:new_line("self_closing_tag.html", { on_line = 12, text = "disabled", indent = 6 })
|
||||
runner:new_line("self_closing_tag.html", { on_line = 12, text = "/>", indent = 4 })
|
||||
runner:new_line("script_style.html", { on_line = 5, text = "body", indent = 2 })
|
||||
runner:new_line("script_style.html", { on_line = 6, text = "<div></div>", indent = 2 })
|
||||
runner:new_line("script_style.html", { on_line = 9, text = "const x = 1", indent = 2 })
|
||||
runner:new_line("script_style.html", { on_line = 11, text = "Text", indent = 2 })
|
||||
end)
|
||||
end)
|
||||
Loading…
Add table
Add a link
Reference in a new issue