Skip to content

Commit 7149738

Browse files
committed
perf:
1 parent c17ac20 commit 7149738

File tree

4 files changed

+52
-17
lines changed

4 files changed

+52
-17
lines changed

crates/oxc_linter/src/loader/partial_loader/astro.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
use memchr::memmem::Finder;
1+
use memchr::memmem::{Finder, FinderRev};
22

33
use oxc_span::{SourceType, Span};
44

5-
use crate::loader::{JavaScriptSource, partial_loader::find_script_start};
5+
use crate::loader::{
6+
JavaScriptSource,
7+
partial_loader::{COMMENT_END, COMMENT_START, SCRIPT_START, find_script_start},
8+
};
69

710
use super::SCRIPT_END;
811

@@ -53,7 +56,10 @@ impl<'a> AstroPartialLoader<'a> {
5356
/// In .astro files, you can add client-side JavaScript by adding one (or more) `<script>` tags.
5457
/// <https://docs.astro.build/en/guides/client-side-scripts/#using-script-in-astro>
5558
fn parse_scripts(&self, start: usize) -> Vec<JavaScriptSource<'a>> {
59+
let script_start_finder = Finder::new(SCRIPT_START);
5660
let script_end_finder = Finder::new(SCRIPT_END);
61+
let comment_start_finder = FinderRev::new(COMMENT_START);
62+
let comment_end_finder = Finder::new(COMMENT_END);
5763

5864
let mut results = vec![];
5965
let mut pointer = start;
@@ -62,7 +68,13 @@ impl<'a> AstroPartialLoader<'a> {
6268
let js_start;
6369
let js_end;
6470
// find opening "<script"
65-
if let Some(offset) = find_script_start(self.source_text, &pointer) {
71+
if let Some(offset) = find_script_start(
72+
self.source_text,
73+
pointer,
74+
&script_start_finder,
75+
&comment_start_finder,
76+
&comment_end_finder,
77+
) {
6678
pointer += offset;
6779
} else {
6880
break;

crates/oxc_linter/src/loader/partial_loader/mod.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,14 @@ fn find_script_closing_angle(source_text: &str, pointer: usize) -> Option<usize>
7373
None
7474
}
7575

76-
fn find_script_start(source_text: &str, pointer: &usize) -> Option<usize> {
77-
let mut new_pointer = *pointer;
78-
let script_start_finder = Finder::new(SCRIPT_START);
79-
let comment_start_finder = FinderRev::new(COMMENT_START);
80-
let comment_end_finder = Finder::new(COMMENT_END);
76+
fn find_script_start(
77+
source_text: &str,
78+
pointer: usize,
79+
script_start_finder: &Finder<'_>,
80+
comment_start_finder: &FinderRev<'_>,
81+
comment_end_finder: &Finder<'_>,
82+
) -> Option<usize> {
83+
let mut new_pointer = pointer;
8184

8285
loop {
8386
new_pointer +=
@@ -95,5 +98,5 @@ fn find_script_start(source_text: &str, pointer: &usize) -> Option<usize> {
9598
}
9699
}
97100

98-
Some(new_pointer - *pointer)
101+
Some(new_pointer - pointer)
99102
}

crates/oxc_linter/src/loader/partial_loader/svelte.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
use memchr::memmem::Finder;
1+
use memchr::memmem::{Finder, FinderRev};
22

33
use oxc_span::SourceType;
44

55
use crate::loader::{JavaScriptSource, partial_loader::find_script_start};
66

7-
use super::{SCRIPT_END, find_script_closing_angle};
7+
use super::{COMMENT_END, COMMENT_START, SCRIPT_END, SCRIPT_START, find_script_closing_angle};
88

99
pub struct SveltePartialLoader<'a> {
1010
source_text: &'a str,
@@ -35,10 +35,18 @@ impl<'a> SveltePartialLoader<'a> {
3535
}
3636

3737
fn parse_script(&self, pointer: &mut usize) -> Option<JavaScriptSource<'a>> {
38+
let script_start_finder = Finder::new(SCRIPT_START);
3839
let script_end_finder = Finder::new(SCRIPT_END);
39-
40+
let comment_start_finder = FinderRev::new(COMMENT_START);
41+
let comment_end_finder: Finder<'_> = Finder::new(COMMENT_END);
4042
// find opening "<script"
41-
*pointer += find_script_start(self.source_text, pointer)?;
43+
*pointer += find_script_start(
44+
self.source_text,
45+
*pointer,
46+
&script_start_finder,
47+
&comment_start_finder,
48+
&comment_end_finder,
49+
)?;
4250

4351
// find closing ">"
4452
let offset = find_script_closing_angle(self.source_text, *pointer)?;

crates/oxc_linter/src/loader/partial_loader/vue.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
use memchr::memmem::Finder;
1+
use memchr::memmem::{Finder, FinderRev};
22

33
use oxc_span::SourceType;
44

5-
use crate::{frameworks::FrameworkOptions, loader::partial_loader::find_script_start};
5+
use crate::{
6+
frameworks::FrameworkOptions,
7+
loader::partial_loader::{SCRIPT_START, find_script_start},
8+
};
69

7-
use super::{JavaScriptSource, SCRIPT_END, find_script_closing_angle};
10+
use super::{COMMENT_END, COMMENT_START, JavaScriptSource, SCRIPT_END, find_script_closing_angle};
811

912
pub struct VuePartialLoader<'a> {
1013
source_text: &'a str,
@@ -35,8 +38,17 @@ impl<'a> VuePartialLoader<'a> {
3538
}
3639

3740
fn parse_script(&self, pointer: &mut usize) -> Option<JavaScriptSource<'a>> {
41+
let script_start_finder = Finder::new(SCRIPT_START);
42+
let comment_start_finder = FinderRev::new(COMMENT_START);
43+
let comment_end_finder: Finder<'_> = Finder::new(COMMENT_END);
3844
// find opening "<script"
39-
*pointer += find_script_start(self.source_text, pointer)?;
45+
*pointer += find_script_start(
46+
self.source_text,
47+
*pointer,
48+
&script_start_finder,
49+
&comment_start_finder,
50+
&comment_end_finder,
51+
)?;
4052

4153
// skip `<script-`
4254
if !self.source_text[*pointer..].starts_with([' ', '>']) {

0 commit comments

Comments
 (0)