diff --git a/src/arclet/alconna/sistana/analyzer.py b/src/arclet/alconna/sistana/analyzer.py index 235f238..4e77687 100644 --- a/src/arclet/alconna/sistana/analyzer.py +++ b/src/arclet/alconna/sistana/analyzer.py @@ -84,16 +84,17 @@ def loopflow(self, snapshot: AnalyzeSnapshot[T], buffer: Buffer[T]) -> LoopflowE return LoopflowExitReason.unsatisfied if pointer_type is PointerRole.PREFIX: - if not isinstance(token.val, str): - return LoopflowExitReason.header_expect_str - if context.prefixes is not None: - prefix = context.prefixes.get_closest_prefix(buffer.first()) # type: ignore - if prefix == "": - return LoopflowExitReason.prefix_mismatch + if not isinstance(token.val, str): + return LoopflowExitReason.header_expect_str + + if context.prefixes is not None: + prefix = context.prefixes.get_closest_prefix(buffer.first()) # type: ignore + if prefix == "": + return LoopflowExitReason.prefix_mismatch - token.apply() - buffer.pushleft(token.val[len(prefix) :]) + token.apply() + buffer.pushleft(token.val[len(prefix) :]) traverse.ref = traverse.ref.parent.header() # 直接进 header. elif pointer_type is PointerRole.HEADER: diff --git a/src/arclet/alconna/sistana/model/pattern.py b/src/arclet/alconna/sistana/model/pattern.py index ec83528..4313ccd 100644 --- a/src/arclet/alconna/sistana/model/pattern.py +++ b/src/arclet/alconna/sistana/model/pattern.py @@ -51,7 +51,6 @@ def build( subcommand = cls( header=header, preset=Preset(), - prefixes=TrieHard(list(prefixes)), compact_header=compact_header, satisfy_previous=satisfy_previous, separators=separators, @@ -60,6 +59,9 @@ def build( ) subcommand.add_track(header, fragments, header=header_fragment) + if prefixes: + subcommand.prefixes = TrieHard(list(prefixes)) + return subcommand @property