Skip to content

Commit 49633fe

Browse files
committed
test(linter): fix offset for partical source texts
1 parent 7216d4d commit 49633fe

File tree

5 files changed

+61
-36
lines changed

5 files changed

+61
-36
lines changed

Cargo.lock

Lines changed: 2 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,3 +291,6 @@ overflow-checks = true # Catch arithmetic overflow errors
291291
[profile.dev-no-debug-assertions]
292292
inherits = "dev"
293293
debug-assertions = false
294+
295+
[patch.crates-io]
296+
oxc-miette = { git = "https://github.com/oxc-project/oxc-miette/", rev = "8522fe33a69115cf4b4ed7d2ee2c2cd8a1511c2b" }

crates/oxc_linter/src/fixer/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,23 @@ impl<'a> Message<'a> {
291291
};
292292
Self { error, span: Span::new(start, end), fixes, fixed: false }
293293
}
294+
295+
pub fn with_offset(&mut self, offset: u32) -> &mut Self {
296+
if offset == 0 {
297+
return self;
298+
}
299+
300+
self.span =
301+
Span::new(self.span.start.saturating_add(offset), self.span.end.saturating_add(offset));
302+
303+
if let Some(labels) = &mut self.error.labels {
304+
for label in labels {
305+
label.set_span_offset(label.offset().saturating_add(offset as usize));
306+
}
307+
}
308+
309+
self
310+
}
294311
}
295312

296313
impl From<Message<'_>> for OxcDiagnostic {

crates/oxc_linter/src/service/runtime.rs

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -762,22 +762,30 @@ impl Runtime {
762762
.into_iter()
763763
.zip(section_contents.drain(..))
764764
{
765+
let lint_result = match record_result {
766+
Ok(module_record) => me.linter.run(
767+
Path::new(&module.path),
768+
Rc::new(section.semantic.unwrap()),
769+
Arc::clone(&module_record),
770+
section.source.framework_options,
771+
allocator_guard,
772+
),
773+
Err(errors) => errors
774+
.into_iter()
775+
.map(|err| Message::new(err, PossibleFixes::None))
776+
.collect(),
777+
};
778+
765779
messages.lock().unwrap().extend(
766-
match record_result {
767-
Ok(module_record) => me.linter.run(
768-
Path::new(&module.path),
769-
Rc::new(section.semantic.unwrap()),
770-
Arc::clone(&module_record),
771-
section.source.framework_options,
772-
allocator_guard,
773-
),
774-
Err(errors) => errors
775-
.into_iter()
776-
.map(|err| Message::new(err, PossibleFixes::None))
777-
.collect(),
778-
}
780+
lint_result
779781
.into_iter()
780-
.map(|message| message.clone_in(allocator)),
782+
.map(|mut message| {
783+
// let mut message = message;
784+
if section.source.start != 0 {
785+
message.with_offset(section.source.start);
786+
}
787+
message.clone_in(allocator)
788+
}),
781789
);
782790
}
783791
},

crates/oxc_linter/src/snapshots/vue_valid_define_emits.snap

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,37 @@
22
source: crates/oxc_linter/src/tester.rs
33
---
44
vue(valid-define-emits): `defineEmits` is referencing locally declared variables.
5-
╭─[valid_define_emits.tsx:4:28]
6-
3 /* ✗ BAD */
7-
4╭─▶ const def = { notify: null }
8-
5 │ ╰─▶ defineEmits(def)
9-
6 </script>
5+
╭─[valid_define_emits.tsx:5:12]
6+
4const def = { notify: null }
7+
5defineEmits(def)
8+
· ────────────────
9+
6</script>
1010
╰────
1111
help: inline the variable or import it from another module.
1212

1313
vue(valid-define-emits): `defineEmits` has both a type-only emit and an argument.
14-
╭─[valid_define_emits.tsx:3:3]
15-
2 <script setup lang="ts">
16-
3╭─▶ /* ✗ BAD */
17-
4 │ ╰─▶ defineEmits<(e: 'notify')=>void>({ submit: null })
18-
5 </script>
14+
╭─[valid_define_emits.tsx:4:12]
15+
3/* ✗ BAD */
16+
4defineEmits<(e: 'notify')=>void>({ submit: null })
17+
· ──────────────────────────────────────────────────
18+
5</script>
1919
╰────
2020
help: remove the argument for better type inference.
2121

2222
vue(valid-define-emits): `defineEmits` has been called multiple times.
23-
╭─[valid_define_emits.tsx:4:29]
24-
3 /* ✗ BAD */
25-
4╭─▶ defineEmits({ notify: null })
26-
5 │ ╰─▶ defineEmits({ submit: null })
27-
6 </script>
23+
╭─[valid_define_emits.tsx:5:12]
24+
4defineEmits({ notify: null })
25+
5defineEmits({ submit: null })
26+
· ─────────────────────────────
27+
6 │ </script>
2828
╰────
2929
help: combine all events into a single `defineEmits` call.
3030

3131
vue(valid-define-emits): Custom events are not defined.
32-
╭─[valid_define_emits.tsx:3:13]
33-
2 │ <script setup>
32+
╭─[valid_define_emits.tsx:4:12]
3433
3/* ✗ BAD */
35-
· ───────────
3634
4defineEmits()
35+
· ─────────────
3736
5 │ </script>
3837
╰────
3938
help: Define at least one event in `defineEmits`.

0 commit comments

Comments
 (0)