diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index e997b3e81ccc..cf8e502363b8 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 d4ea9a8678c9..f78db21e4aa5 100644 --- a/languages.toml +++ b/languages.toml @@ -2208,6 +2208,19 @@ indent = { tab-width = 2, unit = " " } name = "yuck" source = { git = "https://github.com/Philipp-M/tree-sitter-yuck", rev = "9e97da5773f82123a8c8cccf8f7e795d140ed7d1" } +[[language]] +name = "prql" +scope = "source.yprql" +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" diff --git a/runtime/queries/prql/highlights.scm b/runtime/queries/prql/highlights.scm new file mode 100644 index 000000000000..5b28df153ab2 --- /dev/null +++ b/runtime/queries/prql/highlights.scm @@ -0,0 +1,140 @@ +[ + (keyword_from) + (keyword_filter) + (keyword_derive) + (keyword_group) + (keyword_aggregate) + (keyword_sort) + (keyword_take) + (keyword_window) + (keyword_join) + (keyword_select) + (keyword_switch) + (keyword_inner) + (keyword_right) + (keyword_full) + (keyword_in) + (keyword_rolling) + (keyword_rows) + (keyword_expanding) + (keyword_let) + (keyword_prql) + (keyword_switch) + (keyword_append) + (keyword_remove) + (keyword_intersect) +] @keyword + +(literal) @string + +(assignment + alias: (field) @field) + +alias: (identifier) @field + +(f_string) @string.special +(s_string) @string.special + +(comment) @comment + +(keyword_func) @keyword.function + +(function_call + (identifier) @function.call) + +[ + "+" + "-" + "*" + "/" + "=" + "==" + "<" + "<=" + "!=" + ">=" + ">" + "->" + (bang) +] @operator + +[ + "(" + ")" + "[" + "]" +] @punctuation.bracket + +[ + "," + "." + (pipe) +] @punctuation.delimiter + +(literal + (integer) @number) + +(integer) @number + +(literal + (decimal_number) @float) + +(decimal_number) @float + +[ + (keyword_min) + (keyword_max) + (keyword_count) + (keyword_count_distinct) + (keyword_average) + (keyword_avg) + (keyword_sum) + (keyword_stddev) + (keyword_count) +] @function.call + +[ + (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) +] @method + +[ + (keyword_true) + (keyword_false) +] @boolean + +[ + (keyword_and) + (keyword_or) +] @keyword.operator + +(function_definition + (keyword_func) + name: (identifier) @function) + +(parameter + (identifier) @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 000000000000..f3ca44103f8b --- /dev/null +++ b/runtime/queries/prql/injections.scm @@ -0,0 +1,11 @@ +( + (s_string) @sql + (#offset! @sql 0 2 0 -1) +) + +(from_text + (keyword_from_text) + (keyword_json) + (literal) @json + (#offset! @json 0 3 0 -3) +)