summaryrefslogtreecommitdiff
path: root/cli/tools/lint/linter.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tools/lint/linter.rs')
-rw-r--r--cli/tools/lint/linter.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/cli/tools/lint/linter.rs b/cli/tools/lint/linter.rs
index f6ea76c14..777fe4d09 100644
--- a/cli/tools/lint/linter.rs
+++ b/cli/tools/lint/linter.rs
@@ -1,5 +1,6 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+use std::collections::HashSet;
use std::path::Path;
use deno_ast::MediaType;
@@ -225,14 +226,23 @@ fn apply_lint_fixes(
if quick_fixes.is_empty() {
return None;
}
+
+ let mut import_fixes = HashSet::new();
// remove any overlapping text changes, we'll circle
// back for another pass to fix the remaining
quick_fixes.sort_by_key(|change| change.range.start);
for i in (1..quick_fixes.len()).rev() {
let cur = &quick_fixes[i];
let previous = &quick_fixes[i - 1];
- let is_overlapping = cur.range.start < previous.range.end;
- if is_overlapping {
+ // hack: deduplicate import fixes to avoid creating errors
+ if previous.new_text.trim_start().starts_with("import ") {
+ import_fixes.insert(previous.new_text.trim().to_string());
+ }
+ let is_overlapping = cur.range.start <= previous.range.end;
+ if is_overlapping
+ || (cur.new_text.trim_start().starts_with("import ")
+ && import_fixes.contains(cur.new_text.trim()))
+ {
quick_fixes.remove(i);
}
}