languageserver
languageserver copied to clipboard
VSCode outline fails in Rmarkdown document if there is pseudo chunk text inside the chunks
trafficstars
I know this is a specific case.
I am building functions inside a Rmarkdown document, which builds chunks.
I remarked that, as soon as there is 3 backticks in my code, the VSCode document outline is not displayed.
Here is a reprex.
With this code, there is no outline available in VSCode, near the Rmd name
---
title: "test vscode"
output: html_document
author: statnmap
---
```{r development, include=FALSE}
library(testthat)
```
# combine_tbl_to_file
```{r function}
#' Create R code chunk content
#' @return A character string of R code chunk content
#' @noRd
create_r_chunk <- function() {
paste(
"```{r}",
"```",
sep = "\n"
)
}
cat(create_r_chunk())
```
As soon as I remove the paste with backticks, the outline is correct:
---
title: "test vscode"
output: html_document
author: statnmap
---
```{r development, include=FALSE}
library(testthat)
```
# combine_tbl_to_file
```{r function}
#' Create R code chunk content
#' @return A character string of R code chunk content
#' @noRd
create_r_chunk <- function() {
paste(
"",
sep = "\n"
)
}
cat(create_r_chunk())
```
Maybe the parsing you use to detect chunks can be a little more restrictive, and only considering chunks when there is nothing or spaces before the backticks ?
You could maybe use patterns used by {knitr}:
r$> knitr:::all_patterns$md
$chunk.begin
[1] "^[\t >]*```+\\s*\\{([a-zA-Z0-9_]+( *[ ,].*)?)\\}\\s*$"
$chunk.end
[1] "^[\t >]*```+\\s*$"
$ref.chunk
[1] "^\\s*<<(.+)>>\\s*$"
$inline.code
[1] "(?<!(^``))(?<!(\n``))`r[ #]([^`]+)\\s*`"