From 1fc19c6d8e1d4eeeb6d3afad56e4f92d2c2c3af1 Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 6 Apr 2025 16:43:53 +0000 Subject: [PATCH] Add Prolog tree-sitter grammar (#11611) --- book/src/generated/lang-support.md | 2 +- languages.toml | 4 +++ runtime/queries/prolog/folds.scm | 6 ++++ runtime/queries/prolog/highlights.scm | 43 +++++++++++++++++++++++++++ runtime/queries/prolog/indents.scm | 12 ++++++++ runtime/queries/prolog/injections.scm | 2 ++ 6 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 runtime/queries/prolog/folds.scm create mode 100644 runtime/queries/prolog/highlights.scm create mode 100644 runtime/queries/prolog/indents.scm create mode 100644 runtime/queries/prolog/injections.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index c76c48413..dbd2f1bfd 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 045868c50..36ae6f626 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 000000000..70a401511 --- /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 000000000..e496a88a2 --- /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 000000000..335d06bbb --- /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 000000000..2f0e58eb6 --- /dev/null +++ b/runtime/queries/prolog/injections.scm @@ -0,0 +1,2 @@ +((comment) @injection.content + (#set! injection.language "comment"))