Convert R parse data to XML

Description

In recent R versions the parser can attach source code location information to the parsed expressions. This information is often useful for static analysis, e.g. code linting. It can be accessed via the getParseData function.

Usage

1
xml_parse_data(x, includeText = NA, pretty = FALSE)

Arguments

x

an expression returned from parse, or a function or other object with source reference information

includeText

logical; whether to include the text of parsed items in the result

pretty

Whether to pretty-indent the XML output. It has a small overhead which probably only matters for very large source files.

Details

xml_parse_data converts this information to an XML tree. The R parser's token names are preserved in the XML as much as possible, but some of them are not valid XML tag names, so they are renamed, see the xml_parse_token_map vector for the mapping.

The top XML tag is <exprlist>, which is a list of expressions, each expression is an <expr> tag. Each tag has attributes that define the location: line1, col1, line2, col2. These are from the getParseData data frame column names.

See an example below. See also the README at https://github.com/MangoTheCat/xmlparsedata#readme for examples on how to search the XML tree with the xml2 package and XPath expressions.

Value

An XML string representing the parse data. See details below.

See Also

xml_parse_token_map for the token names. https://github.com/MangoTheCat/xmlparsedata#readme for more information and use cases.

Examples

1
2
3
4
5
6
7
code <- "function(a = 1, b = 2) {\n  a + b\n}\n"
expr <- parse(text = code, keep.source = TRUE)

# The base R way:
getParseData(expr)

cat(xml_parse_data(expr, pretty = TRUE))