aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPham Huy Hoang <hoangtun0810@gmail.com>2023-05-08 14:53:31 +0900
committerGitHub <noreply@github.com>2023-05-08 14:53:31 +0900
commit864b4171de82772323ab97d1fd9a9dbfcf53c002 (patch)
tree29f3ce195fbd0b8908cf555a544e8e4d4145515b
parentUpdate parsers: astro, c, haskell, t32 (#4769) (diff)
downloadnvim-treesitter-864b4171de82772323ab97d1fd9a9dbfcf53c002.tar
nvim-treesitter-864b4171de82772323ab97d1fd9a9dbfcf53c002.tar.gz
nvim-treesitter-864b4171de82772323ab97d1fd9a9dbfcf53c002.tar.bz2
nvim-treesitter-864b4171de82772323ab97d1fd9a9dbfcf53c002.tar.lz
nvim-treesitter-864b4171de82772323ab97d1fd9a9dbfcf53c002.tar.xz
nvim-treesitter-864b4171de82772323ab97d1fd9a9dbfcf53c002.tar.zst
nvim-treesitter-864b4171de82772323ab97d1fd9a9dbfcf53c002.zip
feat: add swift indents (#4756)
-rw-r--r--queries/swift/indents.scm87
-rw-r--r--tests/indent/swift/declarations.swift51
-rw-r--r--tests/indent/swift/expressions.swift17
-rw-r--r--tests/indent/swift/statements.swift34
-rw-r--r--tests/indent/swift_spec.lua21
5 files changed, 210 insertions, 0 deletions
diff --git a/queries/swift/indents.scm b/queries/swift/indents.scm
new file mode 100644
index 000000000..4207a788b
--- /dev/null
+++ b/queries/swift/indents.scm
@@ -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
diff --git a/tests/indent/swift/declarations.swift b/tests/indent/swift/declarations.swift
new file mode 100644
index 000000000..a6f576ef2
--- /dev/null
+++ b/tests/indent/swift/declarations.swift
@@ -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
+ }
+}
diff --git a/tests/indent/swift/expressions.swift b/tests/indent/swift/expressions.swift
new file mode 100644
index 000000000..4f7292a69
--- /dev/null
+++ b/tests/indent/swift/expressions.swift
@@ -0,0 +1,17 @@
+func Test() {
+ (1 + 2)
+
+ [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5
+ ].split()
+
+ let x = [
+ 1: 2,
+ 3: 4,
+ ]
+
+}
diff --git a/tests/indent/swift/statements.swift b/tests/indent/swift/statements.swift
new file mode 100644
index 000000000..df6e46c94
--- /dev/null
+++ b/tests/indent/swift/statements.swift
@@ -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
+ )
+}
diff --git a/tests/indent/swift_spec.lua b/tests/indent/swift_spec.lua
new file mode 100644
index 000000000..6ba0d2cf0
--- /dev/null
+++ b/tests/indent/swift_spec.lua
@@ -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)