Skip to content

ts_tree_dom() prints the document object model (DOM) tree of a ts_tree object. This tree only includes semantic elements. E.g. for a JSON(C) document it includes objects, arrays and various value types, but not the syntax elements like brackets, commas or colons.

Available tree-sitter parsers

This is the manual page of the ts_tree_dom() S3 generic function. Methods in parser packages may override this generic. For the ones that do see the links to their manual pages in the table.

PackageVersionTitleMethod
tsjsonc0.0.0.9000Edit JSON Files.
tstoml0.0.0.9000Edit TOML files.

Usage

ts_tree_dom(tree)

Arguments

tree

A ts_tree object.

Value

Character vector, the formatted annotated syntax tree, line by line. It has class cli_tree, from the cli package. It may contain ANSI escape sequences for coloring and hyperlinks.

Details

The syntax tree and the DOM tree

See ts_tree_ast() for the complete tree-sitter syntax tree that includes all nodes, including syntax elements like brackets and commas.

 

tree <- ts_parse_jsonc("{ \"a\": true, \"b\": [1, 2, 3] }")

 

ts_tree_ast(tree)

#> document (1)                   1|
#> └─object (2)                    |
#>   ├─{ (3)                       |{
#>   ├─pair (4)                    |
#>   │ ├─string (5)                |
#>   │ │ ├─" (6)                   |  "
#>   │ │ ├─string_content (7)      |   a
#>   │ │ └─" (8)                   |    "
#>   │ ├─: (9)                     |     :
#>   │ └─true (10)                 |       true
#>   ├─, (11)                      |           ,
#>   ├─pair (12)                   |
#>   │ ├─string (13)               |
#>   │ │ ├─" (14)                  |             "
#>   │ │ ├─string_content (15)     |              b
#>   │ │ └─" (16)                  |               "
#>   │ ├─: (17)                    |                :
#>   │ └─array (18)                |
#>   │   ├─[ (19)                  |                  [
#>   │   ├─number (20)             |                   1
#>   │   ├─, (21)                  |                    ,
#>   │   ├─number (22)             |                      2
#>   │   ├─, (23)                  |                       ,
#>   │   ├─number (24)             |                         3
#>   │   └─] (25)                  |                          ]
#>   └─} (26)                      |                            }

 

ts_tree_dom(tree)

#> document (1)
#> └─object (2)
#>   ├─true (10) # a
#>   └─array (18) # b
#>     ├─number (20)
#>     ├─number (22)
#>     └─number (24)

Examples

# Create a parse tree with tsjsonc -------------------------------------
tree <- tsjsonc::ts_parse_jsonc('{"foo": 42, "bar": [1, 2, 3]}')

tree
#> # jsonc (1 line)
#> 1 | {"foo": 42, "bar": [1, 2, 3]}

ts_tree_ast(tree)
#> document (1)                   1|
#> └─object (2)                    |
#>   ├─{ (3)                       |{
#>   ├─pair (4)                    |
#>   │ ├─string (5)                |
#>   │ │ ├─" (6)                   | "
#>   │ │ ├─string_content (7)      |  foo
#>   │ │ └─" (8)                   |     "
#>   │ ├─: (9)                     |      :
#>   │ └─number (10)               |        42
#>   ├─, (11)                      |          ,
#>   ├─pair (12)                   |
#>   │ ├─string (13)               |
#>   │ │ ├─" (14)                  |            "
#>   │ │ ├─string_content (15)     |             bar
#>   │ │ └─" (16)                  |                "
#>   │ ├─: (17)                    |                 :
#>   │ └─array (18)                |
#>   │   ├─[ (19)                  |                   [
#>   │   ├─number (20)             |                    1
#>   │   ├─, (21)                  |                     ,
#>   │   ├─number (22)             |                       2
#>   │   ├─, (23)                  |                        ,
#>   │   ├─number (24)             |                          3
#>   │   └─] (25)                  |                           ]
#>   └─} (26)                      |                            }

ts_tree_dom(tree)
#> document (1)
#> └─object (2)
#>   ├─number (10) # foo
#>   └─array (18) # bar
#>     ├─number (20)
#>     ├─number (22)
#>     └─number (24)

# Create a parse tree with tstoml --------------------------------------
tree <- tstoml::ts_parse_toml(r"(
  title = "TOML Example"
  [owner]
  name = "Tom Preston-Werner"
  dob = 1979-05-27T07:32:00-08:00
)")

tree
#> # toml (5 lines)
#> 1 | 
#> 2 |   title = "TOML Example"
#> 3 |   [owner]
#> 4 |   name = "Tom Preston-Werner"
#> 5 |   dob = 1979-05-27T07:32:00-08:00

ts_tree_ast(tree)
#> document (1)                           1|
#> ├─pair (2)                             2|
#> │ ├─bare_key (3)                        |  title
#> │ ├─= (4)                               |        =
#> │ └─string (5)                          |
#> │   └─basic_string (6)                  |
#> │     ├─" (7)                           |          "
#> │     ├─basic_string_content (8)        |           TOML Example
#> │     └─" (9)                           |                       "
#> └─table (10)                           3|
#>   ├─[ (11)                              |  [
#>   ├─bare_key (12)                       |   owner
#>   ├─] (13)                              |        ]
#>   ├─pair (14)                          4|
#>   │ ├─bare_key (15)                     |  name
#>   │ ├─= (16)                            |       =
#>   │ └─string (17)                       |
#>   │   └─basic_string (18)               |
#>   │     ├─" (19)                        |         "
#>   │     ├─basic_string_content (20)     |          Tom Preston-Werner
#>   │     └─" (21)                        |                            "
#>   └─pair (22)                          5|
#>     ├─bare_key (23)                     |  dob
#>     ├─= (24)                            |      =
#>     └─offset_date_time (25)             |        1979-05-27T07:32:00-08:00

ts_tree_dom(tree)
#> document (1)
#> ├─value (5) # title
#> └─table (10) # owner
#>   ├─value (17) # name
#>   └─value (25) # dob