summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml13
-rw-r--r--runtime/queries/prql/highlights.scm136
-rw-r--r--runtime/queries/prql/injections.scm8
4 files changed, 158 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index e997b3e8..cf8e5023 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -104,6 +104,7 @@
| prisma | ✓ | | | `prisma-language-server` |
| prolog | | | | `swipl` |
| protobuf | ✓ | | ✓ | |
+| prql | ✓ | | | |
| purescript | ✓ | | | `purescript-language-server` |
| python | ✓ | ✓ | ✓ | `pylsp` |
| qml | ✓ | | ✓ | `qmlls` |
diff --git a/languages.toml b/languages.toml
index 006db633..b0a34be0 100644
--- a/languages.toml
+++ b/languages.toml
@@ -2209,6 +2209,19 @@ name = "yuck"
source = { git = "https://github.com/Philipp-M/tree-sitter-yuck", rev = "9e97da5773f82123a8c8cccf8f7e795d140ed7d1" }
[[language]]
+name = "prql"
+scope = "source.prql"
+injection-regex = "prql"
+file-types = ["prql"]
+roots = []
+comment-token = "#"
+indent = { tab-width = 4, unit = " " }
+
+[[grammar]]
+name = "prql"
+source = { git = "https://github.com/PRQL/tree-sitter-prql", rev = "3f27cac466f030ee7d985d91eba5470e01dd21ea" }
+
+[[language]]
name = "po"
scope = "source.po"
file-types = ["po", "pot"]
diff --git a/runtime/queries/prql/highlights.scm b/runtime/queries/prql/highlights.scm
new file mode 100644
index 00000000..5cfedee4
--- /dev/null
+++ b/runtime/queries/prql/highlights.scm
@@ -0,0 +1,136 @@
+[
+ (keyword_from)
+ (keyword_filter)
+ (keyword_derive)
+ (keyword_group)
+ (keyword_aggregate)
+ (keyword_sort)
+ (keyword_take)
+ (keyword_window)
+ (keyword_join)
+ (keyword_select)
+ (keyword_switch)
+ (keyword_append)
+ (keyword_remove)
+ (keyword_intersect)
+ (keyword_rolling)
+ (keyword_rows)
+ (keyword_expanding)
+ (keyword_let)
+ (keyword_prql)
+ (keyword_from_text)
+] @keyword
+
+(literal) @string
+
+(assignment
+ alias: (field) @variable.other.member)
+
+alias: (identifier) @variable.other.member
+
+(f_string) @string.special
+(s_string) @string.special
+
+(comment) @comment
+
+(keyword_func) @keyword.function
+
+(function_call
+ (identifier) @function)
+
+[
+ "+"
+ "-"
+ "*"
+ "/"
+ "="
+ "=="
+ "<"
+ "<="
+ "!="
+ ">="
+ ">"
+ "->"
+ (bang)
+] @operator
+
+[
+ "("
+ ")"
+ "["
+ "]"
+] @punctuation.bracket
+
+[
+ ","
+ "."
+ (pipe)
+] @punctuation.delimiter
+
+(literal
+ (integer) @constant.numeric.integer)
+
+(integer) @constant.numeric.integer
+
+(literal
+ (decimal_number) @constant.numeric.float)
+
+(decimal_number) @constant.numeric.float
+
+[
+ (keyword_min)
+ (keyword_max)
+ (keyword_count)
+ (keyword_count_distinct)
+ (keyword_average)
+ (keyword_avg)
+ (keyword_sum)
+ (keyword_stddev)
+ (keyword_count)
+] @function
+
+[
+ (keyword_side)
+ (keyword_version)
+ (keyword_target)
+ (keyword_null)
+ (keyword_format)
+] @attribute
+
+(target) @function.builtin
+
+ [
+ (date)
+ (time)
+ (timestamp)
+] @string.special
+
+[
+ (keyword_left)
+ (keyword_inner)
+ (keyword_right)
+ (keyword_full)
+ (keyword_csv)
+ (keyword_json)
+] @function.method
+
+[
+ (keyword_true)
+ (keyword_false)
+] @constant.builtin.boolean
+
+[
+ (keyword_and)
+ (keyword_or)
+] @keyword.operator
+
+(function_definition
+ (keyword_func)
+ name: (identifier) @function)
+
+(parameter
+ (identifier) @variable.parameter)
+
+(variable
+ (keyword_let)
+ name: (identifier) @constant)
diff --git a/runtime/queries/prql/injections.scm b/runtime/queries/prql/injections.scm
new file mode 100644
index 00000000..02a8919f
--- /dev/null
+++ b/runtime/queries/prql/injections.scm
@@ -0,0 +1,8 @@
+((s_string) @injection.content
+ (#set! injection.language "sql"))
+
+(from_text
+ (keyword_from_text)
+ (keyword_json)
+ (literal) @injection.content
+ (#set! injection.language "json"))