diff --git a/scie-grammar/src/inter/mod.rs b/scie-grammar/src/inter/mod.rs index 2a7ded46eb412009f4bc561f85792383d96d2598..314883074c0bdc5d9ee2bdce31f9760677dead6e 100644 --- a/scie-grammar/src/inter/mod.rs +++ b/scie-grammar/src/inter/mod.rs @@ -41,7 +41,7 @@ pub struct IRawCapturesMap { #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)] pub struct IRawRepositoryMap { #[serde(flatten)] - pub name_map: HashMap, + pub name_map: HashMap>, pub self_s: Option, pub base_s: Option, } diff --git a/scie-grammar/src/rule.rs b/scie-grammar/src/rule.rs index 9e08bd2464ad05aac42ba95d391434d7d135ec5b..77e2ea31fb8687acd1a8de8f7635afd4ccf266df 100644 --- a/scie-grammar/src/rule.rs +++ b/scie-grammar/src/rule.rs @@ -10,6 +10,11 @@ pub struct ICompilePatternsResult { pub has_missing_patterns: bool, } +fn remove_first(s: &str) -> &str { + let (first, last) = s.split_at(1); + last +} + pub struct RuleFactory {} impl RuleFactory { @@ -56,12 +61,31 @@ impl RuleFactory { } pub fn compile_patterns( - patterns: Option>, - helper: Box<&mut dyn IRuleFactoryHelper>, + origin_patterns: Option>, + helper: Box<&mut Grammar>, repository: IRawRepository, ) -> ICompilePatternsResult { let mut r: Vec = vec![]; + if let Some(patterns) = origin_patterns { + for pattern in patterns { + let mut pattern_id = -1; + if let Some(include_s) = pattern.clone().include { + if include_s.starts_with("#") { + let map = repository.clone().map.name_map.clone(); + let first = remove_first(include_s.as_str()); + let local_included_rule = map.get(first); + if let Some(rule) = local_included_rule { + let copy_rule = *rule.clone(); + pattern_id = RuleFactory::get_compiled_rule_id(copy_rule, *helper, repository.clone()); + } else { + println!("CANNOT find rule for scopeName: {:?}", pattern.clone().include); + } + } + } + } + } + let result = ICompilePatternsResult { patterns: r, has_missing_patterns: false,