Repository: syuilo/aiscript
Pull request #406 (2023-10-12 12:03:56)

Error値を生成する関数
<!-- ℹ お読みください
PRありがとうございます！ PRを作成する前に、以下をご確認ください:
- 可能であればタイトルに、以下で示すようなPRの種類が分かるキーワードをプリフィクスしてください。
  - fix / refactor / feat / enhance / perf / chore
  - また、PRの粒度が適切であることを確認してください。ひとつのPRに複数の種類の変更や関心を含めることは避けてください。
- このPRによって解決されるIssueがある場合は、そのIssueへの参照を本文内に含めてください。
- CHANGELOG.mdに変更点を追記してください。リファクタリングなど、利用者に影響を与えない変更についてはこの限りではありません。
- この変更により新たに作成、もしくは更新すべきドキュメントがないか確認してください。
- 機能追加やバグ修正をした場合は、可能であればテストケースを追加してください。
- テスト、Lintが通っていることを予め確認してください。
  - `npm run test`、`npm run lint`でぞれぞれ実施可能です
- `npm run api`を実行してAPIレポートを更新し、差分がある場合はコミットしてください。
ご協力ありがとうございます🤗
-->
<!-- ℹ README
Thank you for your PR! Before creating a PR, please check the following:
- If possible, prefix the title with a keyword that identifies the type of this PR, as shown below.
  - fix / refactor / feat / enhance / perf / chore
  - Also, make sure that the granularity of this PR is appropriate. Please do not include more than one type of change or interest in a single PR.
- If there is an Issue which will be resolved by this PR, please include a reference to the Issue in the text.
- Please add the summary of the changes to CHANGELOG.md. However, this is not necessary for changes that do not affect the users, such as refactoring.
- Check if there are any documents that need to be created or updated due to this change.
- If you have added a feature or fixed a bug, please add a test case if possible.
- Please make sure that tests and Lint are passed in advance.
  - You can run it with `npm run test` and `npm run lint`.
- Run `npm run api` to update the API report and commit it if there are any diffs.
Thanks for your cooperation 🤗
-->

# What
<!-- このPRで何をしたのか？ どう変わるのか？ -->
<!-- What did you do with this PR? How will it change things? -->
任意のエラー型の値を作成できる関数`Error:new`を追加します。
# Why
<!-- なぜそうするのか？ どういう意図なのか？ 何が困っているのか？ -->
<!-- Why do you do it? What are your intentions? What is the problem? -->
ユーザーがエラーを自ら定義出来るようにするため。

# Additional info (optional)
<!-- テスト観点など -->
<!-- Test perspective, etc -->
小規模の変更+他の作業ブランチのテストで使いたいので、３日何も無ければ自己判断でマージします。

codecov[bot]: ## [Codecov](https://app.codecov.io/gh/syuilo/aiscript/pull/406?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=syuilo) Report
All modified lines are covered by tests :white_check_mark:
> Comparison is base [(`fee1a09`)](https://app.codecov.io/gh/syuilo/aiscript/commit/fee1a09db91e8333aa0bc19c552e3edd024d8280?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=syuilo) 88.47% compared to head [(`d1ae29e`)](https://app.codecov.io/gh/syuilo/aiscript/pull/406?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=syuilo) 88.50%.

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##           master     #406      +/-   ##
==========================================
+ Coverage   88.47%   88.50%   +0.02%     
==========================================
  Files          21       21              
  Lines        3454     3461       +7     
  Branches      572      573       +1     
==========================================
+ Hits         3056     3063       +7     
  Misses        386      386              
  Partials       12       12              
```


| [Files](https://app.codecov.io/gh/syuilo/aiscript/pull/406?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=syuilo) | Coverage Δ | |
|---|---|---|
| [src/interpreter/lib/std.ts](https://app.codecov.io/gh/syuilo/aiscript/pull/406?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=syuilo#diff-c3JjL2ludGVycHJldGVyL2xpYi9zdGQudHM=) | `75.47% <100.00%> (+0.29%)` | :arrow_up: |


</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/syuilo/aiscript/pull/406?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=syuilo).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=syuilo).

FineArchs: 3日経ったのでマージします。

Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a280b09..fce174c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
 
 # 0.17.0
 - `package.json`を修正
+- `Error:new`関数でエラー型の値を生成できるように
 
 # 0.16.0
 - **ネームスペースのトップレベルに`var`は定義できなくなりました。(`let`は可能)**
diff --git a/docs/std.md b/docs/std.md
index ff65394..ed75da3 100644
--- a/docs/std.md
+++ b/docs/std.md
@@ -132,6 +132,10 @@ _codepoint_ は 0 以上、10FFFF<sub>16</sub> 以下である必要がありま
 ### @Obj:copy(_v_: obj): obj
 オブジェクトのコピーを生成します。  
 
+## :: Error
+### @Error:new(_name_: str, _info_?: value): error
+エラー型の値を作成します。
+
 ## :: Async
 ### @Async:interval(_interval_: num, _callback_: fn, _immediate_?: bool): fn
 指定した周期でコールバック関数を呼び出します。  
diff --git a/src/interpreter/lib/std.ts b/src/interpreter/lib/std.ts
index c49fdfe..b837d25 100644
--- a/src/interpreter/lib/std.ts
+++ b/src/interpreter/lib/std.ts
@@ -525,6 +525,13 @@ export const std: Record<string, Value> = {
 	}),
 	*/
 	//#endregion
+	
+	//#region Error
+	'Error:new': FN_NATIVE(([name, info]) => {
+		assertString(name);
+		return ERROR(name.value, info);
+	}),
+	//#endregion
 
 	//#region Async
 	'Async:interval': FN_NATIVE(async ([interval, callback, immediate], opts) => {


Test patch:
diff --git a/test/index.ts b/test/index.ts
index b1b9aac..8234f0c 100644
--- a/test/index.ts
+++ b/test/index.ts
@@ -2788,6 +2788,17 @@ describe('std', () => {
 		});
 	});
 
+	describe('Error', () => {
+		test.concurrent('new', async () => {
+			eq(
+				await exe(`
+				<: Error:new('ai', {chan: 'kawaii'})
+				`),
+				ERROR('ai', OBJ(new Map([['chan', STR('kawaii')]])))
+			);
+		});
+	});
+
 	describe('Json', () => {
 		test.concurrent('stringify: fn', async () => {
 			const res = await exe(`