relay-knowledge 1.1.16

Graph-database-based knowledge graph project.
Documentation
use crate::code::parser::imports::{ScriptLineImport, line_range, quoted_specifier, source_lines};

pub(in crate::code::parser) fn line_imports(content: &str) -> Vec<ScriptLineImport> {
    source_lines(content)
        .into_iter()
        .filter_map(|line| {
            let statement = line.text.trim();
            ruby_import_statement(statement).then(|| ScriptLineImport {
                module: statement.to_owned(),
                range: line_range(&line, &line),
            })
        })
        .collect()
}

fn ruby_import_statement(statement: &str) -> bool {
    if statement.starts_with('#') || quoted_specifier(statement).is_none() {
        return false;
    }

    ["require", "require_relative", "load"]
        .iter()
        .any(|keyword| ruby_keyword_statement(statement, keyword))
}

fn ruby_keyword_statement(statement: &str, keyword: &str) -> bool {
    statement
        .strip_prefix(keyword)
        .is_some_and(|rest| rest.starts_with(char::is_whitespace) || rest.starts_with('('))
}