Split preview mode into separate feature flags (#14823)

I think this would give us better hygiene than a global flag. It makes
it easier for users to opt-in to overlapping features, such as Python
upgrades and Python bin installations and to disable warnings for
preview mode without opting in to a bunch of other features. In general,
I want to reduce the burden for putting something under preview.

The `--preview` and `--no-preview` flags are retained as global
overrides. A new `--preview-features` option is added which accepts
comma separated features or can be passed multiple times, e.g.,
`--preview-features add-bounds,pylock`. There's a `UV_PREVIEW_FEATURES`
environment variable for that option (I'm not sure if we should overload
`UV_PREVIEW`, but could be convinced).
This commit is contained in:
Zanie Blue
2025-07-25 11:01:57 -05:00
committed by GitHub
parent 9376cf5482
commit bfb4bc2aeb
55 changed files with 1327 additions and 304 deletions
+84 -84
View File
@@ -135,7 +135,7 @@ mod tests {
use indoc::{formatdoc, indoc};
use temp_env::with_vars;
use test_log::test;
use uv_configuration::PreviewMode;
use uv_configuration::Preview;
use uv_static::EnvVars;
use uv_cache::Cache;
@@ -468,7 +468,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::default(),
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
});
assert!(
@@ -483,7 +483,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::default(),
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
});
assert!(
@@ -508,7 +508,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::default(),
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
});
assert!(
@@ -530,7 +530,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::default(),
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert!(
@@ -592,7 +592,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::default(),
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert!(
@@ -624,7 +624,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::default(),
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
});
assert!(
@@ -661,7 +661,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::default(),
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert!(
@@ -693,7 +693,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -715,7 +715,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -741,7 +741,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -767,7 +767,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -790,7 +790,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
@@ -824,7 +824,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
@@ -858,7 +858,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})?;
assert!(
@@ -880,7 +880,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})?;
assert!(
@@ -902,7 +902,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
@@ -936,7 +936,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
@@ -973,7 +973,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert!(
@@ -1004,7 +1004,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert!(
@@ -1039,7 +1039,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1065,7 +1065,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1092,7 +1092,7 @@ mod tests {
EnvironmentPreference::OnlyVirtual,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1117,7 +1117,7 @@ mod tests {
EnvironmentPreference::OnlyVirtual,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)?;
@@ -1139,7 +1139,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1162,7 +1162,7 @@ mod tests {
EnvironmentPreference::OnlyVirtual,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1195,7 +1195,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1216,7 +1216,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1243,7 +1243,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
@@ -1261,7 +1261,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
@@ -1290,7 +1290,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1328,7 +1328,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1356,7 +1356,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1381,7 +1381,7 @@ mod tests {
EnvironmentPreference::ExplicitSystem,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1406,7 +1406,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1431,7 +1431,7 @@ mod tests {
EnvironmentPreference::OnlyVirtual,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1469,7 +1469,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1497,7 +1497,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1514,7 +1514,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1531,7 +1531,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})?;
assert!(
@@ -1553,7 +1553,7 @@ mod tests {
EnvironmentPreference::OnlyVirtual,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})?;
assert!(
@@ -1570,7 +1570,7 @@ mod tests {
EnvironmentPreference::OnlySystem,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)?;
@@ -1592,7 +1592,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1607,7 +1607,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})?;
assert!(
@@ -1621,7 +1621,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})?;
assert!(
@@ -1650,7 +1650,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1666,7 +1666,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1696,7 +1696,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1712,7 +1712,7 @@ mod tests {
EnvironmentPreference::ExplicitSystem,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1728,7 +1728,7 @@ mod tests {
EnvironmentPreference::OnlyVirtual,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1744,7 +1744,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1768,7 +1768,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1783,7 +1783,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1807,7 +1807,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1827,7 +1827,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
},
)??;
@@ -1856,7 +1856,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1878,7 +1878,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})?;
assert!(
@@ -1908,7 +1908,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -1924,7 +1924,7 @@ mod tests {
EnvironmentPreference::ExplicitSystem,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})?;
assert!(
@@ -1951,7 +1951,7 @@ mod tests {
EnvironmentPreference::ExplicitSystem,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})
.unwrap()
@@ -1976,7 +1976,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})?;
assert!(
@@ -1993,7 +1993,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2008,7 +2008,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2034,7 +2034,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2049,7 +2049,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2075,7 +2075,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2102,7 +2102,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2129,7 +2129,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2156,7 +2156,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2183,7 +2183,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2211,7 +2211,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})?;
assert!(
@@ -2233,7 +2233,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2248,7 +2248,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2274,7 +2274,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2289,7 +2289,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
assert_eq!(
@@ -2327,7 +2327,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})
.unwrap()
@@ -2345,7 +2345,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})
.unwrap()
@@ -2387,7 +2387,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})
.unwrap()
@@ -2405,7 +2405,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})
.unwrap()
@@ -2442,7 +2442,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})
.unwrap()
@@ -2465,7 +2465,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})
.unwrap()
@@ -2488,7 +2488,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})
.unwrap()
@@ -2527,7 +2527,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;
@@ -2580,7 +2580,7 @@ mod tests {
EnvironmentPreference::Any,
PythonPreference::OnlySystem,
&context.cache,
PreviewMode::Disabled,
Preview::default(),
)
})??;