Settings0 used to be a Map[Scope, AttributeMap], and is now a
Map[ScopedKey[x], x].
This is better because we don't need to decompose all ScopedKey[x]
into a Scope and an AttributeKey[x], for recomposing it back later,
which duplicates all ScopedKey[x]. It reduces the number of long-living
ScopedKey[x] by 8%, and the total number of instances by 1.4%.
Also it improves the performance of Settings0, which was responsible of
2.95% of the total CPU time, and is now responsible of 0.41%.
**Problem**
1. `or` is missing
2. `?` should have English method name
**Solution**
1. This resurrects `or`
2. Name `??` as `option`, since `get` is taken
**Problem**
It's been a while since Coursier has been the default library management engine,
and we don't need to support two.
**Solution**
This removes `useCoursier` setting.
**Problem**
We want a more flexible way of aggregating subprojects.
**Solution**
This implements a subproject filtering as a replacement of
the subproject axis in the act command.
**Problem**
Since Scala cross building works better than the plugin cross building `^^`,
it was common for plugin authors to encode plugin cross building as Scala cross building
given that we usually have zero or one sbt release in one Scala version.
**Solution**
This brings in the setting into SbtPlugin so plugin authors can cross build
using sbt 2.x.
**Problem**
The new common settings feature doesn't work when the root isn't created by the user.
**Solution**
This fixes common settings by calling `expandCommonSettingsPerBase(...)` on
the synthetic root's base first.
**Problem**
There's been previous attempt like 1878 to skip publishing of the root,
but it seems like the behavior has regressed at some point in time.
**Solution**
This skips publishing on synthetic aggregate root project.
**Problem**
testQuick currently does not invalidate on argument changes.
**Solution**
This includes test argument digests.
---------
Co-authored-by: adpi2 <adrien.piquerez@gmail.com>