feat(t32): add indent rules (#4782)

This commit is contained in:
Christoph Sax 2023-05-18 09:40:13 +02:00 committed by GitHub
parent 102f1b2f55
commit 16cce8df58
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 291 additions and 5 deletions

View file

@ -474,7 +474,7 @@
"revision": "440d5f913d9465c9c776a1bd92334d32febcf065"
},
"t32": {
"revision": "4fca25fa99b6fd9ccf9cab9b6bf702a9df142ad5"
"revision": "1dd98248b01e4a3933c1b85b58bab0875e2ba437"
},
"tablegen": {
"revision": "e5e046e1b221e25111175469f02f3cf336010857"

View file

@ -1403,7 +1403,7 @@ list.t32 = {
install_info = {
url = "https://codeberg.org/xasc/tree-sitter-t32",
files = { "src/parser.c", "src/scanner.c" },
revision = "675cd7de4eb80f2faa1e6d3bc9ee195fa9ef9790",
revision = "1dd98248b01e4a3933c1b85b58bab0875e2ba437",
},
maintainers = { "@xasc" },
}

View file

@ -121,6 +121,7 @@
; Parameter declarations
(parameter_declaration
command: (identifier) @keyword
(identifier)? @constant.builtin
macro: (macro) @parameter)
; Control flow

36
queries/t32/indents.scm Normal file
View 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

View 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
)

View 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
)

View 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
)

View 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
View 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)

View file

@ -5,6 +5,11 @@ ENTRY &password
; <- keyword
; ^ parameter
ENTRY %LINE &salt
; <- keyword
; ^ constant.builtin
; ^ parameter
IF "&password"==""
; <- conditional
; ^ string

View file

@ -27,9 +27,10 @@ List `main`
; ^ operator
; ^ character
Data.Set 0xffff800000 0y0011xx01xx&&a
; ^ number
; ^ operator
Data.Set N: 0xffff800000 0y0011xx01xx&&a
; ^ number
; ^ number
; ^ operator
WinPOS 0% 85% 100% 15%
; ^ number