Update dependency elixir to v1.16.2 #5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.11.1-otp-23->1.16.2Release Notes
elixir-lang/elixir (elixir)
v1.16.2Compare Source
1. Enhancements
Elixir
:defmoduletracing event on module definitionMix
Mix.install_project_dir/0Mix.install/2installationMix.SCM.delete/12. Bug fixes
Elixir
Path.relative_to/2dealt with "." as inputIEx
ExUnit
v1.16.1Compare Source
1. Bug fixes
Elixir
Code.quoted_to_algebra/2for operator with :do key as operandString.capitalize/1with a single codepointIEx
$HOMEis setMix
v1.16.0Compare Source
Official announcement: https://elixir-lang.org/blog/2023/12/22/elixir-v1-16-0-released/
1. Enhancements
EEx
Elixir
:emit_warningsforCode.string_to_quoted/2MismatchedDelimiterErrorfor handling mismatched delimiter exceptions\r\n:offsetoption toFile.stream!/2UndefinedFunctionErrorKernel.ParallelCompiler.pmap/2to compile multiple additional entries in parallelTrue/False/Nilare used as aliases and there is no such aliasMacro.compile_apply/4@nifsannotation from Erlang/OTP 25@dialyzerconfigurationString.replace_invalid/2:limitoption toTask.yield_many/2Logger
Logger.levels/0Mix
MIX_PROFILEto profile a list of comma separated tasks--sparseoption:applicationsand:extra_applicationsare used:detailswhen possiblelib/and one of them is changed--sparseoptioninclude/directory in releasesmix test test/foo_test.exs:13 test/bar_test.exs:272. Bug fixes
Elixir
Code.Fragment.surround_context/2when matching on->IO.binwrite/2on terminated device (mirroringIO.write/2)dbgmodule is a compile-time dependencyunquote/1and the function/macro itself is unusedElixir.in their definition@after_compilecallbacks to avoid deadlocksMacro.to_string/1for certain ASTsFile.cwd!/0inPath.expand/1andPath.absname/1Path.relative_to/2returns a relative path when the given argument does not share a common prefix withcwdExUnit
IEx
Mix
mix archive.installmix escript.install3. Soft deprecations (no warnings emitted)
Elixir
File.stream!(file, options, line_or_bytes)in favor of keeping the options as last argument, as inFile.stream!(file, line_or_bytes, options)Kernel.ParallelCompiler.async/1in favor ofKernel.ParallelCompiler.pmap/2Path.safe_relative_to/2in favor ofPath.safe_relative/2Mix
Mix.Task.Compiler.Diagnostic4. Hard deprecations
Elixir
Date.range/3with a negative step insteadEnum.slice/2, givefirst..last//1instead~R/.../is deprecated in favor of~r/.../. This is because~R/.../still allowed escape codes, which did not fit the definition of uppercase sigilsString.slice/2, givefirst..last//1insteadExUnit
format_time/2, useformat_times/1insteadMix
:leexto be added as a compiler to run theleexcompiler:yeccto be added as a compiler to run theyecccompilerv1.15.7Compare Source
1. Enhancements
Elixir
2. Bug fixes
EEx
Mix
Mix.Tasks.Format.formatter_for_file/2v1.15.6Compare Source
This release also includes fixes to the Windows installer.
1. Bug fixes
EEx
Elixir
*in bitstringsCode.quoted_to_algebra/2Mix
:extra_applicationsdeclare in umbrella projects are loadedv1.15.5Compare Source
1. Enhancements
IEx
2. Bug fixes
Elixir
Code.Fragment.surround_context/2for aliases and submodules of non-aliasesExUnit
IEx
Mix
blakeis always availablev1.15.4Compare Source
1. Bug fixes
Mix
v1.15.3Compare Source
1. Enhancements
Elixir
Mix
Mix.install/22. Bug fixes
Elixir
with_diagnosticspropagate warnings from inner Erlang passesIEx
--remshon Erlang/OTP 25 and earlierMix
__mix_recompile__?callbacks are properly invokedv1.15.2Compare Source
1. Bug fixes
IEx
v1.15.1Compare Source
1. Enhancements
Code.string_to_quoted/2honors:static_atoms_encoderfor multi-letter sigils2. Bug fixes
ExUnit
capture_logcapture_logcallsIEx
pryworks on Erlang/OTP 25 and earlier while IEx is bootingCode.Fragment.surround_contextconsiders surround context around spaces and parensLogger
:functionas metadataMix
mtime was successfully retrieved
--werlfrom release scripts on Erlang/OTP 26v1.15.0Compare Source
Official announcement: https://elixir-lang.org/blog/2023/06/19/elixir-v1-15-0-released/
1. Enhancements
EEx
Elixir
%s) toCalendar.strftime/2Code.format_string!/2now converts'charlists'into~c"charlists"by default:on_undefined_variableto the compiler options to preserve the warning behaviour which was deprecated back in Elixir v1.4Code.loaded?/1andCode.ensure_all_loaded(!)/1Code.prepend_paths/1,Code.append_paths/1, andCode.delete_paths/1Code.with_diagnostics/2to return diagnostics when compiling and evaluating codeCode.Fragment.cursor_context/1Code.Fragment.container_cursor_to_quoted/1Date.before?/2andDate.after?/2DateTime.before?/2andDateTime.after?/2DateTime.utc_now/2File.StreamInspectnow renders'charlists'as~c"charlists"by defaultcaseandcondinsidedbg/2t:nonempty_binary/0andt:nonempty_bitstring/0@behaviours as runtime dependencieserror: ...messages, similar towarning: ...Code.compiler_options(on_undefined_variable: :warn)at the top of yourmix.exs--sname undefined/--name undefinedso a name is automatically generatedKeyword.split_with/2Macro.Env.lookup_alias_as/2Map.split_with/2Map.intersect/2andMap.intersect/3MapSet.split_with/2NaiveDateTime.beginning_of_day/1andNaiveDateTime.end_of_day/1NaiveDateTime.before?/2andNaiveDateTime.after?/2NaiveDateTime.utc_now/2Module.get_last_attribute/3:return_separatoroptionProcess.alias/0,1andProcess.unalias/1Range.split/2:fast_asciimode toString.valid?/2Supervisor:linesinSystem.cmd/3to capture output line by lineTask.yield_many/2Task.Supervisor.start_child/2Time.before?/2andTime.after?/2URI.append_path/2ExUnit
{module, function}tuples in ExUnitsetupcallbacksExUnit.Case.get_last_registered_test/1ExUnit.DocTest.doctest_file/2doctest_datain doctest tagsIEx
--dbg pryIEX_HOMEalias,import, andrequireruntime_info(:allocators)Range,DateTime, andRegexLogger
Logger.add_handlers/1andLogger.default_formatter/1default_formatteranddefault_handlerconfiguration for Logger which configures Erlang/OTP logger:always_evaluate_messagesconfiguration to LoggerMix
:start_concurrentlyconfiguration--all-warningsby default@external_resourcesoptional_applicationsto.appfile--purge-consolidation-path-if-stalewhich will purge the given consolidation path if compilation is requiredmix deps.get/mix deps.update--check-lockedwhich raises if changes to the lockfile are required--no-exitoption--check-formattedfails--trace-to-fileto improve performance when working with large outputsevalcommand--outputflagdef clito unify all CLI defaults in a single placeMix.Project.deps_tree/12. Bug fixes
Elixir
Exception.blame/3File.cp/2File.rm_rf/1try/rescue...inside typespecsbehaviour_infoandmodule_infofunctions from Erlang modulesModule.get_attribute/3returnsniland not the given default value when an attribute has been explicitly set asnilSystem.stop/1executesURI.merge/2works accordingly with relative pathsExUnit
@tag capture_log: truewas set to true and the Logger application was shut down in the middle of the testsetup_allIEx
whenever the input reader was killed
Mix
cwdin compiler cache keyerlsrv.exein path with spacesmix xrefis used at the umbrella root3. Soft deprecations (no warnings emitted)
Elixir
File.cp/3andFile.cp_r/3with a function as third argumentis deprecated in favor of a keyword list
:return_diagnosticsoption to beset to true when compiling or requiring code
Logger
add_backend/2,remove_backend/2, andconfigure_backend/2have been deprecatedin favor of the new
:logger_backendsdependency:consoleconfiguration has been deprecated in favor of:default_formatter:backendsconfiguration has been deprecated in favor ofLogger.add_handlers/1Mix
:preferred_cli_envis deprecated in favor of:preferred_envsindef cli:preferred_cli_targetis deprecated in favor of:preferred_targetsindef cliHEX_MIRRORis deprecated in favor ofHEX_BUILDS_URL4. Hard deprecations
Elixir
Calendar.ISO.day_of_week/3is deprecated in favor ofCalendar.ISO.day_of_week/4Exception.exception?/1is deprecated in favor ofKernel.is_exception/1...as a valid function call identifierRegex.regex?/1is deprecated in favor ofKernel.is_struct/2Logger
Logger.warn/2is deprecated in favor ofLogger.warning/2v1.14.5Compare Source
This release contains fixes for Erlang/OTP 26.
Bug fixes
Elixir
Mix
v1.14.4Compare Source
This release adds basic support for Erlang/OTP 26. When migrating
to Erlang/OTP 26, keep it mind it changes how maps are stored
internally and they will be printed and traversed in a different
order (note maps never provided a guarantee of their order).
To aid migration, this release adds
:sort_mapstoinspectcustom options, in case you want to sort them before inspection:
Enhancements
Elixir
:sort_mapstoInspect.Opts.custom_optionsIEx
Mix
Bug fixes
Elixir
Code.quoted_to_string_with_comments/2debug_info/4when returning core_v1quote keep: trueto avoid invalid stacktracesStream.zip/1hanging on empty listMix
v1.14.3Compare Source
1. Enhancements
Elixir
ExUnit
2. Bug fixes
Elixir
Calendar.strftime/2is_struct/2guardsdefguardexpansiondefmoduleMacro.to_string/1for large negative integers__ENV__in macrosPath.wildcard/2expands..symlinks accordinglyRange.disjoint?/2implementationExUnit
v1.14.2Compare Source
1. Enhancements
Elixir
Code.eval_quoted_with_env/4with support for the:prune_bindingoptionExUnit
:doctestand:doctest_lineas meta tagsExUnit.Formatter.format_assertion_diff/4Mix
Mix.install/2accepts atoms as paths2. Bug fixes
Elixir
size*unitshortcut in bitstringdefguard:forin protocols with the appropriate envExUnit
ExUnit.run/1Mix
v1.14.1Compare Source
1. Enhancements
Elixir
Application.compile_env/3inside module attributesMacro.expand_literals/2andMacro.expand_literals/3:close_stdintoSystem.shell/2Mix
--all-warningsoption2. Bug fixes
Elixir
:uniqis given inforcomprehensions and the result is unused@enforce_keysattribute afterdefstructdeclaration:debug_infochunkMacro.to_string/2when converting an AST with:erlang.binary_to_atom/2String.split/3andString.next_grapheme/1returning invalid results on invalid UTF-8 encodingSystem.shell/2uri.portas:undefinedin certain cases inURI.new/1ExUnit
:moduledocand functions are specified in:onlyIEx
--no-pryis givenMix
.formatter.exsso they are properly re-evaluted on every callv1.14.0Compare Source
Elixir v1.14 brings many improvements to the debugging experience in Elixir
and data-type inspection. It also includes a new abstraction for easy
partitioning of processes called
PartitionSupervisor, as well as improvedcompilation times and error messages.
Elixir v1.14 is the last version to support Erlang/OTP 23. Consider updating
to Erlang/OTP 24 or Erlang/OTP 25.
dbgKernel.dbg/2is a new macro that's somewhat similar toIO.inspect/2, butspecifically tailored for debugging.
When called, it prints the value of whatever you pass to it, plus the debugged
code itself as well as its location. This code:
Prints this:
dbg/2can do more. It's a macro, so it understands Elixir code. You can seethat when you pass a series of
|>pipes to it.dbg/2will print the valuefor every step of the pipeline. This code:
Prints this:
IEx and Prying
dbg/2supports configurable backends. IEx automatically replaces the defaultbackend by one that halts the code execution with
IEx.Pry, giving developersthe option to access local variables, imports, and more. This also works with
pipelines: if you pass a series of
|>pipe calls todbg(or pipe into it at theend, like
|> dbg()), you'll be able to step through every line in the pipeline.You can keep the default behaviour by passing the
--no-pryoption to IEx.PartitionSupervisor
PartitionSupervisoris a new module that implements a new supervisor type. Thepartition supervisor is designed to help with situations where you have a single
supervised process that becomes a bottleneck. If that process's state can be
easily partitioned, then you can use
PartitionSupervisorto supervise multipleisolated copies of that process running concurrently, each assigned its own
partition.
For example, imagine you have an
ErrorReporterprocess that you use to reporterrors to a monitoring service.
As the concurrency of your application goes up, the
ErrorReporterprocessmight receive requests from many other processes and eventually become a
bottleneck. In a case like this, it could help to spin up multiple copies of the
ErrorReporterprocess under aPartitionSupervisor.The
PartitionSupervisorwill spin up a number of processes equal toSystem.schedulers_online()by default (most often one per core). Now, whenrouting requests to
ErrorReporterprocesses we can use a:viatuple androute the requests through the partition supervisor.
Using
self()as the partitioning key here means that the same process willalways report errors to the same
ErrorReporterprocess, ensuring a form ofback-pressure. You can use any term as the partitioning key.
A Common Example
A common and practical example of a good use case for
PartitionSupervisorispartitioning something like a
DynamicSupervisor. When starting many processesunder it, a dynamic supervisor can be a bottleneck, especially if said processes
take a long time to initialize. Instead of starting a single
DynamicSupervisor,you can start multiple:
Now you start processes on the dynamic supervisor for the right partition.
For instance, you can partition by PID, like in the previous example:
Improved errors on binaries and evaluation
Erlang/OTP 25 improved errors on binary construction and evaluation. These improvements
apply to Elixir as well. Before v1.14, errors when constructing binaries would
often be hard-to-debug generic "argument errors". With Erlang/OTP 25 and Elixir v1.14,
more detail is provided for easier debugging. This work is part of EEP
54.
Before:
Now:
Slicing with steps
Elixir v1.12 introduced stepped ranges, which are ranges where you can
specify the "step":
Stepped ranges are particularly useful for numerical operations involving
vectors and matrices (see Nx, for example).
However, the Elixir standard library was not making use of stepped ranges in its
APIs. Elixir v1.14 starts to take advantage of steps with support for stepped
ranges in a couple of functions. One of them is
Enum.slice/2:binary_slice/2(andbinary_slice/3for completeness) has been added to theKernelmodule, that works with bytes and also support stepped ranges:Expression-based inspection and
InspectimprovementsIn Elixir, it's conventional to implement the
Inspectprotocol for opaquestructs so that they're inspected with a special notation, resembling this:
This is generally done when the struct content or part of it is private and the
%name{...}representation would reveal fields that are not part of the publicAPI.
The downside of the
#name<...>convention is that the inspected output is notvalid Elixir code. For example, you cannot copy the inspected output and paste
it into an IEx session.
Elixir v1.14 changes the convention for some of the standard-library structs.
The
Inspectimplementation for those structs now returns a string with a validElixir expression that recreates the struct when evaluated. In the
MapSetexample above, this is what we have now:
The
MapSet.new/1expression evaluates to exactly the struct that we'reinspecting. This allows us to hide the internals of
MapSet, while keepingit as valid Elixir code. This expression-based inspection has been
implemented for
Version.Requirement,MapSet, andDate.Range.Finally, we have improved the
Inspectprotocol for structs so thatfields are inspected in the order they are declared in
defstruct.The option
:optionalhas also been added when deriving theInspectprotocol, giving developers more control over the struct representation.
See the updated documentation for
Inspectfor a general rundown onthe approaches and options available.
1. Enhancements
EEx
<%!-- --%>EEx.tokenize/2Elixir
Access.slice/1Application.compile_env/4andApplication.compile_env!/3to read the compile-time environment inside macrosDateTime.from_iso8601/2day/hour/minuteonadd/diffacross different calendar modules:normalize_bitstring_modifierstoCode.format_string!/2Code.compile_string/2andCode.compile_quoted/2Code.env_for_eval/1andCode.eval_quoted_with_env/3__MODULE__in several functionsEnum.slice/2dereference_symlinks: trueinFile.cp/3andFile.cp_r/31.0e16and the fractional value is precisely zeroFloat.min_finite/0andFloat.max_finite/0Inspectprotocol:optionalwhen deriving the Inspect protocol for hiding fields that match their default valuedefstructDate.Range,MapSet, andVersion.RequirementMacro.Envand keywords as stacktrace definitions inIO.warn/2IO.ANSI.syntax_colors/0and related configuration to be shared across IEx anddbgdbg/0-2macro..as a nullary operator that returns0..-1//1binary_slice/2andbinary_slice/3generated: trueannotations on macro expansionKeyword.from_keys/2andKeyword.replace_lazy/3List.keysort/3with support for asorterfunctionMacro.classify_atom/1andMacro.inspect_atom/2Macro.expand_literal/2andMacro.path/2Macro.Env.prune_compile_info/1Map.from_keys/2andMap.replace_lazy/3MapSet.filter/2,MapSet.reject/2, andMapSet.symmetric_difference/2Node.spawn_monitor/2andNode.spawn_monitor/4@after_verifyattribute for executing code whenever a module is verifiedPartitionSupervisorthat starts multiple isolated partitions of the same child for scalabilityPath.safe_relative/1andPath.safe_relative_to/2Registry.count_select/2Stream.duplicate/2andStream.transform/5String.replace/3,String.split/3, andString.splitter/3String.slice/2:zip_input_on_exitoption toTask.async_stream/3:mfain theTaskstruct for reflection purposesURI.append_query/2Version.to_string/1Version.Requirementsource in theInspectprotocolExUnit
ExUnit.Callbacks.start_link_supervised!/2ExUnit.run/1to rerun test modulesIEx
--dot-iexline by line::inside<<...>>)pid/1h/1Logger
Logger.put_process_level/2Mix
:config_pathand:lockfileoptions toMix.install/2--no-optional-depsto skip optional dependencies to test compilation works without optional dependenciesMix.Dep.Convergernow tells which deps formed a cycle--appoption to restrict recursive tasks in umbrella projects+as a task separator instead of commamix format -when reading from stdinmix formatplugins are missing:runtime_config_pathacceptfalseto skip theconfig/runtime.exs:test_elixirc_optionsand default to not generating docs nor debug info chunk for tests--groupflag inmix xref graph2. Bug fixes
Elixir
Calendar.strftime/3--rpc-evalusage__exception__field astruewhen expanding exceptions in typespecsTrue,False, andNilaliases are used@deriveattributesdefimpl :forRegex.compile/2System.fetch_env!/1to mirror map operationsExUnit
tmp_dirin ExUnit to avoid test name collisioncapture_log)ExUnit.after_suite/1callback even when no tests runsetupwith imported function from withindescribefailed to compileIEx
exports/1in IEx for long function namesMix
--warnings-as-errorswhen used with--all-warningsmix formatRELEASE_MODEafterenv.{sh,bat}are executedmix xref traceruntime: falseonMix.install/23. Soft deprecations (no warnings emitted)
Elixir
File.cp/3andFile.cp_r/3is deprecated.Instead pass the callback the
:on_conflictkey of a keyword listEEx
<%# ... %>for comments is deprecated. Please use<% # ... %>or the new multi-line comments with<%!-- ... --%>Logger
Logger.enable/1andLogger.disable/1in favor ofLogger.put_process_level/2Mix
--appoption inmix cmd CMDis deprecated in favor of the more efficientmix do --app app cmd CMD4. Hard deprecations
Elixir
Application.get_env/3and friends in the module body is now discouraged, useApplication.compile_env/3insteaduse Bitwiseis deprecated, useimport Bitwiseinstead~~~is deprecated in favor ofbnotfor clarity:each_cycleis deprecated, return a{:compile | :runtime, modules, warnings}tuple instead<|>to avoid ambiguity with upcoming extended numerical operatorsString.starts_with?/2Logger
$levelpadon message formattingMix
Mix.Tasks.Xref.calls/1is deprecated in favor of compilation tracers5. Backwards incompatible changes
Mix
v1.13.4Compare Source
This release has been verified to work with Erlang/OTP 25 RC2.
1. Enhancements
Elixir
2. Bug fixes
Elixir
requireRegistrysend work with named triplets3. Deprecations
Mix
Checksums
325fbdd2ae1b2ev1.13.3Compare Source
1. Enhancements
Mix
2. Bug fixes
Elixir
Macro.to_string/1when the plain aliasElixiris givenString.split_at/2Mix
Checksums
7a2d0ffe1110f7v1.13.2Compare Source
1. Enhancements
Mix
.exand.exsfiles2. Bug fixes
Elixir
Code.Fragment.container_cursor_to_quoted/2:uniqwas used inside another comprehension with:uniqenv.context_modulesis properly set inside optimizeddefmoduleKeyword.map/2as it is equivalent toKeyword.new/2Map.map/2as it is equivalent toMap.new/2Checksums
53bf917442ee13v1.13.1Compare Source
1. Bug fixes
Elixir
SyntaxErrorandTokenMissingErrorif line is emptyArgumentErrorfor improper lists onapply/3line_lengthforMacro.to_string/1Macro.to_string/1slicewith negative positions in rangesURI.parse/1asURI.new/1is too strict in many common casesURI.new/1returns nil for empty pathsIEx
--versionflag halts IExMix
Mix.install/2cacheChecksums
40762ff066586bv1.13.0Compare Source
Announcement: https://elixir-lang.org/blog/2021/12/03/elixir-v1-13-0-released/
1. Enhancements
EEx
:parser_optionsto EEx functionsElixir
c:Calendar.year_of_era/3to support calendars where the beginning of a new era does not align with the beginning of a new year--short-versionon the CLI that does not boot the VMCode.string_to_quoted_with_comments/2andCode.quoted_to_algebra/2:token_metadatato aliases and remote calls when parsing stringsCode.Fragmentmodule to provide best-effort information from code fragments. The module currently provides an updatedCode.Fragment.cursor_context/2with operator support andCode.Fragment.surround_context/2which looks at a given position in a fragment and find its surrounding delimitersCode.format_string!/2{:on_module, bytecode, :none}trace to compilation tracersEnum.concat/1for lists of listsEnum.slide/3Inspect.Opts.default_inspect_fun/1:eofto be given as limit toIO.getn/2:sigilsoption inimport Mod, only: :sigilsand allow the sigil modifiers to be also digitsget_inconsistently abort whennilvalues are found?\is used and there is no need for a escape character**/2)Keyword.validate/2Keyword.filter/2andKeyword.map/2List.keyfind!/3Macro.prewalker/1andMacro.postwalker/1required?/2,lookup_import/2,fetch_alias/2, andfetch_macro_alias/2Map.filter/2andMap.map/2:nillify_clausesinModule.get_definition/3Module.attributes_in/1andModule.overridables_in/1OptionParser.ParseErrormessages@__records__Task.completed/1Task.ignore/1to keep a task running but ignoring all of its resultsTask.async*functionsURI.new/1andURI.new!/1ExUnit
with_io/3to return result with captured iowith_log/2to return result with captured logsIEx
"./or"/or"DRIVER:whereDRIVERis a single letterr/1Logger
Logger.put_application_level/2Mix
MIX_INSTALL_FORCEenvironment variable support:configand:system_envinMix.install/2Mix.installed?/0:defaultoption toMix.Shell.yes?loadconfigbefore building archivemix.exschanges, instead recompile only files usingMix.Projector trigger a recompilation if a compiler option changes:subdiroption to git depsloadconfigbefore building escript:pluginsinmix formatthat can hook into custom extensions and sigilsMix.Tasks.Format.formatter_for_file/2sub_dirsin Rebar 2 to help migration towards Rebar 3--if-missingoption when installing RebarConfiguration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate. View repository job log here.