Skip to content

rlang 1.1.0

Compare
Choose a tag to compare
@lionel- lionel- released this 14 Mar 09:19
· 86 commits to main since this release

Life cycle changes

  • dots_splice() is deprecated. This function was previously in
    the questioning lifecycle stage as we were moving towards the
    explicit !!! splicing style.

  • flatten(), squash(), and their variants are deprecated in favour
    of purrr::list_flatten() and purrr::list_c().

  • child_env() is deprecated in favour of env() which has supported
    creating child environments for several years now.

Main new features

  • last_error() and options(rlang_backtrace_on_error = "full") now
    print the full backtrace tree by default (except for some hidden
    frames). The simplified backtraces tended to hide important context
    too often. Now we show intervening frames in a lighter colour so
    that they don't distract from the important parts of the backtraces
    but are still easily inspectable.

  • global_entrace(), last_warnings(), and last_messages() now
    support knitr documents.

  • New rlang_backtrace_on_warning_report global option. This is
    useful in conjunction with global_entrace() to get backtraces on
    warnings inside RMarkdown documents.

  • global_entrace() and entrace() now stop entracing warnings and
    messages after 20 times. This is to avoid a large overhead when 100s
    or 1000s of warnings are signalled in a loop (#1473).

  • abort(), warn(), and inform() gain an .inherit parameter.
    This controls whether parent is inherited. If FALSE,
    cnd_inherits() and try_fetch() do not match chained conditions
    across parents.

    It's normally TRUE by default, but if a warning is chained to an
    error or a message is chained to a warning or error (downgraded
    chaining), .inherit defaults to FALSE (#1573).

  • try_fetch() now looks up condition classes across chained errors
    (#1534). This makes try_fetch() insensitive to changes of
    implementation or context of evaluation that cause a classed error
    to suddenly get chained to a contextual error.

  • englue() gained env, error_arg, and error_call arguments to
    support being wrapped in another function (#1565).

  • The data-masking documentation for arguments has been imported from
    dplyr. You can link to it by starting an argument documentation with
    this button:

    <[`data-masking`][rlang::args_data_masking]>
    
  • enquos() and friends gain a .ignore_null argument (#1450).

  • New env_is_user_facing() function to determine if an evaluation
    frame corresponds to a direct usage by the end user (from the global
    environment or a package being tested) or indirect usage by a third
    party function. The return value can be overridden by setting the
    "rlang_user_facing" global option.

Miscellaneous fixes and features

  • New check_data_frame() and check_logical() functions in
    standalone-types-check.R (#1587, @mgirlich).

  • Added allow_infinite argument to check_number_whole() (#1588, @mgirlich).

  • The lifecycle standalone file has been updated to match the modern
    lifecycle tools.

  • parse_expr() now supports vectors of lines (#1540).

  • Quosures can now be consistently concatenated to lists of quosures (#1446).

  • Fixed a memory issue that caused excessive duplication in list2()
    and friends (#1491).

  • Embraced empty arguments are now properly detected and trimmed by
    quos() (#1421).

  • Fixed an edge case that caused enquos(.named = NULL) to return a
    named list (#1505).

  • expr_deparse() now deparses the embrace operator {{ on a single
    line (#1511).

  • zap_srcref() has been rewritten in C for efficiency (#1513).

  • zap_srcref() now supports expression vectors.

  • The non-error path of check_dots_unnamed() has been rewritten in C
    for efficiency (#1528).

  • Improved error messages in englue() (#1531) and in glue strings in
    the LHS of := (#1526).

  • englue() now requires size 1 outputs (#1492). This prevents
    surprising errors or inconsistencies when an interpolated input of
    size != 1 makes its way into the glue string.

  • arg_match() now throws correct error when supplied a missing value
    or an empty vector (#1519).

  • is_integerish() now handles negative doubles more consistently
    with positive ones (@sorhawell, #1530).

  • New check_logical() in standalone-types-check.R (#1560).

  • quo_squash() now squashes quosures in function position (#1509).

  • is_expression() now recognises quoted functions (#1499).
    It now also recognises non-parsable attributes (#1475).

  • obj_address() now supports the missing argument (#1521).

  • Fixed a check_installed() issue with packages removed during the
    current R session (#1561).

  • new_data_mask() is now slightly faster due to a smaller initial mask size
    and usage of the C level function R_NewEnv() on R >=4.1.0 (#1553).

  • The C level r_dyn_*_push_back() utilities are now faster (#1542).

  • The C level r_lgl_sum() and r_lgl_which() helpers are now faster
    (#1577, with contributions from @mgirlich).

  • rlang is now compliant with -Wstrict-prototypes as requested by CRAN
    (#1508).