Skip to content

Releases: tidyverse/reprex

reprex 2.1.0

11 Jan 09:13
Compare
Choose a tag to compare
  • reprex() no longer includes the full traceback by default, as this is
    only useful in relatively rare situations, and otherwise adds a bunch
    of clutter (#448).

  • The unexported prex_*() functions protect the current session from option
    changes coming from reprex's own machinery, such as disabling color (#427).

reprex 2.0.2

17 Aug 14:11
Compare
Choose a tag to compare
  • The ad placed by reprex(advertise = TRUE) has been tweaked for venue = "gh" (and, therefore, for its aliases "so" and "ds") and venue = "slack" (#395).

  • reprex takes advantage of rlang 1.0.0's improved support for backtraces in knitted documents and sets the option rlang_backtrace_on_error_report = "full" (#377).

  • reprex_rtf() (a shortcut for reprex(venue = "rtf")) now works on Windows, even if one of the (possibly temporary) filepaths contains a space, e.g. because the username contains a space (#409, @cderv).

  • The RStudio addin no longer displays a warning about condition length when
    selecting 'current file' as the reprex source (#391, @Bisaloo).

  • Internal matters:

    • Help files below man/ have been re-generated, so that they give rise to
      valid HTML5. (This is the impetus for this release, to keep the package
      safely on CRAN.)
    • reprex's condition signalling has been updated to use the current approaches
      provided by the cli, rlang, and lifecycle packages.

reprex 2.0.1

05 Aug 05:14
Compare
Choose a tag to compare

reprex_document() has been adjusted for compatibility with changes introduced in Pandoc 2.13 around YAML headers (#375, #383 @cderv).

reprex_rtf() (and the unexported prex_rtf()) work again.
One of the filepaths involved in the highlight call was broken, but now it's not (#379).

The unexported prex_*() functions once again write their files to a temporary directory, as opposed to current working directory (#380).

reprex 2.0.0

02 Apr 19:08
Compare
Choose a tag to compare

When the clipboard isn't available

We've made reprex more pleasant to use in settings where we cannot access the user's clipboard from R.
Specifically, this applies to use on RStudio Server and RStudio Cloud.

  • When reprex() is called without expr or input, in a context where the
    user's clipboard can't be reached from R, the default is now to consult the
    current selection for reprex source. Previously this was only available via
    the reprex_selection() addin. Note that this "current selection" default
    behaviour propagates to convenience wrappers around reprex(), such as
    reprex_locale() and venue-specific functions like reprex_r(), and to the
    un-reprex() functions, such as reprex_clean().
  • In this context, the file containing the (un)rendered reprex is opened so the
    user can manually copy its contents.

Filepaths

wd is a new argument to set the reprex working directory.
As a result, the outfile argument is deprecated and the input argument has new significance.
Here's how to use input and wd to control reprex filepaths:

  • To reprex in the current working directory,
    Previously: reprex(outfile = NA)
    Now: reprex(wd = ".")
    More generally, usage looks like reprex(wd = "path/to/desired/wd").
  • If you really care about reprex filename (and location), write your source to
    path/to/stuff.R and call reprex(input = "path/to/stuff.R"). When input
    is a filepath, that filepath determines the working directory and how reprex
    files are named and wd is never even consulted.

Various changes mean that more users will see reprex filepaths.
Therefore, we've revised them to be more self-explanatory and human-friendly.
When reprex needs to invent a file name, it is now based on a random "adjective-animal" slug.
Bring on the angry-hamster!

.Rprofile

reprex() renders the reprex in a separate, fresh R session using callr::r().
As of callr 3.4.0 (released 2019-12-09), the default became callr::r(..., user_profile = "project"), which means that callr executes a .Rprofile found in current working directory.
Most reprexes happen in a temp directory and there will be no such .Rprofile.
But if the user intentionally reprexes in an existing project with a .Rprofile, callr::r() and therefore reprex() honor it.
In this version of reprex:

  • We explicitly make sure that the working directory of the callr::r() call is
    the same as the effective working directory of the reprex.
  • We alert the user that a local .Rprofile has been found.
  • We indicate the usage of a local .Rprofile in the rendered reprex.

These changes are of special interest to users of the renv package, which uses .Rprofile to implement a project-specific R package library.
Combined with the filepath changes (described above), this means an renv user can call reprex(wd = "."), to render a reprex with respect to a project-specific library.

Other

HTML preview should work better with more ways of using reprex_render(), i.e. usage that doesn't come via a call to reprex() (#293).

Dependency changes

  • rstudioapi moves from Suggests to Imports. Related to improving the experience
    when reprex cannot access the user's clipboard.

  • mockr is new in Suggests; it's used in the tests.

  • We bumped the documented minimum version of Pandoc, because we use the gfm
    markdown variant to get GitHub-Flavored Markdown. The gfm variant was
    introduced in Pandoc 2.0 (released 2017-10-29).

reprex 1.0.0

27 Jan 15:55
Compare
Choose a tag to compare

Venues

  • reprex_VENUE(...) is a new way to call reprex(..., venue = "VENUE"). For example, reprex_r() is equivalent to reprex(venue = "r"). This makes non-default venues easier to access via auto-completion (#256).

  • venue = "so" (SO = Stack Overflow) has converged with default venue = "gh" (GitHub). As of January 2019, SO supports CommonMark fenced code blocks. The only remaining difference is that Stack Overflow does not support the collapsible details tag that we use on GitHub to reduce the clutter from, e.g., session info (#231).

  • "rtf" (Rich Text Format) is a new experimental venue for pasting into applications like PowerPoint and Keynote. It is experimental because it requires a working installation of the highlight command line tool, which is left as a somewhat fiddly exercise for the user (#331). venue = "rtf" is documented in its own article.

  • reprex.current_venue is a new read-only option that is set during reprex_render(). Other packages can use it to generate reprex()-compatible, venue-aware output, such as an renv lockfile.

Implementation and internals

  • reprex() has been internally refactored to make better use of the official
    machinery for extending rmarkdown:

    • reprex_document() is a new R Markdown output format.
    • reprex_render() is a newly exported function.
    • A reprex_document() is designed to be rendered with reprex_render().
      reprex_render() is designed to act on a reprex_document(). This is
      (still) the heart of what the reprex() function does, in addition to
      various interface and workflow niceties.
    • Two R Markdown templates ship with the package, which an RStudio user can
      access via File > New File > R Markdown ... > From Template. One is
      minimal; the other uses lots of reprex features. Both include
      knit: reprex::reprex_render in the YAML, which causes the RStudio "Knit"
      button to use reprex_render().
  • prex(), prex_VENUE(), and prex_render() are new unexported functions that, like reprex(), render a small bit of code, but with much less reproducibility! The code is evaluated in the global workspace of the current process, with the current working directory. This pragmatic hack is useful when preparing a series of related snippets, e.g., for a Keynote or PowerPoint presentation, and there's not enough space to make each one self-contained.

  • UTF-8 encoding: Following the lead of knitr, reprex makes explicit use of UTF-8 internally (#237 @krlmlr, #261).

  • When the reprex causes R to crash, reprex(std_out_err = TRUE) is able to provide more information about the crash, in some cases (#312).

Other changes and improvements

  • The tidyverse_quiet argument and reprex.tidyverse_quiet option also control startup messages from the tidymodels meta-package (#326, @juliasilge).

  • reprex_locale() is a new thin wrapper around reprex() that renders in a temporarily-altered locale (#250).

  • The si argument of reprex() is now session_info. Being explicit seems more important than saving characters, given auto-completion.

  • The show argument of reprex() is now html_preview, for the sake of consistency with other R Markdown output formats.

  • New article on techniques for making package startup quieter (#187, @marionlouveaux).

Dependency changes

R 3.1 and R 3.2 are no longer explicitly supported or tested. Our general practice is to support the current release (4.0, at time of writing), devel, and the 4 previous versions of R (3.6, 3.5, 3.4, 3.3).

  • sessioninfo is new in Suggests, replacing devtools.

  • glue is new in Imports, replacing whisker.

  • knitr moves from Suggests to Imports (although it was already a hard dependency via rmarkdown), so we can require v1.23 or higher, which represents a major switch to UTF-8.

  • cli is new in Imports.

  • reprex now relies on testthat >= 3.0.0 and, specifically, uses third edition features.

v0.3.0

16 May 23:01
Compare
Choose a tag to compare
  • The crayon.enabled option is explicitly set to FALSE when rendering the reprex (#238, #239).

  • Expression input is once again captured via substitute() (as opposed to rlang::enexpr()), which is more favorable for reprexes involving tidy eval (#241).

  • New venue "html" to render HTML fragments, useful for pasting in sites without markdown but that allow HTML (#236 @cwickham).

  • The YAML of reprex's template has been updated in light of the stricter YAML parser used in Pandoc >= 2.2.2.

  • rlang::set_attrs() has been soft-deprecated and is no longer used internally.

v0.2.1

16 Sep 15:58
Compare
Choose a tag to compare
  • The reprex ad is formatted as superscript for venue = "gh" and venue = "so", i.e. it is more subtle (#201).

  • New experimental venue "rtf" produces syntax highlighted snippets suitable for pasting into presentation software such as Keynote or PowerPoint. This venue is discussed in an article (#26).

  • Arguments opts_chunk and opts_knit have been removed from reprex(). The same effect has always been achievable via roxygen comments in the reprex code and the examples have always demonstrated this. Overriding knitr options doesn't seem to come up often enough in real-world reprex() usage to justify these arguments.

  • Internal file system operations use the fs package. This should not make any user-facing changes in reprex and we definitely want to know if it does.

v0.2.0

23 Jun 14:06
Compare
Choose a tag to compare

reprex 0.2.0

reprex has a website: http://reprex.tidyverse.org. It includes a contributed article from @njtierney (#103).

reprex has moved to the tidyverse Organization. It is installed as part of the tidyverse meta-package and is suggested to those seeking help.

reprex() gains several arguments and many arguments can now be controlled via an option, in case a user wants their own defaults.

The new reprex_selection() add-in reprexes the current selection, with venue controlled by the option reprex.venue. It can be handy to bind to a keyboard shortcut (#84 @hadley).

If reprex can't write to the user's clipboard (e.g. on RStudio server or Unix-like systems lacking xclip or xsel), it offers to open the output file for manual copy.

Option-controlled arguments for custom defaults

These look like reprex(..., arg = opt(DEFAULT), ...) in the help file. This is shorthand for arg = getOption("reprex.arg", DEFAULT), i.e. the option reprex.arg is consulted and, if unset, the documented default is used. Allows user to define their own default behaviour (#116).

New arguments to reprex():

  • advertise: toggles inclusion of a footer that describes when and how the reprex was created, e.g., "Created on 2017-11-16 by the reprex package (v0.1.1.9000)". Defaults to TRUE (#121, #69).
  • style: requests code restyling via the newly-Suggested styler package. styler can cope with tidyeval syntactical sugar, e.g. df %>% group_by(!! group_var). Defaults to FALSE (#108, #94).
  • tidyverse_quiet: affords control of the startup message of the tidyverse meta-package. Defaults to TRUE, i.e. suppresses the message (important special case of #70, #100).
  • std_out_err: appends output sent to stdout and stderr by the reprex rendering process. This can be necessary to reveal output if the reprex spawns child processes or has system() calls. Defaults to FALSE (#90, #110).
  • render: determines if the reprex is actually rendered or just returns after producing the templated .R file. For internal testing.

Venues

  • Line wrapping is preserved from source via a Pandoc option (#145 @jimhester, #175).

  • venue = "gh" now targets CommonMark as the standard for GitHub Flavored Markdown (#77).

  • venue = "so" has appropriate whitespace at the start.

  • venue = "ds" is a new value, corresponding to https://www.discourse.org, which is the platform behind community.rstudio.com. This is currently just an alias for the default "gh" GitHub venue, because the formatting appears to be compatible. Adding the "ds" value so Discourse can be documented and to guard against the possibility that some formatting is actually unique.

Other changes

  • The keep.source option is set to TRUE when rendering the reprex, so reprexes involving srcrefs should work (#152).

  • The "undo" functions (reprex_invert(), reprex_clean(), reprex_rescue()) handle input and outfile like reprex() does. The outfile argument is new (#129, #68).

  • The default value for knitr's upload.fun is now set according to the venue. It is knitr::imgur_upload() for all venues except "r", where it is identity (#125).

  • The HTML preview should appear in the RStudio Viewer more consistently, especially on Windows (#75 @yutannihilation).

  • More rigorous use of UTF-8 encoding (#76 @yutannihilation).

  • Expression input handling has been refactored. As a result, formatR is no longer Suggested. Trailing comments -- inline and on their own line -- are also now retained (#89, #91, #114, @jennybc and @jimhester).

  • Custom prompts are now escaped when used in regexes (#98, #99 @jimhester). Embedded newlines are now escaped.

v0.1.1

13 Jan 03:22
Compare
Choose a tag to compare

Patch release to add Pandoc to SystemRequirements

v0.1.0

10 Jan 18:26
Compare
Choose a tag to compare

Initial CRAN release