Unnamed repository; edit this file 'description' to name the repository.
Add Prolog tree-sitter grammar (#11611)
Max 11 months ago
parent d0c5a20 · commit 1fc19c6
-rw-r--r--book/src/generated/lang-support.md2
-rw-r--r--languages.toml4
-rw-r--r--runtime/queries/prolog/folds.scm6
-rw-r--r--runtime/queries/prolog/highlights.scm43
-rw-r--r--runtime/queries/prolog/indents.scm12
-rw-r--r--runtime/queries/prolog/injections.scm2
6 files changed, 68 insertions, 1 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index c76c4841..dbd2f1bf 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -175,7 +175,7 @@
| ponylang | ✓ | ✓ | ✓ | |
| powershell | ✓ | | | |
| prisma | ✓ | ✓ | | `prisma-language-server` |
-| prolog | | | | `swipl` |
+| prolog | ✓ | | ✓ | `swipl` |
| protobuf | ✓ | ✓ | ✓ | `buf`, `pb`, `protols` |
| prql | ✓ | | | |
| purescript | ✓ | ✓ | | `purescript-language-server` |
diff --git a/languages.toml b/languages.toml
index 045868c5..36ae6f62 100644
--- a/languages.toml
+++ b/languages.toml
@@ -1501,6 +1501,10 @@ comment-token = "%"
block-comment-tokens = { start = "/*", end = "*/" }
language-servers = [ "swipl" ]
+[[grammar]]
+name = "prolog"
+source = { git = "https://codeberg.org/foxy/tree-sitter-prolog", subpath = "grammars/prolog", rev = "d8d415f6a1cf80ca138524bcc395810b176d40fa" }
+
[[language]]
name = "tsq"
scope = "source.tsq"
diff --git a/runtime/queries/prolog/folds.scm b/runtime/queries/prolog/folds.scm
new file mode 100644
index 00000000..70a40151
--- /dev/null
+++ b/runtime/queries/prolog/folds.scm
@@ -0,0 +1,6 @@
+[
+ (directive_term)
+ (clause_term)
+ (arg_list)
+ (list_notation)
+] @fold
diff --git a/runtime/queries/prolog/highlights.scm b/runtime/queries/prolog/highlights.scm
new file mode 100644
index 00000000..e496a88a
--- /dev/null
+++ b/runtime/queries/prolog/highlights.scm
@@ -0,0 +1,43 @@
+(comment) @comment
+
+(atom) @constant
+
+((atom) @constant.builtin.boolean
+ (#any-of? @constant.builtin.boolean "true" "false"))
+
+(functional_notation
+ function: (atom) @function)
+
+(integer) @constant.numeric.integer
+
+(float_number) @constant.numeric.float
+
+(directive_head) @operator
+
+(operator_notation
+ operator: _ @operator)
+
+[
+ (open)
+ (open_ct)
+ (close)
+ (open_list)
+ "|"
+ (close_list)
+ (open_curly)
+ (close_curly)
+] @punctuation.bracket
+
+[
+ (arg_list_separator)
+ (comma)
+ (end)
+ (list_notation_separator)
+] @punctuation.delimiter
+
+(operator_notation
+ operator: (semicolon) @punctuation.delimiter)
+
+(double_quoted_list_notation) @string
+
+(variable_term) @variable
diff --git a/runtime/queries/prolog/indents.scm b/runtime/queries/prolog/indents.scm
new file mode 100644
index 00000000..335d06bb
--- /dev/null
+++ b/runtime/queries/prolog/indents.scm
@@ -0,0 +1,12 @@
+(functional_notation
+ (atom)
+ (open_ct) @indent
+ (close) @outdent)
+
+(list_notation
+ (open_list) @indent
+ (close_list) @outdent)
+
+(curly_bracketed_notation
+ (open_curly) @indent
+ (close_curly) @outdent)
diff --git a/runtime/queries/prolog/injections.scm b/runtime/queries/prolog/injections.scm
new file mode 100644
index 00000000..2f0e58eb
--- /dev/null
+++ b/runtime/queries/prolog/injections.scm
@@ -0,0 +1,2 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))