[bug#66836,v2] gnu: Add tree-sitter-yaml.

Message ID 75280a68b4a63e51c429b5747a5bb27760f5dccb.1699099224.git.hako@ultrarare.space
State New
Headers
Series [bug#66836,v2] gnu: Add tree-sitter-yaml. |

Commit Message

Hilton Chain Nov. 4, 2023, 12:22 p.m. UTC
  From: Emma Turner <mail@emturner.co.uk>

* gnu/packages/patches/tree-sitter-yaml-fix-tests.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/tree-sitter.scm (tree-sitter-yaml): New variable.

Modified-by: Hilton Chain <hako@ultrarare.space>
Change-Id: I45a4a843ecee9dfa580eeaa352f1354915f83881
---
 gnu/local.mk                                  |   1 +
 .../patches/tree-sitter-yaml-fix-tests.patch  | 690 ++++++++++++++++++
 gnu/packages/tree-sitter.scm                  |  15 +
 3 files changed, 706 insertions(+)
 create mode 100644 gnu/packages/patches/tree-sitter-yaml-fix-tests.patch


base-commit: 9dcd8802f5bc472579f23a38dcf437f8a9ac976c
  

Comments

Hilton Chain Nov. 12, 2023, 3:02 p.m. UTC | #1
Hi Emma,

Tests currently fail on aarch64-linux[1], which can be reproduced with
`./pre-inst-env guix build tree-sitter-yaml --system=aarch64-linux`.

Any ideas?

On Sat, 04 Nov 2023 20:22:10 +0800,
Hilton Chain wrote:
>
> From: Emma Turner <mail@emturner.co.uk>
>
> * gnu/packages/patches/tree-sitter-yaml-fix-tests.patch: New file.
> * gnu/local.mk (dist_patch_DATA): Register it.
> * gnu/packages/tree-sitter.scm (tree-sitter-yaml): New variable.
>
> Modified-by: Hilton Chain <hako@ultrarare.space>
> Change-Id: I45a4a843ecee9dfa580eeaa352f1354915f83881
> ---
>  gnu/local.mk                                  |   1 +
>  .../patches/tree-sitter-yaml-fix-tests.patch  | 690 ++++++++++++++++++
>  gnu/packages/tree-sitter.scm                  |  15 +
>  3 files changed, 706 insertions(+)
>  create mode 100644 gnu/packages/patches/tree-sitter-yaml-fix-tests.patch

Thanks
---
[1]:
https://bordeaux.guix.gnu.org/build/206a6c33-c95a-4f7f-8e15-30e7b5662634/log
--8<---------------cut here---------------start------------->8---
--- expected / +++ actual

  1. Spec Example 9.3. Bare Documents:

    (stream
      (document
        (flow_node
          (plain_scalar
            (string_scalar))))
      (comment)
      (document)
      (document
        (block_node
+++       (block_scalar)))
+++   (MISSING _eof))
---       (block_scalar))))


  2. Spec Example 9.5. Directives Documents:

    (stream
      (document
        (yaml_directive
          (yaml_version))
        (block_node
          (block_scalar)))
+++   (MISSING _eof))
---   (document
---     (yaml_directive
---       (yaml_version))
---     (comment)))


  3. Zero indented block scalar:

    (stream
      (document
        (block_node
+++       (block_scalar)))
+++   (MISSING _eof))
---       (block_scalar))))


  4. Zero indented block scalar with line that looks like a comment:

    (stream
      (document
        (block_node
+++       (block_scalar)))
+++   (MISSING _eof))
---       (block_scalar))))
--8<---------------cut here---------------end--------------->8---
  
Olivier Rojon Feb. 25, 2025, 10:04 p.m. UTC | #2
Hello everyone,

soo.... it has been a while since there has been some activity.  I have checked and
couldn't find another effort to get tree-sitter-yaml packaged (that is, no duplicates).

Did anyone of you have spare time to look more into this?  I am very intersted to get this
package into the guix codebase, and it seems there has been more recent activity not only
in the original repository (https://github.com/ikatyang/tree-sitter-yaml), but even more
recently, there has been activity in another repository which is a fork of the original
one (https://github.com/tree-sitter-grammars/tree-sitter-yaml).

I have spent a short amount of time trying to get either of them to package, but that
didn't result in any tangible results (all attempts failed, I didn't know what the problem
was, I gave up).

However, I'd be motivated to try to get it done together, so if any of you is on board,
let's get it on ;-)

Have a good day, fellows :-)

Hilton Chain <hako@ultrarare.space> writes:

> Hi Emma,
>
> Tests currently fail on aarch64-linux[1], which can be reproduced with
> `./pre-inst-env guix build tree-sitter-yaml --system=aarch64-linux`.
>
> Any ideas?
>
> On Sat, 04 Nov 2023 20:22:10 +0800,
> Hilton Chain wrote:
>>
>> From: Emma Turner <mail@emturner.co.uk>
>>
>> * gnu/packages/patches/tree-sitter-yaml-fix-tests.patch: New file.
>> * gnu/local.mk (dist_patch_DATA): Register it.
>> * gnu/packages/tree-sitter.scm (tree-sitter-yaml): New variable.
>>
>> Modified-by: Hilton Chain <hako@ultrarare.space>
>> Change-Id: I45a4a843ecee9dfa580eeaa352f1354915f83881
>> ---
>>  gnu/local.mk                                  |   1 +
>>  .../patches/tree-sitter-yaml-fix-tests.patch  | 690 ++++++++++++++++++
>>  gnu/packages/tree-sitter.scm                  |  15 +
>>  3 files changed, 706 insertions(+)
>>  create mode 100644 gnu/packages/patches/tree-sitter-yaml-fix-tests.patch
>
> Thanks
> ---
> [1]:
> https://bordeaux.guix.gnu.org/build/206a6c33-c95a-4f7f-8e15-30e7b5662634/log
>
> --- expected / +++ actual
>
>   1. Spec Example 9.3. Bare Documents:
>
>     (stream
>       (document
>         (flow_node
>           (plain_scalar
>             (string_scalar))))
>       (comment)
>       (document)
>       (document
>         (block_node
> +++       (block_scalar)))
> +++   (MISSING _eof))
> ---       (block_scalar))))
>
>
>   2. Spec Example 9.5. Directives Documents:
>
>     (stream
>       (document
>         (yaml_directive
>           (yaml_version))
>         (block_node
>           (block_scalar)))
> +++   (MISSING _eof))
> ---   (document
> ---     (yaml_directive
> ---       (yaml_version))
> ---     (comment)))
>
>
>   3. Zero indented block scalar:
>
>     (stream
>       (document
>         (block_node
> +++       (block_scalar)))
> +++   (MISSING _eof))
> ---       (block_scalar))))
>
>
>   4. Zero indented block scalar with line that looks like a comment:
>
>     (stream
>       (document
>         (block_node
> +++       (block_scalar)))
> +++   (MISSING _eof))
> ---       (block_scalar))))
  
Olivier Rojon March 2, 2025, 7:28 p.m. UTC | #3
Hej fellows,

I've tried for some time to get it packaged but rather quickly hit a road block because I
am simply not well versed in the domain.  Find below the code I managed to come up after a
bit of experimentation.

```
(define-public tree-sitter-yaml
  (tree-sitter-grammar
   "yaml" "YAML"
   "0z5fz9hiafzapi0ijhyz8np6rksq6c1pb16xv1vhnlfh75rg6zyv"
   "0.7.0"
   #:repository-url
   "https://github.com/tree-sitter-grammars/tree-sitter-yaml"))
```

Surprisingly, it started by downloading nodejs 22.10 which didn't happen for other
tree-sitter grammars I tried building for reference.  The build fails in the build phase,
this is the output:

```
starting phase `build'
/tmp/guix-build-tree-sitter-yaml-0.7.0.drv-0/source/grammar.js:674
  for (const [rule_name, rule] of Object.entries(grammar_json.rules)) {
                                                              ^

TypeError: Cannot read properties of undefined (reading 'rules')
    at global_alias (/tmp/guix-build-tree-sitter-yaml-0.7.0.drv-0/source/grammar.js:674:63)
    at Object.<anonymous> (/tmp/guix-build-tree-sitter-yaml-0.7.0.drv-0/source/grammar.js:566:39)
    at Module._compile (node:internal/modules/cjs/loader:1565:14)
    at Object..js (node:internal/modules/cjs/loader:1708:10)
    at Module.load (node:internal/modules/cjs/loader:1318:32)
    at Function._load (node:internal/modules/cjs/loader:1128:12)
    at TracingChannel.traceSync (node:diagnostics_channel:322:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:219:24)
    at Module.require (node:internal/modules/cjs/loader:1340:12)
    at require (node:internal/modules/helpers:138:16)

Node.js v22.12.0
Node process exited with status 1
error: in phase 'build': uncaught exception:
%exception #<&invoke-error program: "tree-sitter" arguments: ("generate" "--no-bindings") exit-status: 
phase `build' failed after 0.0 seconds
command "tree-sitter" "generate" "--no-bindings" failed with status 1
build process 18 exited with status 256
builder for `/gnu/store/mhslv5phv7yic1rv91pq4kiqyhkzgvi1-tree-sitter-yaml-0.7.0.drv' failed with exit c
build of /gnu/store/mhslv5phv7yic1rv91pq4kiqyhkzgvi1-tree-sitter-yaml-0.7.0.drv failed
Could not find build log for '/gnu/store/mhslv5phv7yic1rv91pq4kiqyhkzgvi1-tree-sitter-yaml-0.7.0.drv'.
guix build: error: build of `/gnu/store/mhslv5phv7yic1rv91pq4kiqyhkzgvi1-tree-sitter-yaml-0.7.0.drv' fa
```

I also tried building the newest commit from the originally mentioned repository:
https://github.com/ikatyang/tree-sitter-yaml.  This initially looks more promising but
then there is several errors regarding indentation and some other INVALID entries which
also results in a build failure.

I am afraid this is what I have to offer when it comes to trying to support the packaging
endeavour.  Maybe someone of you guys knows more about tree-sitter grammars than I do and
can chime in.

Have a good day,
Olivier

Olivier Rojon <o.rojon@posteo.net> writes:

> Hello everyone,
>
> soo.... it has been a while since there has been some activity.  I have checked and
> couldn't find another effort to get tree-sitter-yaml packaged (that is, no duplicates).
>
> Did anyone of you have spare time to look more into this?  I am very intersted to get this
> package into the guix codebase, and it seems there has been more recent activity not only
> in the original repository (https://github.com/ikatyang/tree-sitter-yaml), but even more
> recently, there has been activity in another repository which is a fork of the original
> one (https://github.com/tree-sitter-grammars/tree-sitter-yaml).
>
> I have spent a short amount of time trying to get either of them to package, but that
> didn't result in any tangible results (all attempts failed, I didn't know what the problem
> was, I gave up).
>
> However, I'd be motivated to try to get it done together, so if any of you is on board,
> let's get it on ;-)
>
> Have a good day, fellows :-)
>
> Hilton Chain <hako@ultrarare.space> writes:
>
>> Hi Emma,
>>
>> Tests currently fail on aarch64-linux[1], which can be reproduced with
>> `./pre-inst-env guix build tree-sitter-yaml --system=aarch64-linux`.
>>
>> Any ideas?
>>
>> On Sat, 04 Nov 2023 20:22:10 +0800,
>> Hilton Chain wrote:
>>>
>>> From: Emma Turner <mail@emturner.co.uk>
>>>
>>> * gnu/packages/patches/tree-sitter-yaml-fix-tests.patch: New file.
>>> * gnu/local.mk (dist_patch_DATA): Register it.
>>> * gnu/packages/tree-sitter.scm (tree-sitter-yaml): New variable.
>>>
>>> Modified-by: Hilton Chain <hako@ultrarare.space>
>>> Change-Id: I45a4a843ecee9dfa580eeaa352f1354915f83881
>>> ---
>>>  gnu/local.mk                                  |   1 +
>>>  .../patches/tree-sitter-yaml-fix-tests.patch  | 690 ++++++++++++++++++
>>>  gnu/packages/tree-sitter.scm                  |  15 +
>>>  3 files changed, 706 insertions(+)
>>>  create mode 100644 gnu/packages/patches/tree-sitter-yaml-fix-tests.patch
>>
>> Thanks
>> ---
>> [1]:
>> https://bordeaux.guix.gnu.org/build/206a6c33-c95a-4f7f-8e15-30e7b5662634/log
>>
>> --- expected / +++ actual
>>
>>   1. Spec Example 9.3. Bare Documents:
>>
>>     (stream
>>       (document
>>         (flow_node
>>           (plain_scalar
>>             (string_scalar))))
>>       (comment)
>>       (document)
>>       (document
>>         (block_node
>> +++       (block_scalar)))
>> +++   (MISSING _eof))
>> ---       (block_scalar))))
>>
>>
>>   2. Spec Example 9.5. Directives Documents:
>>
>>     (stream
>>       (document
>>         (yaml_directive
>>           (yaml_version))
>>         (block_node
>>           (block_scalar)))
>> +++   (MISSING _eof))
>> ---   (document
>> ---     (yaml_directive
>> ---       (yaml_version))
>> ---     (comment)))
>>
>>
>>   3. Zero indented block scalar:
>>
>>     (stream
>>       (document
>>         (block_node
>> +++       (block_scalar)))
>> +++   (MISSING _eof))
>> ---       (block_scalar))))
>>
>>
>>   4. Zero indented block scalar with line that looks like a comment:
>>
>>     (stream
>>       (document
>>         (block_node
>> +++       (block_scalar)))
>> +++   (MISSING _eof))
>> ---       (block_scalar))))
  
Nicolas Graves March 3, 2025, 12:22 p.m. UTC | #4
This version seems to compile on my side : 

(define-public tree-sitter-yaml
  (tree-sitter-grammar
   "yaml" "YAML"
   "0z5fz9hiafzapi0ijhyz8np6rksq6c1pb16xv1vhnlfh75rg6zyv" "0.7.0"
   #:grammar-directories '("schema/core" "schema/json")
   #:get-cleanup-snippet
   (lambda _
     #~(begin
         (use-modules (guix build utils))
         (delete-file-recursively "bindings")))))

Haven't tried it in real conditions though ;)
  

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 8d817379a7..a5b5afd84b 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2045,6 +2045,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/tofi-32bit-compat.patch			\
   %D%/packages/patches/tpetra-remove-duplicate-using.patch	\
   %D%/packages/patches/transcode-ffmpeg.patch	\
+  %D%/packages/patches/tree-sitter-yaml-fix-tests.patch	\
   %D%/packages/patches/trytond-add-egg-modules-to-path.patch	\
   %D%/packages/patches/trytond-add-guix_trytond_path.patch	\
   %D%/packages/patches/ttf2eot-cstddef.patch			\
diff --git a/gnu/packages/patches/tree-sitter-yaml-fix-tests.patch b/gnu/packages/patches/tree-sitter-yaml-fix-tests.patch
new file mode 100644
index 0000000000..c658729bab
--- /dev/null
+++ b/gnu/packages/patches/tree-sitter-yaml-fix-tests.patch
@@ -0,0 +1,690 @@ 
+From 67e0bec12812921672776cf2dd8dfa79e27f6360 Mon Sep 17 00:00:00 2001
+From: Emma Turner <mail@emturner.co.uk>
+Date: Sun, 29 Oct 2023 16:40:30 +0000
+Subject: [PATCH] fix tests for tree-sitter 0.20.8
+
+---
+ corpus/spec.txt | 492 +++++++++++++++++++-----------------------------
+ 1 file changed, 194 insertions(+), 298 deletions(-)
+
+diff --git a/corpus/spec.txt b/corpus/spec.txt
+index ca75d12..8b64bc4 100644
+--- a/corpus/spec.txt
++++ b/corpus/spec.txt
+@@ -654,23 +654,16 @@ map:
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          value: (block_node
+-            (block_mapping
+-              (block_mapping_pair
+-                key: (flow_node
+-                  (plain_scalar
+-                    (string_scalar)))
+-                value: (flow_node
+-                  (double_quote_scalar)))
+-              (ERROR))))))))
++(ERROR
++  (flow_node
++    (plain_scalar
++      (string_scalar)))
++  (block_mapping_pair
++    key: (flow_node
++      (plain_scalar
++        (string_scalar)))
++    value: (flow_node
++      (double_quote_scalar))))
+ 
+ ================================================================================
+ Bad indentation in mapping [INVALID]
+@@ -981,17 +974,13 @@ block scalar: >
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          value: (block_node
+-            (block_scalar)))
+-        (ERROR)))))
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (plain_scalar
++        (string_scalar)))
++    value: (block_node
++      (block_scalar))))
+ 
+ ================================================================================
+ Block Sequence in Block Mapping
+@@ -1212,19 +1201,15 @@ key: word1
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          value: (flow_node
+-            (plain_scalar
+-              (string_scalar))))
+-        (comment)
+-        (ERROR)))))
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (plain_scalar
++        (string_scalar)))
++    value: (flow_node
++      (plain_scalar
++        (string_scalar))))
++  (comment))
+ 
+ ================================================================================
+ Comment that looks like a mapping key [INVALID]
+@@ -1234,22 +1219,18 @@ this is #not a: key
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          value: (flow_node
+-            (plain_scalar
+-              (string_scalar))))
+-        (ERROR
+-          (flow_node
+-            (plain_scalar
+-              (string_scalar))))
+-        (comment)))))
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (plain_scalar
++        (string_scalar)))
++    value: (flow_node
++      (plain_scalar
++        (string_scalar))))
++  (flow_node
++    (plain_scalar
++      (string_scalar)))
++  (comment))
+ 
+ ================================================================================
+ Comment without whitespace after block scalar indicator [INVALID]
+@@ -1415,15 +1396,10 @@ key: "missing closing quote
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar))))
+-        (ERROR)))))
++(ERROR
++  (flow_node
++    (plain_scalar
++      (string_scalar))))
+ 
+ ================================================================================
+ Doublequoted scalar starting with a tab
+@@ -2116,8 +2092,10 @@ Invalid document markers in flow style [INVALID]
+ 
+ --------------------------------------------------------------------------------
+ 
+-(ERROR
+-  (string_scalar))
++(stream
++  (ERROR)
++  (document)
++  (MISSING _eof))
+ 
+ ================================================================================
+ Invalid document-end marker in single quoted string [INVALID]
+@@ -2192,8 +2170,7 @@ invalid: x
+         (string_scalar))))
+   (flow_node
+     (plain_scalar
+-      (string_scalar)))
+-  (string_scalar))
++      (string_scalar))))
+ 
+ ================================================================================
+ Invalid mapping in plain multiline [INVALID]
+@@ -2270,20 +2247,14 @@ invalid
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_sequence
+-        (block_sequence_item
+-          (flow_node
+-            (plain_scalar
+-              (string_scalar))))
+-        (block_sequence_item
+-          (flow_node
+-            (plain_scalar
+-              (string_scalar))))
+-        (ERROR
+-          (string_scalar))))))
++(ERROR
++  (block_sequence_item
++    (flow_node
++      (plain_scalar
++        (string_scalar))))
++  (flow_node
++    (plain_scalar
++      (string_scalar))))
+ 
+ ================================================================================
+ Invalid scalar at the end of mapping [INVALID]
+@@ -2295,28 +2266,24 @@ invalid
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
++(ERROR
++  (block_mapping_pair
++    (flow_node
++      (plain_scalar
++        (string_scalar)))
+     (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
++      (block_sequence
++        (block_sequence_item
++          (flow_node
+             (plain_scalar
+-              (string_scalar)))
+-          value: (block_node
+-            (block_sequence
+-              (block_sequence_item
+-                (flow_node
+-                  (plain_scalar
+-                    (string_scalar))))
+-              (block_sequence_item
+-                (flow_node
+-                  (plain_scalar
+-                    (string_scalar)))))))
+-        (ERROR
++              (string_scalar))))
++        (block_sequence_item
+           (flow_node
+             (plain_scalar
+-              (string_scalar))))))))
++              (string_scalar)))))))
++  (flow_node
++    (plain_scalar
++      (string_scalar))))
+ 
+ ================================================================================
+ Invalid scalar at the end of sequence [INVALID]
+@@ -2328,26 +2295,17 @@ key:
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          value: (block_node
+-            (block_sequence
+-              (block_sequence_item
+-                (flow_node
+-                  (plain_scalar
+-                    (string_scalar))))
+-              (block_sequence_item
+-                (flow_node
+-                  (plain_scalar
+-                    (string_scalar))))
+-              (ERROR
+-                (string_scalar)))))))))
++(ERROR
++  (flow_node
++    (plain_scalar
++      (string_scalar)))
++  (block_sequence_item
++    (flow_node
++      (plain_scalar
++        (string_scalar))))
++  (flow_node
++    (plain_scalar
++      (string_scalar))))
+ 
+ ================================================================================
+ Invalid sequene item on same line as previous item [INVALID]
+@@ -2420,21 +2378,17 @@ invalid
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          value: (flow_node
+-            (plain_scalar
+-              (string_scalar))))
+-        (ERROR
+-          (flow_node
+-            (plain_scalar
+-              (string_scalar))))))))
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (plain_scalar
++        (string_scalar)))
++    value: (flow_node
++      (plain_scalar
++        (string_scalar))))
++  (flow_node
++    (plain_scalar
++      (string_scalar))))
+ 
+ ================================================================================
+ Key with anchor after missing explicit mapping value
+@@ -2507,17 +2461,13 @@ block scalar: |
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          value: (block_node
+-            (block_scalar)))
+-        (ERROR)))))
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (plain_scalar
++        (string_scalar)))
++    value: (block_node
++      (block_scalar))))
+ 
+ ================================================================================
+ Literal unicode
+@@ -2647,27 +2597,23 @@ top2
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (plain_scalar
++        (string_scalar)))
++    value: (block_node
+       (block_mapping
+         (block_mapping_pair
+           key: (flow_node
+             (plain_scalar
+               (string_scalar)))
+-          value: (block_node
+-            (block_mapping
+-              (block_mapping_pair
+-                key: (flow_node
+-                  (plain_scalar
+-                    (string_scalar)))
+-                value: (flow_node
+-                  (plain_scalar
+-                    (string_scalar)))))))
+-        (ERROR
+-          (flow_node
++          value: (flow_node
+             (plain_scalar
+-              (string_scalar))))))))
++              (string_scalar)))))))
++  (flow_node
++    (plain_scalar
++      (string_scalar))))
+ 
+ ================================================================================
+ Missing comma in flow [INVALID]
+@@ -2678,19 +2624,14 @@ key: [ word1
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar))))
+-        (ERROR
+-          (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          (comment))))))
++(ERROR
++  (flow_node
++    (plain_scalar
++      (string_scalar)))
++  (flow_node
++    (plain_scalar
++      (string_scalar)))
++  (comment))
+ 
+ ================================================================================
+ Missing document-end marker before directive [INVALID]
+@@ -2703,17 +2644,11 @@ scalar2
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document)
+-  (ERROR
+-    (flow_node
+-      (plain_scalar
+-        (string_scalar)))
+-    (comment))
+-  (document
+-    (flow_node
+-      (plain_scalar
+-        (string_scalar)))))
++(ERROR
++  (flow_node
++    (plain_scalar
++      (string_scalar)))
++  (comment))
+ 
+ ================================================================================
+ Missing space in YAML directive
+@@ -2924,18 +2859,14 @@ Multiline double quoted implicit keys [INVALID]
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (double_quote_scalar
+-              (escape_sequence)))
+-          value: (flow_node
+-            (plain_scalar
+-              (integer_scalar))))
+-        (ERROR)))))
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (double_quote_scalar
++        (escape_sequence)))
++    value: (flow_node
++      (plain_scalar
++        (integer_scalar)))))
+ 
+ ================================================================================
+ Multiline doublequoted flow mapping key without value
+@@ -3207,17 +3138,13 @@ Multiline single quoted implicit keys [INVALID]
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (single_quote_scalar))
+-          value: (flow_node
+-            (plain_scalar
+-              (integer_scalar))))
+-        (ERROR)))))
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (single_quote_scalar))
++    value: (flow_node
++      (plain_scalar
++        (integer_scalar)))))
+ 
+ ================================================================================
+ Multiple Entry Block Sequence
+@@ -3529,19 +3456,16 @@ key: &x
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          value: (flow_node
+-            (anchor
+-              (anchor_name))))
+-        (ERROR
+-          (tag))))))
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (plain_scalar
++        (string_scalar)))
++    value: (flow_node
++      (anchor
++        (anchor_name))))
++  (flow_node
++    (tag)))
+ 
+ ================================================================================
+ Node and Mapping Key Anchors
+@@ -3922,40 +3846,34 @@ top2: &node2
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (plain_scalar
++        (string_scalar)))
++    value: (block_node
++      (anchor
++        (anchor_name))
+       (block_mapping
+         (block_mapping_pair
+           key: (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          value: (block_node
+             (anchor
+               (anchor_name))
+-            (block_mapping
+-              (block_mapping_pair
+-                key: (flow_node
+-                  (anchor
+-                    (anchor_name))
+-                  (plain_scalar
+-                    (string_scalar)))
+-                value: (flow_node
+-                  (plain_scalar
+-                    (string_scalar)))))))
+-        (block_mapping_pair
+-          key: (flow_node
+             (plain_scalar
+               (string_scalar)))
+           value: (flow_node
+-            (anchor
+-              (anchor_name))))
+-        (ERROR
+-          (flow_node
+-            (anchor
+-              (anchor_name))
+             (plain_scalar
+-              (string_scalar))))))))
++              (string_scalar)))))))
++  (flow_node
++    (plain_scalar
++      (string_scalar)))
++  (anchor
++    (anchor_name))
++  (flow_node
++    (anchor
++      (anchor_name))
++    (plain_scalar
++      (string_scalar))))
+ 
+ ================================================================================
+ Scalars on --- line
+@@ -8728,19 +8646,15 @@ plain: a
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          value: (flow_node
+-            (plain_scalar
+-              (string_scalar))))
+-        (comment)
+-        (ERROR)))))
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (plain_scalar
++        (string_scalar)))
++    value: (flow_node
++      (plain_scalar
++        (string_scalar))))
++  (comment))
+ 
+ ================================================================================
+ Trailing content after quoted value [INVALID]
+@@ -9607,20 +9521,13 @@ c]
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar))))
+-        (ERROR
+-          (flow_node
+-            (plain_scalar
+-              (string_scalar)))
+-          (string_scalar)
+-          (string_scalar))))))
++(ERROR
++  (flow_node
++    (plain_scalar
++      (string_scalar)))
++  (flow_node
++    (plain_scalar
++      (string_scalar))))
+ 
+ ================================================================================
+ Wrong indented multiline quoted scalar [INVALID]
+@@ -9632,17 +9539,10 @@ c"
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (document
+-    (block_node
+-      (block_mapping
+-        (block_mapping_pair
+-          key: (flow_node
+-            (plain_scalar
+-              (string_scalar))))
+-        (ERROR
+-          (string_scalar)
+-          (string_scalar))))))
++(ERROR
++  (flow_node
++    (plain_scalar
++      (string_scalar))))
+ 
+ ================================================================================
+ Wrong indented sequence item [INVALID]
+@@ -9671,18 +9571,14 @@ key: value
+ 
+ --------------------------------------------------------------------------------
+ 
+-(stream
+-  (ERROR
+-    (block_mapping_pair
+-      key: (flow_node
+-        (plain_scalar
+-          (string_scalar)))
+-      value: (flow_node
+-        (plain_scalar
+-          (string_scalar)))))
+-  (document
+-    (yaml_directive
+-      (yaml_version))))
++(ERROR
++  (block_mapping_pair
++    key: (flow_node
++      (plain_scalar
++        (string_scalar)))
++    value: (flow_node
++      (plain_scalar
++        (string_scalar)))))
+ 
+ ================================================================================
+ Zero indented block scalar
+
+base-commit: 6129a83eeec7d6070b1c0567ec7ce3509ead607c
+-- 
+2.41.0
+
diff --git a/gnu/packages/tree-sitter.scm b/gnu/packages/tree-sitter.scm
index 41257d42f1..f2bfff748b 100644
--- a/gnu/packages/tree-sitter.scm
+++ b/gnu/packages/tree-sitter.scm
@@ -7,6 +7,7 @@ 
 ;;; Copyright © 2023 Nicolas Graves <ngraves@ngraves.fr>
 ;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2023 Raven Hallsby <karl@hallsby.com>
+;;; Copyright © 2023 Emma Turner <mail@emturner.co.uk>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -629,3 +630,17 @@  (define-public tree-sitter-scala
    "scala" "Scala"
    "0hs6gmkq5cx9qrmgfz1mh0c34flwffc0k2mhwf13laawswnywfkz"
    "0.20.2"))
+
+(define-public tree-sitter-yaml
+  (let ((base (tree-sitter-grammar
+               "yaml" "Yaml"
+               "1bimf5fq85wn8dwlk665w15n2bj37fma5rsfxrph3i9yb0lvzi3q"
+               "0.5.0"
+               #:repository-url
+               "https://github.com/ikatyang/tree-sitter-yaml")))
+    (package
+      (inherit base)
+      (source (origin
+                (inherit (package-source base))
+                (patches
+                 (search-patches "tree-sitter-yaml-fix-tests.patch")))))))