rlang 1.1.0
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
ofpurrr::list_flatten()
andpurrr::list_c()
. -
child_env()
is deprecated in favour ofenv()
which has supported
creating child environments for several years now.
Main new features
-
last_error()
andoptions(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()
, andlast_messages()
now
support knitr documents. -
New
rlang_backtrace_on_warning_report
global option. This is
useful in conjunction withglobal_entrace()
to get backtraces on
warnings inside RMarkdown documents. -
global_entrace()
andentrace()
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()
, andinform()
gain an.inherit
parameter.
This controls whetherparent
is inherited. IfFALSE
,
cnd_inherits()
andtry_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 toFALSE
(#1573). -
try_fetch()
now looks up condition classes across chained errors
(#1534). This makestry_fetch()
insensitive to changes of
implementation or context of evaluation that cause a classed error
to suddenly get chained to a contextual error. -
englue()
gainedenv
,error_arg
, anderror_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()
andcheck_logical()
functions in
standalone-types-check.R
(#1587, @mgirlich). -
Added
allow_infinite
argument tocheck_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()
instandalone-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 functionR_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()
andr_lgl_which()
helpers are now faster
(#1577, with contributions from @mgirlich). -
rlang is now compliant with
-Wstrict-prototypes
as requested by CRAN
(#1508).