4
4
import sys
5
5
from dataclasses import dataclass , field
6
6
from pathlib import Path
7
- from typing import Any , Callable , Generic , Literal , Sequence , TypeVar , cast , overload
7
+ from typing import Any , Callable , Generic , Literal , Sequence , TypeVar , cast , overload , TYPE_CHECKING
8
8
from typing_extensions import Self
9
9
from weakref import WeakSet
10
10
16
16
from ._internal ._handlers import handle_head_fuzzy , analyse_header
17
17
from ._internal ._shortcut import shortcut as _shortcut
18
18
from .args import Arg , Args
19
+ from .argv import Argv , __argv_type__
19
20
from .arparma import Arparma , ArparmaBehavior , requirement_handler
20
21
from .base import Completion , Help , Option , Shortcut , Subcommand , Header , SPECIAL_OPTIONS
21
22
from .config import Namespace , config
@@ -48,11 +49,11 @@ def handle_argv():
48
49
49
50
def add_builtin_options (options : list [Option | Subcommand ], cmd : Alconna , ns : Namespace ) -> None :
50
51
if "help" not in ns .disable_builtin_options :
51
- options .append (Help ("|" .join (ns .builtin_option_name ["help" ]), dest = "$help" , help_text = lang .require ("builtin" , "option_help" ))) # noqa: E501
52
+ options .append (Help ("|" .join (ns .builtin_option_name ["help" ]), dest = "$help" , help_text = lang .require ("builtin" , "option_help" ), soft_keyword = False )) # noqa: E501
52
53
53
54
@cmd .route ("$help" )
54
55
def _ (command : Alconna , arp : Arparma ):
55
- argv = command_manager .resolve (cmd )
56
+ argv = command_manager .require (cmd ). argv
56
57
_help_param = [str (i ) for i in argv .release (recover = True ) if str (i ) not in ns .builtin_option_name ["help" ]]
57
58
arp .output = command .formatter .format_node (_help_param )
58
59
return True
@@ -64,6 +65,7 @@ def _(command: Alconna, arp: Arparma):
64
65
Args ["action?" , "delete|list" ]["name?" , str ]["command?" , str ],
65
66
dest = "$shortcut" ,
66
67
help_text = lang .require ("builtin" , "option_shortcut" ),
68
+ soft_keyword = False ,
67
69
)
68
70
)
69
71
@@ -84,11 +86,11 @@ def _(command: Alconna, arp: Arparma):
84
86
return True
85
87
86
88
if "completion" not in ns .disable_builtin_options :
87
- options .append (Completion ("|" .join (ns .builtin_option_name ["completion" ]), dest = "$completion" , help_text = lang .require ("builtin" , "option_completion" ))) # noqa: E501
89
+ options .append (Completion ("|" .join (ns .builtin_option_name ["completion" ]), dest = "$completion" , help_text = lang .require ("builtin" , "option_completion" ), soft_keyword = False )) # noqa: E501
88
90
89
91
@cmd .route ("$completion" )
90
92
def _ (command : Alconna , arp : Arparma ):
91
- argv = command_manager .resolve (cmd )
93
+ argv = command_manager .require (cmd ). argv
92
94
rest = argv .release ()
93
95
trigger = None
94
96
if rest and isinstance (rest [- 1 ], str ) and rest [- 1 ] in ns .builtin_option_name ["completion" ]:
@@ -193,7 +195,12 @@ class Alconna(Subcommand):
193
195
194
196
def compile (self , compiler : TCompile | None = None ) -> Analyser :
195
197
"""编译 `Alconna` 为对应的解析器"""
196
- return Analyser (self , compiler ).compile ()
198
+ if TYPE_CHECKING :
199
+ argv_type = Argv
200
+ else :
201
+ argv_type : type [Argv ] = __argv_type__ .get ()
202
+ argv = argv_type (self .meta , self .namespace_config , self .separators )
203
+ return Analyser (self , argv , compiler )
197
204
198
205
def __init__ (
199
206
self ,
@@ -424,7 +431,7 @@ def _parse(self, message: TDC, ctx: dict[str, Any] | None = None) -> Arparma[TDC
424
431
if (res := alc ._parse (message , ctx )).matched :
425
432
return res
426
433
analyser = command_manager .require (self )
427
- argv = command_manager . resolve ( self )
434
+ argv = analyser . argv
428
435
argv .enter (ctx ).build (message )
429
436
if argv .message_cache and (res := command_manager .get_record (argv .token )):
430
437
return res
0 commit comments