Skip to content

Commit e9565c9

Browse files
committedMar 19, 2025·
fix(linter): parse vue custom tag that starts with script (#9887)
fixes #9837
1 parent 233c1fc commit e9565c9

File tree

1 file changed

+17
-1
lines changed
  • crates/oxc_linter/src/loader/partial_loader

1 file changed

+17
-1
lines changed
 

Diff for: ‎crates/oxc_linter/src/loader/partial_loader/vue.rs

+17-1
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,16 @@ impl<'a> VuePartialLoader<'a> {
3333

3434
fn parse_script(&self, pointer: &mut usize) -> Option<JavaScriptSource<'a>> {
3535
let script_start_finder = Finder::new(SCRIPT_START);
36-
let script_end_finder = Finder::new(SCRIPT_END);
3736

3837
// find opening "<script"
3938
let offset = script_start_finder.find(self.source_text[*pointer..].as_bytes())?;
4039
*pointer += offset + SCRIPT_START.len();
4140

41+
// skip `<script-`
42+
if !self.source_text[*pointer..].starts_with([' ', '>']) {
43+
return self.parse_script(pointer);
44+
}
45+
4246
// find closing ">"
4347
let offset = find_script_closing_angle(self.source_text, *pointer)?;
4448

@@ -51,6 +55,7 @@ impl<'a> VuePartialLoader<'a> {
5155
let js_start = *pointer;
5256

5357
// find "</script>"
58+
let script_end_finder = Finder::new(SCRIPT_END);
5459
let offset = script_end_finder.find(self.source_text[*pointer..].as_bytes())?;
5560
let js_end = *pointer + offset;
5661
*pointer += offset + SCRIPT_END.len();
@@ -236,4 +241,15 @@ mod test {
236241
.trim()
237242
);
238243
}
244+
245+
#[test]
246+
fn test_script_in_template() {
247+
let source_text = r"
248+
<template><script-view /></template>
249+
<script>a</script>
250+
";
251+
let sources = VuePartialLoader::new(source_text).parse();
252+
assert_eq!(sources.len(), 1);
253+
assert_eq!(sources[0].source_text, "a");
254+
}
239255
}

0 commit comments

Comments
 (0)
Please sign in to comment.