@mirascript/help 0.1.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/index.d.ts +79 -0
  2. package/dist/index.js +78 -0
  3. package/package.json +21 -0
  4. package/scripts/build.js +165 -0
  5. package/src/keyword/and.md +26 -0
  6. package/src/keyword/break.md +32 -0
  7. package/src/keyword/case.md +16 -0
  8. package/src/keyword/const.md +10 -0
  9. package/src/keyword/continue.md +14 -0
  10. package/src/keyword/effect.md +6 -0
  11. package/src/keyword/else.md +32 -0
  12. package/src/keyword/false.md +5 -0
  13. package/src/keyword/finally.md +6 -0
  14. package/src/keyword/fn.md +35 -0
  15. package/src/keyword/for.md +43 -0
  16. package/src/keyword/global.md +16 -0
  17. package/src/keyword/handle.md +6 -0
  18. package/src/keyword/if.md +40 -0
  19. package/src/keyword/in.md +44 -0
  20. package/src/keyword/inf.md +10 -0
  21. package/src/keyword/is.md +11 -0
  22. package/src/keyword/let.md +11 -0
  23. package/src/keyword/loop.md +13 -0
  24. package/src/keyword/match.md +18 -0
  25. package/src/keyword/mod.md +6 -0
  26. package/src/keyword/mut.md +25 -0
  27. package/src/keyword/nan.md +10 -0
  28. package/src/keyword/nil.md +11 -0
  29. package/src/keyword/not.md +26 -0
  30. package/src/keyword/op.md +6 -0
  31. package/src/keyword/or.md +26 -0
  32. package/src/keyword/perform.md +6 -0
  33. package/src/keyword/pub.md +6 -0
  34. package/src/keyword/resume.md +6 -0
  35. package/src/keyword/return.md +12 -0
  36. package/src/keyword/true.md +5 -0
  37. package/src/keyword/try.md +6 -0
  38. package/src/keyword/type.md +10 -0
  39. package/src/keyword/underscore.md +16 -0
  40. package/src/keyword/use.md +6 -0
  41. package/src/keyword/where.md +6 -0
  42. package/src/keyword/while.md +12 -0
  43. package/src/operator/arrow.md +6 -0
  44. package/src/operator/assign.md +23 -0
  45. package/src/operator/asterisk.md +9 -0
  46. package/src/operator/asterisk_assign.md +11 -0
  47. package/src/operator/brace.md +26 -0
  48. package/src/operator/bracket.md +32 -0
  49. package/src/operator/caret.md +10 -0
  50. package/src/operator/caret_assign.md +11 -0
  51. package/src/operator/colon.md +29 -0
  52. package/src/operator/colon_colon.md +10 -0
  53. package/src/operator/comma.md +13 -0
  54. package/src/operator/dot.md +15 -0
  55. package/src/operator/equal.md +43 -0
  56. package/src/operator/exclamation.md +23 -0
  57. package/src/operator/greater.md +10 -0
  58. package/src/operator/greater_equal.md +9 -0
  59. package/src/operator/half_open_range.md +12 -0
  60. package/src/operator/less.md +9 -0
  61. package/src/operator/less_equal.md +9 -0
  62. package/src/operator/logical_and.md +9 -0
  63. package/src/operator/logical_and_assign.md +11 -0
  64. package/src/operator/logical_or.md +9 -0
  65. package/src/operator/logical_or_assign.md +11 -0
  66. package/src/operator/minus.md +10 -0
  67. package/src/operator/minus_assign.md +11 -0
  68. package/src/operator/not_equal.md +10 -0
  69. package/src/operator/null_coalescing.md +10 -0
  70. package/src/operator/null_coalescing_assign.md +14 -0
  71. package/src/operator/paren.md +39 -0
  72. package/src/operator/percent.md +9 -0
  73. package/src/operator/percent_assign.md +11 -0
  74. package/src/operator/plus.md +10 -0
  75. package/src/operator/plus_assign.md +11 -0
  76. package/src/operator/question.md +9 -0
  77. package/src/operator/question_colon.md +12 -0
  78. package/src/operator/semicolon.md +13 -0
  79. package/src/operator/slash.md +9 -0
  80. package/src/operator/slash_assign.md +11 -0
  81. package/src/operator/spread_range.md +31 -0
  82. package/src/operator/tilde_equal.md +24 -0
  83. package/src/operator/tilde_not_equal.md +10 -0
@@ -0,0 +1,44 @@
1
+ ---
2
+ token: 'in'
3
+ ---
4
+
5
+ `in` 用于“包含/存在”判断,以及 `for` 循环。
6
+
7
+ ---
8
+
9
+ 对于 `array` 类型,`in` 用于判断某个元素是否在数组中存在:
10
+
11
+ ```mira
12
+ fn is_spring(month) {
13
+ month in [3, 4, 5]
14
+ }
15
+ ```
16
+
17
+ ---
18
+
19
+ 对于 `record` / `module` / `extern` 类型,`in` 用于判断某个键是否在容器中存在:
20
+
21
+ ```mira
22
+ let record = (a: 1, b: 2, c: 3);
23
+ let a_exists = 'a' in record; // true
24
+ ```
25
+
26
+ ---
27
+
28
+ 也可与 `global` 关键字结合使用,判断全局变量是否存在:
29
+
30
+ ```mira
31
+ if 'my_global' in global {
32
+ my_global += 1;
33
+ }
34
+ ```
35
+
36
+ ---
37
+
38
+ 同时,`for` 循环也使用 `in`:
39
+
40
+ ```mira
41
+ for i in 1..3 {
42
+ // i: 1, 2, 3
43
+ }
44
+ ```
@@ -0,0 +1,10 @@
1
+ ---
2
+ token: 'inf'
3
+ ---
4
+
5
+ `inf` 是正无穷大的 `number` 常量。
6
+
7
+ ```mira
8
+ inf > 1e100; // true
9
+ -inf < 0; // true
10
+ ```
@@ -0,0 +1,11 @@
1
+ ---
2
+ token: 'is'
3
+ ---
4
+
5
+ `is` 用于模式匹配:`value is pattern`,结果为 `boolean`。
6
+
7
+ ```mira
8
+ 1 is 1; // true
9
+ 1 is > 0; // true
10
+ (a: 1) is (a: x); // true(并绑定 x)
11
+ ```
@@ -0,0 +1,11 @@
1
+ ---
2
+ token: 'let'
3
+ ---
4
+
5
+ `let` 用于声明局部变量。
6
+
7
+ ```mira
8
+ let x = 1;
9
+ let y = x + 2;
10
+ let mut z = y * 3;
11
+ ```
@@ -0,0 +1,13 @@
1
+ ---
2
+ token: 'loop'
3
+ ---
4
+
5
+ `loop` 创建一个无限循环,通常配合 `break` 退出。
6
+
7
+ ```mira
8
+ let mut i = 0;
9
+ loop {
10
+ i += 1;
11
+ if i >= 3 { break; }
12
+ }
13
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ token: 'match'
3
+ ---
4
+
5
+ `match` 表达式对一个值进行分支匹配,由多个 `case` 组成。
6
+
7
+ ```mira
8
+ fn classify {
9
+ match it {
10
+ case (0, 0) { "Origin" }
11
+ case (x, 0) if x > 0 { "Positive X-Axis (x=$x)" }
12
+ case (x, 0) if x < 0 { "Negative X-Axis (x=$x)" }
13
+ case (0, y) { "Y-Axis (y=$y)" }
14
+ case (x, y) { "Somewhere else (x=$x, y=$y)" }
15
+ case _ { "Not a point" }
16
+ }
17
+ }
18
+ ```
@@ -0,0 +1,6 @@
1
+ ---
2
+ token: 'mod'
3
+ reserved: true
4
+ ---
5
+
6
+ `mod` 是保留关键字。
@@ -0,0 +1,25 @@
1
+ ---
2
+ token: 'mut'
3
+ ---
4
+
5
+ `mut` 用于声明可变变量。
6
+
7
+ ---
8
+
9
+ 使用 `let` 语句时声明一个可变变量:
10
+
11
+ ```mira
12
+ let mut x = 1;
13
+ x += 2;
14
+ // x == 3
15
+ ```
16
+
17
+ ---
18
+
19
+ 在模式匹配中声明一个可变绑定:
20
+
21
+ ```mira
22
+ let (mut a, b) = (1, 2);
23
+ a += 10;
24
+ // b += 10; // 这行代码会报错,因为 b 是不可变的
25
+ ```
@@ -0,0 +1,10 @@
1
+ ---
2
+ token: 'nan'
3
+ ---
4
+
5
+ `nan` 是一个特殊的 `number` 值(Not a Number)。它与任何值都不相等(包括它自己)。
6
+
7
+ ```mira
8
+ nan == nan; // false
9
+ nan =~ nan; // false
10
+ ```
@@ -0,0 +1,11 @@
1
+ ---
2
+ token: 'nil'
3
+ ---
4
+
5
+ `nil` 表示“空值”。当访问不存在的字段、对 `nil` 进行空安全链式调用等场景时,结果也会是 `nil`。
6
+
7
+ ```mira
8
+ let x = nil;
9
+ let y = x ?? 0; // 0
10
+ let z = x.anything; // nil(空安全访问)
11
+ ```
@@ -0,0 +1,26 @@
1
+ ---
2
+ token: 'not'
3
+ ---
4
+
5
+ `not` 用于在模式匹配中取反一个模式,也可以作为 `!` 运算符的替代写法。
6
+
7
+ ---
8
+
9
+ 逻辑非模式:
10
+
11
+ ```mira
12
+ fn is_not_weekend(day) {
13
+ day is not 6 and not 7
14
+ }
15
+ ```
16
+
17
+ ---
18
+
19
+ 逻辑非运算符:
20
+
21
+ ```mira
22
+ fn is_minor(age) {
23
+ // 等同于 !(age >= 18)
24
+ not (age >= 18)
25
+ }
26
+ ```
@@ -0,0 +1,6 @@
1
+ ---
2
+ token: 'op'
3
+ reserved: true
4
+ ---
5
+
6
+ `op` 是保留关键字。
@@ -0,0 +1,26 @@
1
+ ---
2
+ token: 'or'
3
+ ---
4
+
5
+ `or` 用于在模式匹配中组合多个模式,也可以作为 `||` 运算符的替代写法。
6
+
7
+ ---
8
+
9
+ 逻辑或模式:
10
+
11
+ ```mira
12
+ fn is_weekend(day) {
13
+ day is 6 or 7
14
+ }
15
+ ```
16
+
17
+ ---
18
+
19
+ 逻辑或运算符:
20
+
21
+ ```mira
22
+ fn is_superuser(role) {
23
+ // 等同于 role == "admin" || role == "superuser"
24
+ role == "admin" or role == "superuser"
25
+ }
26
+ ```
@@ -0,0 +1,6 @@
1
+ ---
2
+ token: 'perform'
3
+ reserved: true
4
+ ---
5
+
6
+ `perform` 是保留关键字。
@@ -0,0 +1,6 @@
1
+ ---
2
+ token: 'pub'
3
+ reserved: true
4
+ ---
5
+
6
+ `pub` 是保留关键字。
@@ -0,0 +1,6 @@
1
+ ---
2
+ token: 'resume'
3
+ reserved: true
4
+ ---
5
+
6
+ `resume` 是保留关键字。
@@ -0,0 +1,12 @@
1
+ ---
2
+ token: 'return'
3
+ ---
4
+
5
+ `return` 用于从函数中返回值。
6
+
7
+ ```mira
8
+ fn abs {
9
+ if it < 0 { return -it; }
10
+ return it;
11
+ }
12
+ ```
@@ -0,0 +1,5 @@
1
+ ---
2
+ token: 'true'
3
+ ---
4
+
5
+ `true` 是布尔字面量,表示逻辑真。
@@ -0,0 +1,6 @@
1
+ ---
2
+ token: 'try'
3
+ reserved: true
4
+ ---
5
+
6
+ `try` 是保留关键字。
@@ -0,0 +1,10 @@
1
+ ---
2
+ token: 'type'
3
+ ---
4
+
5
+ `type` 用于获得值的类型名字符串。
6
+
7
+ ```mira
8
+ type(1); // "number"
9
+ nil::type(); // "nil"(扩展调用写法)
10
+ ```
@@ -0,0 +1,16 @@
1
+ ---
2
+ token: '_'
3
+ ---
4
+
5
+ `_` 是弃元关键字,用于在模式匹配中匹配并忽略任意值。
6
+
7
+ ```mira
8
+ let (_, y) = (1, 2); // y == 2
9
+
10
+ fn head {
11
+ match it {
12
+ case [x, ..] { x }
13
+ case _ { nil }
14
+ }
15
+ }
16
+ ```
@@ -0,0 +1,6 @@
1
+ ---
2
+ token: 'use'
3
+ reserved: true
4
+ ---
5
+
6
+ `use` 是保留关键字。
@@ -0,0 +1,6 @@
1
+ ---
2
+ token: 'where'
3
+ reserved: true
4
+ ---
5
+
6
+ `where` 是保留关键字。
@@ -0,0 +1,12 @@
1
+ ---
2
+ token: 'while'
3
+ ---
4
+
5
+ `while` 循环在条件为 `true` 时重复执行循环体。
6
+
7
+ ```mira
8
+ let mut i = 0;
9
+ while i < 3 {
10
+ i += 1;
11
+ }
12
+ ```
@@ -0,0 +1,6 @@
1
+ ---
2
+ token: '->'
3
+ reserved: true
4
+ ---
5
+
6
+ `->` 用于在文档中标记函数的返回值类型,在 MiraScript 代码中不使用。
@@ -0,0 +1,23 @@
1
+ ---
2
+ token: '='
3
+ ---
4
+
5
+ `=` 用于赋值。
6
+
7
+ ---
8
+
9
+ 声明时初始化:
10
+
11
+ ```mira
12
+ let x = 1;
13
+ const @y = 2;
14
+ ```
15
+
16
+ ---
17
+
18
+ 对可变变量/可写字段赋值:
19
+
20
+ ```mira
21
+ let mut x = 1;
22
+ x = x + 1;
23
+ ```
@@ -0,0 +1,9 @@
1
+ ---
2
+ token: '*'
3
+ ---
4
+
5
+ `*` 用于乘法。
6
+
7
+ ```mira
8
+ 2 * 3; // 6
9
+ ```
@@ -0,0 +1,11 @@
1
+ ---
2
+ token: '*='
3
+ ---
4
+
5
+ `*=` 是复合赋值,`x *= y` 等价于 `x = x * y`。
6
+
7
+ ```mira
8
+ let mut x = 2;
9
+ x *= 3;
10
+ // x == 6
11
+ ```
@@ -0,0 +1,26 @@
1
+ ---
2
+ token: ['{', '}']
3
+ ---
4
+
5
+ `{ }` 用于表达式块或 JSON 风格记录字面量。
6
+
7
+ ---
8
+
9
+ 表达式块:
10
+
11
+ ```mira
12
+ let x = { 1 + 2 };
13
+ ```
14
+
15
+ ---
16
+
17
+ 在 JSON 风格记录字面量中,键名必须使用引号括起来:
18
+
19
+ ```mira
20
+ let obj = { "x": 1, "y": 2, "n": nil };
21
+ ```
22
+
23
+ 注意:
24
+
25
+ - JSON 风格记录字面量不能为空,要声明一个空记录,请用 `()`;
26
+ - 键和值仍为 MiraScript 表达式,因此需要使用 `nil` 来表示空值,而不是 `null`。
@@ -0,0 +1,32 @@
1
+ ---
2
+ token: ['[', ']']
3
+ ---
4
+
5
+ `[ ]` 用于数组字面量、索引访问与切片。
6
+
7
+ ---
8
+
9
+ 数组字面量:
10
+
11
+ ```mira
12
+ let arr = [1, 2, 3];
13
+ ```
14
+
15
+ ---
16
+
17
+ 索引访问:
18
+
19
+ ```mira
20
+ let first = arr[0];
21
+ let last = arr[-1];
22
+ let value = record["key"];
23
+ ```
24
+
25
+ ---
26
+
27
+ 数组切片:
28
+
29
+ ```mira
30
+ let subarr1 = arr[0..1]; // 取前两个元素
31
+ let subarr2 = arr[..<-1]; // 取到倒数第一个元素(不含)
32
+ ```
@@ -0,0 +1,10 @@
1
+ ---
2
+ token: '^'
3
+ ---
4
+
5
+ `^` 用于乘方,结合性为从右到左。
6
+
7
+ ```mira
8
+ 2 ^ 3; // 8
9
+ 2 ^ 3 ^ 2; // 2^(3^2)
10
+ ```
@@ -0,0 +1,11 @@
1
+ ---
2
+ token: '^='
3
+ ---
4
+
5
+ `^=` 是复合赋值,`x ^= y` 等价于 `x = x ^ y`。
6
+
7
+ ```mira
8
+ let mut x = 2;
9
+ x ^= 3;
10
+ // x == 8
11
+ ```
@@ -0,0 +1,29 @@
1
+ ---
2
+ token: ':'
3
+ ---
4
+
5
+ `:` 用于记录字面量、条件表达式和插值格式。
6
+
7
+ ---
8
+
9
+ 在记录字面量中,`:` 用于分隔字段名和字段值。
10
+
11
+ ```mira
12
+ let r = (x: 1, y: 2);
13
+ ```
14
+
15
+ ---
16
+
17
+ 在条件表达式中,`:` 用于分隔条件的不同分支。
18
+
19
+ ```mira
20
+ let status = score >= 60 ? "及格" : "不及格";
21
+ ```
22
+
23
+ ---
24
+
25
+ 在插值格式中,`:` 用于指定格式化选项。在指定格式化选项时,必须使用圆括号 `$(expr:format)`。
26
+
27
+ ```mira
28
+ debug_print("π 的值约为 $(PI:.2)"); // 输出: π 的值约为 3.14
29
+ ```
@@ -0,0 +1,10 @@
1
+ ---
2
+ token: '::'
3
+ ---
4
+
5
+ `::` 用于扩展调用。
6
+
7
+ ```mira
8
+ "Hello"::chars()::join("");
9
+ // 相当于 join(chars("Hello"), "");
10
+ ```
@@ -0,0 +1,13 @@
1
+ ---
2
+ token: ','
3
+ ---
4
+
5
+ `,` 用于分隔参数、数组元素、记录字段等。
6
+
7
+ ```mira
8
+ let arr = [1, 2, 3];
9
+ let r = (a: 1, b: 2);
10
+
11
+ fn f(a, b, c) { a + b + c }
12
+ f(1, 2, 3);
13
+ ```
@@ -0,0 +1,15 @@
1
+ ---
2
+ token: '.'
3
+ ---
4
+
5
+ `.` 用于成员访问。
6
+
7
+ ```mira
8
+ let r = (a: 1);
9
+ r.a; // 1
10
+ r.b; // nil
11
+
12
+ let arr = [10, 20];
13
+ arr.0; // 10
14
+ arr.2; // nil
15
+ ```
@@ -0,0 +1,43 @@
1
+ ---
2
+ token: '=='
3
+ ---
4
+
5
+ 使用 `==` 运算符可以比较两个值是否严格相等。
6
+
7
+ ---
8
+
9
+ 对于原始值,如果它们的类型和值都相同,则认为它们相等。
10
+
11
+ ```mira
12
+ 5 == 5; // true
13
+ "hello" == "hello"; // true
14
+ true == true; // true
15
+ 5 == "5"; // false
16
+ ```
17
+
18
+ 特别地,对于 `number` 类型的值 `nan`,它与任何值都不相等,包括它自己。
19
+
20
+ ```mira
21
+ nan == nan; // false
22
+ ```
23
+
24
+ ---
25
+
26
+ 对于 `array` 和 `record`,只有他们的元素和属性都相等时,才认为它们相等。
27
+
28
+ ```mira
29
+ [1, 2, 3] == [1, 2, 3]; // true
30
+ (a: 1, b: 2) == (a: 1, b: 2); // true
31
+ [1, 2, 3] == [1, 2, 4]; // false
32
+ ```
33
+
34
+ ---
35
+
36
+ 对于 `function` `module` 和 `extern`,只有它们引用的是同一个对象时,才认为它们相等。
37
+
38
+ ```mira
39
+ let fn1 = fn() { return 1; };
40
+ let fn2 = fn() { return 1; };
41
+ fn1 == fn1; // true
42
+ fn1 == fn2; // false
43
+ ```
@@ -0,0 +1,23 @@
1
+ ---
2
+ token: '!'
3
+ ---
4
+
5
+ `!` 既可以作为前缀逻辑非,也可以作为后缀非空断言。
6
+
7
+ ---
8
+
9
+ 逻辑非:
10
+
11
+ ```mira
12
+ !x // x 必须是 boolean
13
+ ```
14
+
15
+ ---
16
+
17
+ 非空断言:
18
+
19
+ ```mira
20
+
21
+ let x = nil;
22
+ x!; // panic
23
+ ```
@@ -0,0 +1,10 @@
1
+ ---
2
+ token: '>'
3
+ ---
4
+
5
+ `>` 用于“大于”比较。
6
+
7
+ ```mira
8
+ 2 > 1; // true
9
+ "b" > "a"; // true
10
+ ```
@@ -0,0 +1,9 @@
1
+ ---
2
+ token: '>='
3
+ ---
4
+
5
+ `>=` 用于“大于等于”比较。
6
+
7
+ ```mira
8
+ 2 >= 2; // true
9
+ ```
@@ -0,0 +1,12 @@
1
+ ---
2
+ token: '..<'
3
+ ---
4
+
5
+ `..<` 表示右开区间范围,包含起点,不包含终点。
6
+
7
+ ```mira
8
+ [1..<3]; // [1, 2]
9
+
10
+ let arr = [10, 20, 30, 40];
11
+ arr[1..<3]; // [20, 30]
12
+ ```
@@ -0,0 +1,9 @@
1
+ ---
2
+ token: '<'
3
+ ---
4
+
5
+ `<` 用于“小于”比较。
6
+
7
+ ```mira
8
+ 1 < 2; // true
9
+ ```
@@ -0,0 +1,9 @@
1
+ ---
2
+ token: '<='
3
+ ---
4
+
5
+ `<=` 用于“小于等于”比较。
6
+
7
+ ```mira
8
+ 2 <= 2; // true
9
+ ```