From c12123ea5b1c912059dddb2df571215d90280dbb Mon Sep 17 00:00:00 2001
From: Christoph Horn <christoph-horn@hotmail.de>
Date: Fri, 4 Nov 2022 13:13:30 +0100
Subject: [PATCH] Update Julia grammar, queries

---
 languages.toml                       |  2 +-
 runtime/queries/julia/highlights.scm | 42 ++++++++++++++++++++++++----
 runtime/queries/julia/locals.scm     |  3 +-
 3 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/languages.toml b/languages.toml
index 061d141449d2..41558e10e9ad 100644
--- a/languages.toml
+++ b/languages.toml
@@ -604,7 +604,7 @@ indent = { tab-width = 4, unit = "    " }
 
 [[grammar]]
 name = "julia"
-source = { git = "https://github.com/tree-sitter/tree-sitter-julia", rev = "fc60b7cce87da7a1b7f8cb0f9371c3dc8b684500" }
+source = { git = "https://github.com/tree-sitter/tree-sitter-julia", rev = "8fb38abff74652c4faddbf04d2d5bbbc6b4bae25" }
 
 [[language]]
 name = "java"
diff --git a/runtime/queries/julia/highlights.scm b/runtime/queries/julia/highlights.scm
index 9271615fbb1b..90baee21355d 100644
--- a/runtime/queries/julia/highlights.scm
+++ b/runtime/queries/julia/highlights.scm
@@ -7,13 +7,22 @@
   (block_comment)
 ] @comment
 
-(((identifier) @constant.builtin) (match? @constant.builtin "^(nothing|missing|Inf|NaN)$"))
-(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "true"))
-(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "false"))
+(
+  ((identifier) @constant.builtin)
+  (#match? @constant.builtin "^(nothing|missing|undef)$"))
+
+[
+  (true)
+  (false)
+] @constant.builtin.boolean
 
 (integer_literal) @constant.numeric.integer
 (float_literal) @constant.numeric.float
 
+(
+  ((identifier) @constant.numeric.float)
+  (#match? @constant.numeric.float "^((Inf|NaN)(16|32|64)?)$"))
+
 (character_literal) @constant.character
 (escape_sequence) @constant.character.escape
 
@@ -66,7 +75,7 @@
 (type_parameter_list
   (identifier) @type)
 
-(constrained_parameter
+(constrained_type_parameter
   (identifier) @type)
   
 (subtype_clause
@@ -81,13 +90,32 @@
 (type_argument_list
   (identifier) @type)
 
+(where_clause
+  (identifier) @type)
+
 ; -------------------
 ; Function definition
 ; -------------------
 
 (
   (function_definition
-    name: (identifier) @function)
+    name: [
+      (identifier) @function
+      (scoped_identifier
+        (identifier) @namespace
+        (identifier) @function)
+    ])
+  ; prevent constructors (PascalCase) to be highlighted as functions
+  (#match? @function "^[^A-Z]"))
+
+(
+  (short_function_definition
+    name: [
+      (identifier) @function
+      (scoped_identifier
+        (identifier) @namespace
+        (identifier) @function)
+    ])
   ; prevent constructors (PascalCase) to be highlighted as functions
   (#match? @function "^[^A-Z]"))
 
@@ -101,7 +129,7 @@
 (optional_parameter
   . (identifier) @variable.parameter)
 
-(spread_parameter
+(slurp_parameter
   (identifier) @variable.parameter)
 
 (function_expression
@@ -185,6 +213,7 @@
 
 [
   "abstract"
+  "baremodule"
   "begin"
   "const"
   "do"
@@ -198,6 +227,7 @@
   "return"
   "struct"
   "type"
+  "where"
 ] @keyword
 
 ; TODO: fix this
diff --git a/runtime/queries/julia/locals.scm b/runtime/queries/julia/locals.scm
index 07b96f2c66e1..70b31e50924b 100644
--- a/runtime/queries/julia/locals.scm
+++ b/runtime/queries/julia/locals.scm
@@ -21,7 +21,7 @@
 (optional_parameter .
   (identifier) @local.definition)
 
-(spread_parameter
+(slurp_parameter
   (identifier) @local.definition)
 
 (function_expression
@@ -33,6 +33,7 @@
 
 [
   (function_definition)
+  (short_function_definition)
   (macro_definition)
 ] @local.scope