changeset 5794:85398c9df217

Update Swift Grammar and Queries (#10802)
author Arturs Krumins <auth@levitatingpineapple.com>
date Fri, 07 Jun 2024 19:29:42 +0200
parents 268bf8c443db
children 5d854645898c
files book/src/generated/lang-support.md languages.toml runtime/queries/swift/highlights.scm runtime/queries/swift/injections.scm runtime/queries/swift/locals.scm runtime/queries/swift/textobjects.scm
diffstat 6 files changed, 80 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/book/src/generated/lang-support.md	Fri Jun 07 12:02:27 2024 +0800
+++ b/book/src/generated/lang-support.md	Fri Jun 07 19:29:42 2024 +0200
@@ -190,7 +190,7 @@
 | supercollider | ✓ |  |  |  |
 | svelte | ✓ |  | ✓ | `svelteserver` |
 | sway | ✓ | ✓ | ✓ | `forc` |
-| swift | ✓ |  |  | `sourcekit-lsp` |
+| swift | ✓ | ✓ |  | `sourcekit-lsp` |
 | t32 | ✓ |  |  |  |
 | tablegen | ✓ | ✓ | ✓ |  |
 | tact | ✓ | ✓ | ✓ |  |
--- a/languages.toml	Fri Jun 07 12:02:27 2024 +0800
+++ b/languages.toml	Fri Jun 07 19:29:42 2024 +0200
@@ -1908,16 +1908,17 @@
 name = "swift"
 scope = "source.swift"
 injection-regex = "swift"
-file-types = ["swift"]
+file-types = ["swift", "swiftinterface"]
 roots = [ "Package.swift" ]
 comment-token = "//"
 block-comment-tokens = { start = "/*", end = "*/" }
+formatter = { command = "swift-format", args = [ "--configuration", ".swift-format"] }
 auto-format = true
 language-servers = [ "sourcekit-lsp" ]
 
 [[grammar]]
 name = "swift"
-source = { git = "https://github.com/alex-pinkus/tree-sitter-swift", rev = "b1b66955d420d5cf5ff268ae552f0d6e43ff66e1" }
+source = { git = "https://github.com/alex-pinkus/tree-sitter-swift", rev = "57c1c6d6ffa1c44b330182d41717e6fe37430704" }
 
 [[language]]
 name = "erb"
--- a/runtime/queries/swift/highlights.scm	Fri Jun 07 12:02:27 2024 +0800
+++ b/runtime/queries/swift/highlights.scm	Fri Jun 07 19:29:42 2024 +0200
@@ -1,4 +1,4 @@
-; Upstream: https://github.com/alex-pinkus/tree-sitter-swift/blob/1c586339fb00014b23d6933f2cc32b588a226f3b/queries/highlights.scm
+; Upstream: https://github.com/alex-pinkus/tree-sitter-swift/blob/57c1c6d6ffa1c44b330182d41717e6fe37430704/queries/highlights.scm
 
 (line_string_literal
   ["\\(" ")"] @punctuation.special)
@@ -10,6 +10,7 @@
 (attribute) @variable
 (type_identifier) @type
 (self_expression) @variable.builtin
+(user_type (type_identifier) @variable.builtin (#eq? @variable.builtin "Self"))
 
 ; Declarations
 "func" @keyword.function
@@ -23,7 +24,9 @@
 ] @keyword
 
 (function_declaration (simple_identifier) @function.method)
-(function_declaration "init" @constructor)
+(init_declaration ["init" @constructor])
+(deinit_declaration ["deinit" @constructor])
+
 (throws) @keyword
 "async" @keyword
 "await" @keyword
@@ -48,10 +51,23 @@
   "override"
   "convenience"
   "required"
-  "some"
+  "mutating"
+  "associatedtype"
+  "package"
   "any"
 ] @keyword
 
+(opaque_type ["some" @keyword])
+(existential_type ["any" @keyword])
+
+(precedence_group_declaration
+ ["precedencegroup" @keyword]
+ (simple_identifier) @type)
+(precedence_group_attribute
+ (simple_identifier) @keyword
+ [(simple_identifier) @type
+  (boolean_literal) @constant.builtin.boolean])
+
 [
   (getter_specifier)
   (setter_specifier)
@@ -73,6 +89,10 @@
 ((navigation_expression
    (simple_identifier) @type) ; SomeType.method(): highlight SomeType as a type
    (#match? @type "^[A-Z]"))
+(call_expression (simple_identifier) @keyword (#eq? @keyword "defer")) ; defer { ... }
+
+(try_operator) @operator
+(try_operator ["try" @keyword])
 
 (directive) @function.macro
 (diagnostic) @function.macro
@@ -136,10 +156,8 @@
 
 ; Operators
 [
-  "try"
-  "try?"
-  "try!"
   "!"
+  "?"
   "+"
   "-"
   "*"
@@ -171,3 +189,8 @@
   "..."
   (custom_operator)
 ] @operator
+
+(value_parameter_pack ["each" @keyword])
+(value_pack_expansion ["repeat" @keyword])
+(type_parameter_pack ["each" @keyword])
+(type_pack_expansion ["repeat" @keyword])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/runtime/queries/swift/injections.scm	Fri Jun 07 19:29:42 2024 +0200
@@ -0,0 +1,6 @@
+; Upstream: https://github.com/alex-pinkus/tree-sitter-swift/blob/57c1c6d6ffa1c44b330182d41717e6fe37430704/queries/injections.scm
+
+; Parse regex syntax within regex literals
+
+((regex_literal) @injection.content
+ (#set! injection.language "regex"))
--- a/runtime/queries/swift/locals.scm	Fri Jun 07 12:02:27 2024 +0800
+++ b/runtime/queries/swift/locals.scm	Fri Jun 07 19:29:42 2024 +0200
@@ -1,7 +1,19 @@
-[
- (function_declaration)
-] @local.scope
+; Upstream: https://github.com/alex-pinkus/tree-sitter-swift/blob/57c1c6d6ffa1c44b330182d41717e6fe37430704/queries/locals.scm
+(import_declaration (identifier) @definition.import)
+(function_declaration name: (simple_identifier) @definition.function)
 
-(parameter name: (simple_identifier) @local.definition)
-
-(simple_identifier) @local.reference
+; Scopes
+[
+ (for_statement)
+ (while_statement)
+ (repeat_while_statement)
+ (do_statement)
+ (if_statement)
+ (guard_statement)
+ (switch_statement)
+ (property_declaration)
+ (function_declaration)
+ (class_declaration)
+ (protocol_declaration)
+ (lambda_literal)
+] @local.scope
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/runtime/queries/swift/textobjects.scm	Fri Jun 07 19:29:42 2024 +0200
@@ -0,0 +1,23 @@
+(class_declaration
+  body: (_) @class.inside) @class.around
+
+(protocol_declaration
+  body: (_) @class.inside) @class.around
+
+(function_declaration
+  body: (_) @function.inside) @function.around
+
+(parameter
+  (_) @parameter.inside) @parameter.around
+
+(lambda_parameter
+  (_) @parameter.inside) @parameter.around
+
+[
+  (comment)
+  (multiline_comment)
+] @comment.inside
+
+(comment)+ @comment.around
+
+(multiline_comment) @comment.around