mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-01 19:17:02 -04:00
feat: add swift indents (#4756)
This commit is contained in:
parent
b231afbad1
commit
864b4171de
5 changed files with 210 additions and 0 deletions
87
queries/swift/indents.scm
Normal file
87
queries/swift/indents.scm
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
[
|
||||
(protocol_body)
|
||||
(class_body)
|
||||
(function_declaration)
|
||||
(computed_property)
|
||||
(subscript_declaration)
|
||||
|
||||
(computed_getter)
|
||||
(computed_setter)
|
||||
|
||||
(assignment)
|
||||
|
||||
(control_transfer_statement) ; return ...
|
||||
(for_statement)
|
||||
(while_statement)
|
||||
(repeat_while_statement)
|
||||
(do_statement)
|
||||
(if_statement)
|
||||
(switch_statement)
|
||||
(guard_statement)
|
||||
|
||||
(type_parameters) ; x<Foo>
|
||||
(tuple_type) ; (...)
|
||||
(array_type) ; [String]
|
||||
(dictionary_type); [Foo: Bar]
|
||||
|
||||
(call_expression)
|
||||
(tuple_expression)
|
||||
(array_literal)
|
||||
(dictionary_literal)
|
||||
(lambda_literal)
|
||||
] @indent.begin
|
||||
|
||||
; @something(...)
|
||||
((modifiers
|
||||
(attribute) @indent.begin))
|
||||
|
||||
(function_declaration
|
||||
(modifiers
|
||||
.
|
||||
(attribute)
|
||||
(_)* @indent.branch)
|
||||
.
|
||||
_ @indent.branch
|
||||
(#not-has-type? @indent.branch type_parameters parameter))
|
||||
|
||||
|
||||
(ERROR
|
||||
[
|
||||
"<"
|
||||
"{"
|
||||
"("
|
||||
"["
|
||||
]
|
||||
) @indent.begin
|
||||
|
||||
|
||||
; if-elseif
|
||||
(if_statement
|
||||
(if_statement) @indent.dedent)
|
||||
|
||||
(switch_entry . _ @indent.branch)
|
||||
|
||||
(function_declaration ")" @indent.branch)
|
||||
|
||||
(type_parameters ">" @indent.branch @indent.end .)
|
||||
(tuple_expression ")" @indent.branch @indent.end)
|
||||
(value_arguments ")" @indent.branch @indent.end)
|
||||
(tuple_type ")" @indent.branch @indent.end)
|
||||
(modifiers
|
||||
(attribute ")" @indent.branch @indent.end))
|
||||
|
||||
[
|
||||
"}"
|
||||
"]"
|
||||
] @indent.branch @indent.end
|
||||
|
||||
|
||||
[
|
||||
; (ERROR)
|
||||
(comment)
|
||||
(multiline_comment)
|
||||
(raw_str_part)
|
||||
(multi_line_string_literal)
|
||||
] @indent.auto
|
||||
|
||||
(directive) @indent.ignore
|
||||
51
tests/indent/swift/declarations.swift
Normal file
51
tests/indent/swift/declarations.swift
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
@wrapper
|
||||
@modifier(
|
||||
*
|
||||
)
|
||||
class EquilateralTriangle: NamedShape {
|
||||
var sideLength: Double = 0.0
|
||||
|
||||
@attr
|
||||
init(
|
||||
sideLength: Double,
|
||||
name: String
|
||||
) {
|
||||
self.sideLength = sideLength
|
||||
}
|
||||
|
||||
var perimeter: Double {
|
||||
willSet {
|
||||
}
|
||||
}
|
||||
|
||||
@funcattr
|
||||
override func simpleDescription(a: int, b: int) -> String {
|
||||
return "An equilateral triangle with sides of length \(sideLength)."
|
||||
}
|
||||
}
|
||||
|
||||
@attr
|
||||
protocol ExampleProtocol {
|
||||
var simpleDescription: String { get }
|
||||
mutating func adjust()
|
||||
}
|
||||
|
||||
@available(*)
|
||||
func test() {
|
||||
|
||||
}
|
||||
|
||||
@attr(*)
|
||||
typealias Foo = Bar
|
||||
|
||||
@attr
|
||||
struct Foo<
|
||||
Bar
|
||||
> {
|
||||
@Provider
|
||||
var test = 1
|
||||
|
||||
subscript(index: Int) -> Int {
|
||||
var foo = 2
|
||||
}
|
||||
}
|
||||
17
tests/indent/swift/expressions.swift
Normal file
17
tests/indent/swift/expressions.swift
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
func Test() {
|
||||
(1 + 2)
|
||||
|
||||
[
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5
|
||||
].split()
|
||||
|
||||
let x = [
|
||||
1: 2,
|
||||
3: 4,
|
||||
]
|
||||
|
||||
}
|
||||
34
tests/indent/swift/statements.swift
Normal file
34
tests/indent/swift/statements.swift
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
func Test() {
|
||||
if true {
|
||||
return
|
||||
} else if true {
|
||||
return
|
||||
}
|
||||
|
||||
switch x {
|
||||
case "1":
|
||||
print("x")
|
||||
default:
|
||||
print("y")
|
||||
@unknown default:
|
||||
print("z")
|
||||
}
|
||||
|
||||
for a in b {
|
||||
}
|
||||
|
||||
while true{
|
||||
}
|
||||
|
||||
repeat {
|
||||
|
||||
} while (true)
|
||||
|
||||
guard let name = person["name"] else {
|
||||
return
|
||||
}
|
||||
|
||||
return (
|
||||
x + 1
|
||||
)
|
||||
}
|
||||
21
tests/indent/swift_spec.lua
Normal file
21
tests/indent/swift_spec.lua
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
local Runner = require("tests.indent.common").Runner
|
||||
|
||||
local run = Runner:new(it, "tests/indent/swift", {
|
||||
tabstop = 2,
|
||||
shiftwidth = 2,
|
||||
softtabstop = 2,
|
||||
expandtab = true,
|
||||
})
|
||||
|
||||
describe("indent Swift:", function()
|
||||
describe("whole file:", function()
|
||||
run:whole_file(".", {})
|
||||
end)
|
||||
describe("new line:", function()
|
||||
run:new_line("declarations.swift", { on_line = 6, text = "var x = 1", indent = 2 })
|
||||
run:new_line("declarations.swift", { on_line = 12, text = "var textInsideInit = true", indent = 4 })
|
||||
run:new_line("declarations.swift", { on_line = 17, text = "var textInsideWillSet = 1", indent = 6 })
|
||||
run:new_line("declarations.swift", { on_line = 22, text = "var textInsideOverrideFunc", indent = 4 })
|
||||
run:new_line("declarations.swift", { on_line = 28, text = "var InsideProtocol: String { get }", indent = 2 })
|
||||
end)
|
||||
end)
|
||||
Loading…
Add table
Add a link
Reference in a new issue