pub(super) fn collect_js_references(line: &str) -> Vec<String> {
let mut refs = Vec::new();
let bytes = line.as_bytes();
let mut i = 0;
while i < bytes.len() {
if bytes[i].is_ascii_alphabetic() || bytes[i] == b'_' {
let start = i;
i += 1;
while i < bytes.len() && (bytes[i].is_ascii_alphanumeric() || bytes[i] == b'_') {
i += 1;
}
let mut end = i;
let mut chain = line[start..i].to_string();
let mut j = i;
loop {
while j < bytes.len() && bytes[j].is_ascii_whitespace() {
j += 1;
}
if j >= bytes.len() || bytes[j] != b'.' {
break;
}
let dot = j;
j += 1;
while j < bytes.len() && bytes[j].is_ascii_whitespace() {
j += 1;
}
if j >= bytes.len() || !(bytes[j].is_ascii_alphabetic() || bytes[j] == b'_') {
break;
}
j += 1;
while j < bytes.len() && (bytes[j].is_ascii_alphanumeric() || bytes[j] == b'_') {
j += 1;
}
chain.push_str(&line[dot..j]);
end = j;
}
refs.push(chain);
i = end;
continue;
}
i += 1;
}
refs
}