refactor: split abstract rule

上级 671e0e2b
......@@ -5,11 +5,12 @@ use onig::*;
use crate::grammar::grammar::stack_element::StackElement;
use crate::inter::{IRawGrammar, IRawRepository, IRawRepositoryMap, IRawRule};
use crate::rule::{
AbstractRule, IGrammarRegistry, IRuleFactoryHelper, IRuleRegistry, NoneRule,
IGrammarRegistry, IRuleFactoryHelper, IRuleRegistry, NoneRule,
};
use crate::rule::rule_factory::RuleFactory;
use crate::grammar::line_tokens::{LineTokens, TokenTypeMatcher};
use crate::grammar::grammar::scope_list_element::ScopeListElement;
use crate::rule::abstract_rule::AbstractRule;
pub mod scope_list_element;
pub mod scope_metadata;
......
......@@ -2,7 +2,8 @@ use crate::grammar::grammar::scope_list_element::ScopeListElement;
use core::ptr;
use crate::grammar::grammar::Grammar;
use crate::grammar::grammar_registry::GrammarRegistry;
use crate::rule::{IRuleRegistry, AbstractRule};
use crate::rule::{IRuleRegistry};
use crate::rule::abstract_rule::AbstractRule;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct StackElement {
......
use dyn_clone::{clone_trait_object, DynClone};
use core::fmt;
pub trait AbstractRule: DynClone + erased_serde::Serialize {
fn id(&self) -> i32;
fn type_of(&self) -> String;
fn has_missing_pattern(&self) -> bool {
false
}
}
impl fmt::Debug for dyn AbstractRule {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "AbstractRule")
}
}
serialize_trait_object!(AbstractRule);
clone_trait_object!(AbstractRule);
pub struct CompiledRule {
pub debug_reg_exps: Vec<String>,
pub rules: Vec<i32>
}
impl CompiledRule {
pub fn new(debug_reg_exps: Vec<String>, rules: Vec<i32>) -> Self {
CompiledRule { debug_reg_exps, rules }
}
}
\ No newline at end of file
pub mod rule_factory;
pub mod rule_convert;
pub mod reg_exp_source;
pub mod compiled_rule;
pub(crate) mod abstract_rule;
use crate::inter::{ILocation, IRawGrammar, IRawRepository};
use reg_exp_source::{RegExpSource, RegExpSourceList};
use crate::rule::rule_factory::ICompilePatternsResult;
use core::fmt;
use dyn_clone::{clone_trait_object, DynClone};
use serde::{Serialize, Serializer};
use abstract_rule::AbstractRule;
#[derive(Clone, Debug, Serialize)]
pub struct Rule {
pub _type: String,
#[serde(skip_serializing_if="Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none")]
pub _location: Option<ILocation>,
pub id: i32,
#[serde(skip_serializing_if="Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none")]
pub _name: Option<String>,
#[serde(skip_serializing_if="Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none")]
pub _content_name: Option<String>,
}
......@@ -38,30 +40,12 @@ impl Rule {
}
}
pub trait AbstractRule: DynClone + erased_serde::Serialize {
fn id(&self) -> i32;
fn type_of(&self) -> String;
fn has_missing_pattern(&self) -> bool {
false
}
}
serialize_trait_object!(AbstractRule);
impl fmt::Debug for dyn AbstractRule {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "AbstractRule")
}
}
clone_trait_object!(AbstractRule);
#[derive(Clone, Debug, Serialize)]
pub struct IncludeOnlyRule {
#[serde(flatten)]
pub rule: Rule,
pub patterns: Vec<i32>,
pub has_missing_patterns: bool
pub has_missing_patterns: bool,
}
impl IncludeOnlyRule {
......@@ -81,7 +65,7 @@ impl IncludeOnlyRule {
_content_name: content_name,
},
patterns: captures.patterns,
has_missing_patterns: captures.has_missing_patterns
has_missing_patterns: captures.has_missing_patterns,
}
}
}
......@@ -111,7 +95,7 @@ pub struct BeginWhileRule {
pub patterns: ICompilePatternsResult,
pub has_missing_patterns: bool,
#[serde(skip_serializing_if="Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none")]
pub cached_compiled_patterns: Option<RegExpSourceList>,
}
......@@ -202,9 +186,9 @@ pub struct BeginEndRule {
pub _end: RegExpSource,
// pub endHasBackReferences: Option<bool>,
pub end_captures: Vec<Box<dyn AbstractRule>>,
#[serde(skip_serializing_if="Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none")]
pub apply_end_pattern_last: Option<bool>,
#[serde(skip_serializing_if="Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none")]
pub _cached_compiled_patterns: Option<RegExpSourceList>,
pub patterns: Vec<i32>,
pub has_missing_patterns: bool,
......@@ -238,7 +222,7 @@ impl BeginEndRule {
apply_end_pattern_last,
has_missing_patterns: patterns.clone().has_missing_patterns,
patterns: patterns.patterns,
_cached_compiled_patterns: None
_cached_compiled_patterns: None,
}
}
}
......@@ -256,7 +240,7 @@ impl AbstractRule for BeginEndRule {
#[derive(Clone, Debug, Serialize)]
pub struct CaptureRule {
pub rule: Rule,
pub retokenize_captured_with_rule_id: i32
pub retokenize_captured_with_rule_id: i32,
}
impl CaptureRule {
......@@ -267,9 +251,9 @@ impl CaptureRule {
_location: None,
id: 0,
_name: None,
_content_name: None
_content_name: None,
},
retokenize_captured_with_rule_id: 0
retokenize_captured_with_rule_id: 0,
}
}
pub fn new(location: Option<ILocation>, id: i32, name: Option<String>, content_name: Option<String>, retokenize_captured_with_rule_id: i32) -> Self {
......@@ -281,7 +265,7 @@ impl CaptureRule {
_name: name,
_content_name: content_name,
},
retokenize_captured_with_rule_id
retokenize_captured_with_rule_id,
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册