mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-18 11:20:07 -04:00
feat(t32): add indent rules (#4782)
This commit is contained in:
parent
102f1b2f55
commit
16cce8df58
11 changed files with 291 additions and 5 deletions
|
|
@ -474,7 +474,7 @@
|
||||||
"revision": "440d5f913d9465c9c776a1bd92334d32febcf065"
|
"revision": "440d5f913d9465c9c776a1bd92334d32febcf065"
|
||||||
},
|
},
|
||||||
"t32": {
|
"t32": {
|
||||||
"revision": "4fca25fa99b6fd9ccf9cab9b6bf702a9df142ad5"
|
"revision": "1dd98248b01e4a3933c1b85b58bab0875e2ba437"
|
||||||
},
|
},
|
||||||
"tablegen": {
|
"tablegen": {
|
||||||
"revision": "e5e046e1b221e25111175469f02f3cf336010857"
|
"revision": "e5e046e1b221e25111175469f02f3cf336010857"
|
||||||
|
|
|
||||||
|
|
@ -1403,7 +1403,7 @@ list.t32 = {
|
||||||
install_info = {
|
install_info = {
|
||||||
url = "https://codeberg.org/xasc/tree-sitter-t32",
|
url = "https://codeberg.org/xasc/tree-sitter-t32",
|
||||||
files = { "src/parser.c", "src/scanner.c" },
|
files = { "src/parser.c", "src/scanner.c" },
|
||||||
revision = "675cd7de4eb80f2faa1e6d3bc9ee195fa9ef9790",
|
revision = "1dd98248b01e4a3933c1b85b58bab0875e2ba437",
|
||||||
},
|
},
|
||||||
maintainers = { "@xasc" },
|
maintainers = { "@xasc" },
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -121,6 +121,7 @@
|
||||||
; Parameter declarations
|
; Parameter declarations
|
||||||
(parameter_declaration
|
(parameter_declaration
|
||||||
command: (identifier) @keyword
|
command: (identifier) @keyword
|
||||||
|
(identifier)? @constant.builtin
|
||||||
macro: (macro) @parameter)
|
macro: (macro) @parameter)
|
||||||
|
|
||||||
; Control flow
|
; Control flow
|
||||||
|
|
|
||||||
36
queries/t32/indents.scm
Normal file
36
queries/t32/indents.scm
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
; Subroutines & scoping
|
||||||
|
(block
|
||||||
|
")" @indent.branch .) @indent.begin
|
||||||
|
|
||||||
|
|
||||||
|
; Control flow statements
|
||||||
|
(
|
||||||
|
(if_block
|
||||||
|
_*
|
||||||
|
condition: (_)
|
||||||
|
. (_) @_then) @indent.begin
|
||||||
|
(#not-has-type? @_then block)
|
||||||
|
)
|
||||||
|
|
||||||
|
(else_block) @indent.branch
|
||||||
|
|
||||||
|
(else_block
|
||||||
|
(if_block) @indent.dedent) @indent.branch
|
||||||
|
|
||||||
|
(
|
||||||
|
(else_block
|
||||||
|
(if_block
|
||||||
|
_*
|
||||||
|
condition: (_)
|
||||||
|
. (_) @_then)) @indent.branch
|
||||||
|
(#not-has-type? @_then block)
|
||||||
|
)
|
||||||
|
|
||||||
|
(while_block
|
||||||
|
(command_expression)) @indent.begin
|
||||||
|
|
||||||
|
(repeat_block
|
||||||
|
(command_expression)) @indent.begin
|
||||||
|
|
||||||
|
|
||||||
|
(comment) @indent.ignore
|
||||||
49
tests/indent/t32/if_block.cmm
Normal file
49
tests/indent/t32/if_block.cmm
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
IF &a
|
||||||
|
STOP
|
||||||
|
|
||||||
|
IF (TRUE())
|
||||||
|
(
|
||||||
|
BREAK
|
||||||
|
)
|
||||||
|
|
||||||
|
IF (&b+CouNT())
|
||||||
|
(
|
||||||
|
continue
|
||||||
|
)
|
||||||
|
|
||||||
|
IF FOUND()
|
||||||
|
STOP
|
||||||
|
ELSE
|
||||||
|
CONTinue
|
||||||
|
|
||||||
|
IF &c
|
||||||
|
CONTinue
|
||||||
|
ELSE IF FALSE()
|
||||||
|
Break
|
||||||
|
ELSE
|
||||||
|
stop
|
||||||
|
|
||||||
|
IF &d
|
||||||
|
(
|
||||||
|
STOP
|
||||||
|
)
|
||||||
|
ELSE IF &e
|
||||||
|
; comment A
|
||||||
|
(
|
||||||
|
CONTINUE
|
||||||
|
)
|
||||||
|
ELSE
|
||||||
|
; comment B
|
||||||
|
(
|
||||||
|
BREAK
|
||||||
|
)
|
||||||
|
|
||||||
|
IF &f
|
||||||
|
IF &g
|
||||||
|
stop
|
||||||
|
ELSE
|
||||||
|
IF &h
|
||||||
|
(
|
||||||
|
continue
|
||||||
|
)
|
||||||
|
|
||||||
27
tests/indent/t32/repeat_block.cmm
Normal file
27
tests/indent/t32/repeat_block.cmm
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
RePeaT 10. PRINT "A"
|
||||||
|
|
||||||
|
RePeaT &a
|
||||||
|
print
|
||||||
|
|
||||||
|
REPEAT 0xaAfF09
|
||||||
|
(
|
||||||
|
cont
|
||||||
|
)
|
||||||
|
|
||||||
|
RPT
|
||||||
|
(
|
||||||
|
b
|
||||||
|
)
|
||||||
|
|
||||||
|
rpt
|
||||||
|
(
|
||||||
|
s
|
||||||
|
)
|
||||||
|
WHILE &a
|
||||||
|
|
||||||
|
REPEAT TRUE()
|
||||||
|
; comment
|
||||||
|
(
|
||||||
|
cont
|
||||||
|
)
|
||||||
|
|
||||||
23
tests/indent/t32/subroutine_block.cmm
Normal file
23
tests/indent/t32/subroutine_block.cmm
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
printA:
|
||||||
|
(
|
||||||
|
PRINT "A"
|
||||||
|
RETURN
|
||||||
|
)
|
||||||
|
|
||||||
|
sUBROUtINE printB
|
||||||
|
(
|
||||||
|
ENTRY &in
|
||||||
|
|
||||||
|
PRINT "&in"
|
||||||
|
RETURN
|
||||||
|
)
|
||||||
|
|
||||||
|
SUBROUTINE printC
|
||||||
|
// comment
|
||||||
|
(
|
||||||
|
PARAMETERS &a &b
|
||||||
|
|
||||||
|
PRINT "&a"+"&b"
|
||||||
|
ENDDO
|
||||||
|
)
|
||||||
|
|
||||||
14
tests/indent/t32/while_block.cmm
Normal file
14
tests/indent/t32/while_block.cmm
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
WHILE &a
|
||||||
|
Step
|
||||||
|
|
||||||
|
WHILE (sYmbol.EXIT(main))
|
||||||
|
(
|
||||||
|
Step
|
||||||
|
Break
|
||||||
|
)
|
||||||
|
|
||||||
|
WHILE (FALSE())
|
||||||
|
// comment
|
||||||
|
(
|
||||||
|
ECHO "test"
|
||||||
|
)
|
||||||
130
tests/indent/t32_spec.lua
Normal file
130
tests/indent/t32_spec.lua
Normal file
|
|
@ -0,0 +1,130 @@
|
||||||
|
local Runner = require("tests.indent.common").Runner
|
||||||
|
local XFAIL = require("tests.indent.common").XFAIL
|
||||||
|
|
||||||
|
local runner = Runner:new(it, "tests/indent/t32", {
|
||||||
|
tabstop = 2,
|
||||||
|
shiftwidth = 2,
|
||||||
|
softtabstop = 0,
|
||||||
|
expandtab = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("indent t32:", function()
|
||||||
|
describe("whole file:", function()
|
||||||
|
runner:whole_file "."
|
||||||
|
end)
|
||||||
|
|
||||||
|
describe("new line:", function()
|
||||||
|
runner:new_line("if_block.cmm", { on_line = 2, text = "GOTO start", indent = 0 }, "command after IF", XFAIL)
|
||||||
|
|
||||||
|
runner:new_line("if_block.cmm", { on_line = 5, text = "GOTO start", indent = 2 }, "command in IF then block", XFAIL)
|
||||||
|
|
||||||
|
runner:new_line("if_block.cmm", { on_line = 4, text = "(", indent = 0 }, "block after IF")
|
||||||
|
|
||||||
|
for ii, test in ipairs {
|
||||||
|
{ 1, 2 },
|
||||||
|
{ 14, 2 },
|
||||||
|
{ 19, 2 },
|
||||||
|
{ 21, 2 },
|
||||||
|
{ 41, 2 },
|
||||||
|
{ 42, 4 },
|
||||||
|
} do
|
||||||
|
runner:new_line(
|
||||||
|
"if_block.cmm",
|
||||||
|
{ on_line = test[1], text = "&x=1.", indent = test[2] },
|
||||||
|
"command in IF then[" .. ii .. "]",
|
||||||
|
XFAIL
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
runner:new_line("if_block.cmm", { on_line = 45, text = "&x=1.", indent = 4 }, "command in IF then")
|
||||||
|
|
||||||
|
for ii, test in ipairs {
|
||||||
|
{ 16, 2 },
|
||||||
|
{ 21, 2 },
|
||||||
|
{ 23, 2 },
|
||||||
|
{ 44, 4 },
|
||||||
|
} do
|
||||||
|
runner:new_line(
|
||||||
|
"if_block.cmm",
|
||||||
|
{ on_line = test[1], text = "(\n", indent = test[2] },
|
||||||
|
"command in IF else[" .. ii .. "]",
|
||||||
|
XFAIL
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
runner:new_line("while_block.cmm", { on_line = 2, text = "&x=1.", indent = 0 }, "command after WHILE", XFAIL)
|
||||||
|
|
||||||
|
runner:new_line("while_block.cmm", { on_line = 4, text = "&x=1.", indent = 0 }, "command after WHILE")
|
||||||
|
|
||||||
|
runner:new_line("while_block.cmm", { on_line = 1, text = "(\n", indent = 0 }, "block in WHILE then")
|
||||||
|
|
||||||
|
for ii, test in ipairs {
|
||||||
|
{ 5, 2 },
|
||||||
|
{ 12, 2 },
|
||||||
|
} do
|
||||||
|
runner:new_line(
|
||||||
|
"while_block.cmm",
|
||||||
|
{ on_line = test[1], text = "&x=1.", indent = test[2] },
|
||||||
|
"command in WHILE then block[" .. ii .. "]",
|
||||||
|
XFAIL
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
for ii, test in ipairs {
|
||||||
|
{ 1, 0, nil },
|
||||||
|
{ 4, 0, XFAIL },
|
||||||
|
} do
|
||||||
|
runner:new_line(
|
||||||
|
"repeat_block.cmm",
|
||||||
|
{ on_line = test[1], text = "&x=1.", indent = test[2] },
|
||||||
|
"command after RePeaT[" .. ii .. "]",
|
||||||
|
test[3]
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
runner:new_line("repeat_block.cmm", { on_line = 3, text = "(\n", indent = 0 }, "block in RePeaT then")
|
||||||
|
|
||||||
|
for ii, test in ipairs {
|
||||||
|
{ 7, 2, XFAIL },
|
||||||
|
{ 18, 2, nil },
|
||||||
|
{ 24, 2, XFAIL },
|
||||||
|
} do
|
||||||
|
runner:new_line(
|
||||||
|
"repeat_block.cmm",
|
||||||
|
{ on_line = test[1], text = "&x=1.", indent = test[2] },
|
||||||
|
"command in RePeaT then block[" .. ii .. "]",
|
||||||
|
test[3]
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
runner:new_line("subroutine_block.cmm", { on_line = 1, text = "(\n", indent = 0 }, "block after call label")
|
||||||
|
|
||||||
|
for ii, test in ipairs {
|
||||||
|
{ 2, 2, XFAIL },
|
||||||
|
{ 3, 2, nil },
|
||||||
|
{ 8, 2, XFAIL },
|
||||||
|
{ 12, 2, nil },
|
||||||
|
{ 19, 2, XFAIL },
|
||||||
|
} do
|
||||||
|
runner:new_line(
|
||||||
|
"subroutine_block.cmm",
|
||||||
|
{ on_line = test[1], text = "&x=1.", indent = test[2] },
|
||||||
|
"command in subroutine block[" .. ii .. "]",
|
||||||
|
test[3]
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
for ii, test in ipairs {
|
||||||
|
{ 5, 2 },
|
||||||
|
{ 13, 2 },
|
||||||
|
{ 23, 2 },
|
||||||
|
} do
|
||||||
|
runner:new_line(
|
||||||
|
"subroutine_block.cmm",
|
||||||
|
{ on_line = test[1], text = "&x=1.", indent = test[2] },
|
||||||
|
"command after subroutine block[" .. ii .. "]",
|
||||||
|
XFAIL
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
@ -5,6 +5,11 @@ ENTRY &password
|
||||||
; <- keyword
|
; <- keyword
|
||||||
; ^ parameter
|
; ^ parameter
|
||||||
|
|
||||||
|
ENTRY %LINE &salt
|
||||||
|
; <- keyword
|
||||||
|
; ^ constant.builtin
|
||||||
|
; ^ parameter
|
||||||
|
|
||||||
IF "&password"==""
|
IF "&password"==""
|
||||||
; <- conditional
|
; <- conditional
|
||||||
; ^ string
|
; ^ string
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,10 @@ List `main`
|
||||||
; ^ operator
|
; ^ operator
|
||||||
; ^ character
|
; ^ character
|
||||||
|
|
||||||
Data.Set 0xffff800000 0y0011xx01xx&&a
|
Data.Set N: 0xffff800000 0y0011xx01xx&&a
|
||||||
; ^ number
|
; ^ number
|
||||||
; ^ operator
|
; ^ number
|
||||||
|
; ^ operator
|
||||||
|
|
||||||
WinPOS 0% 85% 100% 15%
|
WinPOS 0% 85% 100% 15%
|
||||||
; ^ number
|
; ^ number
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue