Add CodeFix::apply_solution and impl Clone

This commit is contained in:
Alex Macleod 2024-06-19 18:49:20 +00:00
parent 06daef65fa
commit 5a15397611
3 changed files with 15 additions and 8 deletions

2
Cargo.lock generated
View file

@ -2943,7 +2943,7 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustfix"
version = "0.8.4"
version = "0.8.5"
dependencies = [
"anyhow",
"proptest",

View file

@ -1,6 +1,6 @@
[package]
name = "rustfix"
version = "0.8.4"
version = "0.8.5"
authors = [
"Pascal Hertleif <killercup@gmail.com>",
"Oliver Schneider <oli-obk@users.noreply.github.com>",

View file

@ -213,6 +213,7 @@ pub fn collect_suggestions<S: ::std::hash::BuildHasher>(
/// 1. Feeds the source of a file to [`CodeFix::new`].
/// 2. Calls [`CodeFix::apply`] to apply suggestions to the source code.
/// 3. Calls [`CodeFix::finish`] to get the "fixed" code.
#[derive(Clone)]
pub struct CodeFix {
data: replace::Data,
/// Whether or not the data has been modified.
@ -230,12 +231,18 @@ impl CodeFix {
/// Applies a suggestion to the code.
pub fn apply(&mut self, suggestion: &Suggestion) -> Result<(), Error> {
for sol in &suggestion.solutions {
for r in &sol.replacements {
self.data
.replace_range(r.snippet.range.clone(), r.replacement.as_bytes())?;
self.modified = true;
}
for solution in &suggestion.solutions {
self.apply_solution(solution)?;
}
Ok(())
}
/// Applies an individual solution from a [`Suggestion`].
pub fn apply_solution(&mut self, solution: &Solution) -> Result<(), Error> {
for r in &solution.replacements {
self.data
.replace_range(r.snippet.range.clone(), r.replacement.as_bytes())?;
self.modified = true;
}
Ok(())
}