Skip to content

Commit bf45cdb

Browse files
committed
📝 add alconna wildcard arg description
1 parent 14daf44 commit bf45cdb

File tree

5 files changed

+131
-5
lines changed

5 files changed

+131
-5
lines changed

.vitepress/config/index.mts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export default defineConfig({
1919
nav: nav,
2020
sidebar: sidebar,
2121
editLink: {
22-
pattern: 'https://github.com/ArcletProject/Documents/edit/refactor/:path',
22+
pattern: 'https://github.com/ArcletProject/Documents/edit/main/:path',
2323
text: '在 GitHub 编辑此页'
2424
},
2525
socialLinks: [
@@ -41,6 +41,9 @@ export default defineConfig({
4141
prev: '上一页',
4242
next: '下一页'
4343
},
44+
search: {
45+
provider: 'local',
46+
},
4447
darkModeSwitchLabel: '黑暗模式',
4548
lightModeSwitchTitle: '切换到浅色模式',
4649
darkModeSwitchTitle: '切换到黑暗模式',
@@ -60,5 +63,8 @@ export default defineConfig({
6063
config: (md) => {
6164
md.use(fence);
6265
}
66+
},
67+
rewrites: {
68+
'/docs/:path': '/:path',
6369
}
6470
})

tutorial/alconna/index.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<script setup>
2+
import { onMounted } from 'vue';
3+
onMounted(() => {
4+
if (typeof window !== 'undefined') {
5+
window.location.replace('/tutorial/alconna/v1');
6+
}
7+
})
8+
</script>

tutorial/alconna/v1.md

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,20 +189,91 @@ args = Args["foo", BasePattern("@\d+")]
189189

190190
#### MultiVar 与 KeyWordVar
191191

192-
`MultiVar` 是一个特殊的标注,用于告知解析器该参数可以接受多个值,类似于函数中的 `*args`,其构造方法形如 `MultiVar(str)`
192+
`MultiVar` 是一个特殊的标注,用于告知解析器该参数可以接受多个值,类似于函数中的 `*args`,其构造方法形如 `MultiVar(str)`其返回值为一个元组,包含了所有匹配到的值。
193193

194194
同样的还有 `KeyWordVar`,类似于函数中的 `*, name: type`,其构造方法形如 `KeyWordVar(str)`,用于告知解析器该参数为一个 keyword-only 参数。
195195

196-
:::info
197-
198-
`MultiVar``KeyWordVar` 组合时,代表该参数为一个可接受多个 key-value 的参数,类似于函数中的 `**kwargs`,其构造方法形如 `MultiVar(KeyWordVar(str))`
196+
`MultiVar``KeyWordVar` 组合时,代表该参数为一个可接受多个 key-value 的参数,类似于函数中的 `**kwargs`,其构造方法形如 `MultiVar(KeyWordVar(str))`。其返回值为一个字典,包含了所有匹配到的键值对。
199197

200198
`MultiVar``KeyWordVar` 也可以传入 `default` 参数,用于指定默认值
201199

202200
`MultiVar` 不能在 `KeyWordVar` 之后传入
203201

202+
:::code-group
203+
204+
```python [MultiVar]
205+
from arclet.alconna import Alconna, Args, MultiVar
206+
207+
alc = Alconna("test", Args["foo", MultiVar(str)])
208+
209+
res = alc.parse("test 123 456 789")
210+
print(res.query("foo")) # ('123', '456', '789')
211+
```
212+
213+
```python [MultiVar(KeyWordVar)]
214+
from arclet.alconna import Alconna, Args, MultiVar, KeyWordVar
215+
216+
alc = Alconna("test", Args["foo", MultiVar(KeyWordVar(str))])
217+
218+
res = alc.parse("test 123=456 789=abc")
219+
print(res.query("foo")) # {'123': '456', '789': 'abc'}
220+
```
221+
222+
:::
223+
224+
#### StrMulti
225+
226+
`StrMulti` 是一个特殊的 `BasePattern`
227+
228+
其基于 `MultiVar(str)`, 用于匹配多个字符串参数,并返回拼接后的字符串。
229+
230+
```python
231+
from arclet.alconna import Alconna, Args, StrMulti
232+
233+
alc = Alconna("test", Args["foo", StrMulti])
234+
235+
res = alc.parse("test 123 456 789")
236+
print(res.query("foo")) # '123 456 789'
237+
```
238+
239+
#### 泛匹配
240+
241+
`Args` 通过设置 `var``AllParam` 来实现泛匹配。
242+
243+
`AllParam` 是一个特殊的 `BasePattern`,从 `arclet.alconna.typing` 中导入。
244+
245+
当命令解析进行到 `AllParam` 时,传入命令的**后续所有数据都会被匹配到该参数上**
246+
247+
:::code-group
248+
249+
```python [直接使用]
250+
from arclet.alconna import Alconna, Args, AllParam
251+
252+
alc = Alconna("test", Args["foo", AllParam])
253+
254+
res = alc.parse("test 123 456 789")
255+
print(res.query("foo")) # ['123', '456', '789']
256+
```
257+
258+
```python [配置类型]
259+
from arclet.alconna import Alconna, Args, AllParam
260+
261+
alc = Alconna("test", Args["foo", AllParam(str)])
262+
263+
res = alc.parse(["test", "123", "456", 789])
264+
print(res.query("foo")) # ['123', '456']
265+
```
266+
:::
267+
268+
可以注意到,`AllParam` 的返回值是一个列表,包含了所有匹配到的值。
269+
270+
:::info
271+
272+
返回值的类型与 `Argv.converter` 有关,默认处理为列表。而在其他场景继承并修改了 `Argv` 的情况下,返回值可能会有所不同。
273+
204274
:::
205275

276+
206277
### 参数单元(Arg)
207278

208279
**Arg****Args** 的最小单位:

tutorial/alconna/v2.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,39 @@ args = Args.foo(Pattern.regex_match("@\d+"))
252252
- `"str"`: 表示接受多个值,但会被合并为一个字符串
253253
:::
254254

255+
256+
`wildcard` 的值为 `True` 时,表示该参数为泛匹配参数。当命令解析进行到该参数时,传入命令的**后续所有数据都会被匹配到该参数上**
257+
258+
:::code-group
259+
260+
```python [任意匹配]
261+
from typing import Any
262+
from arclet.alconna import Alconna, Args
263+
264+
alc = Alconna("test", Args.foo(Any, wildcard=True))
265+
266+
res = alc.parse("test 123 456 789")
267+
print(res.query("foo")) # ['123', '456', '789']
268+
```
269+
270+
```python [类型匹配]
271+
from arclet.alconna import Alconna, Args
272+
273+
alc = Alconna("test", Args.foo(str, wildcard=True))
274+
275+
res = alc.parse(["test", "123", "456", 789])
276+
print(res.query("foo")) # ['123', '456']
277+
```
278+
:::
279+
280+
可以注意到,泛匹配的返回值是一个列表,包含了所有匹配到的值。
281+
282+
:::info
283+
284+
返回值的类型与 `Argv.converter` 有关,默认处理为列表。而在其他场景继承并修改了 `Argv` 的情况下,返回值可能会有所不同。
285+
286+
:::
287+
255288
## 选项与子命令(Option & Subcommand)
256289

257290
**Option****Subcommand** 是 Alconna 中的两个重要组件。

tutorial/nepattern/index.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<script setup>
2+
import { onMounted } from 'vue';
3+
onMounted(() => {
4+
if (typeof window !== 'undefined') {
5+
window.location.replace('/tutorial/nepattern/v0');
6+
}
7+
})
8+
</script>

0 commit comments

Comments
 (0)