Skip to content

Commit e13f03a

Browse files
committed
Merge branch 'master' into aiscript-next
2 parents 65346dd + 0bd93ab commit e13f03a

16 files changed

Lines changed: 572 additions & 284 deletions

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
[Read translated version (en)](./translations/en/CHANGELOG.md)
22

3+
# 1.1.1
4+
5+
- Fix: オブジェクトリテラルのプロパティ名に一部の予約語を記述できなかった問題を修正
6+
7+
# 1.1.0
8+
9+
- オブジェクトリテラルのプロパティ名に予約語を直接記述できるようになりました。
10+
- Fix: `Math:gen_rng`のアルゴリズム`chacha20`および`rc4`が非セキュアコンテクスト下では動作しないため、そのような環境下では`options.algorithm`のデフォルトを`rc4_legacy`に変更
11+
312
# 1.0.0
413

514
- 新しいAiScriptパーサーを実装

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ PRを作る際は、`npm run api`コマンドを実行してAPIレポートを
3333
### Codecov
3434
このプロジェクトではカバレッジの計測に[Codecov](https://about.codecov.io/)を導入しています。カバレッジは、コードがどれくらいテストでカバーされているかを表すものです。
3535

36-
カバレッジ計測はCIで自動的に行われ、特に操作は必要ありません。カバレッジは[ここ](https://codecov.io/gh/syuilo/aiscript)から見ることができます。
36+
カバレッジ計測はCIで自動的に行われ、特に操作は必要ありません。カバレッジは[ここ](https://codecov.io/gh/aiscript-dev/aiscript)から見ることができます。
3737

3838
また、各PRに対してもそのブランチのカバレッジが自動的に計算され、マージ先のカバレッジとの差分を含んだレポートがCodecovのbotによりコメントされます。これにより、そのPRをマージすることでどれくらいカバレッジが増加するのか/減少するのかを確認することができます。
3939

docs/branches-and-releasing.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
このドキュメントは、記載時点でのブランチの運用方法を記録したaiscript-dev member向けの参考資料です。
2+
現在の実態とは乖離した内容が記載されている可能性があります。
3+
4+
## ブランチの運用
5+
### masterブランチ
6+
デフォルトブランチであり、マイナーリリース用ブランチです。非破壊的変更のプルリクエストはここ向けに作成してください。
7+
[publish-nightly](/.github/workflows/publish-nightly.yml)ワークフローにより、変更があると開発中バージョン(`dev-<DATE>`)がpublishされます。
8+
### aiscript-nextブランチ
9+
メジャーリリース用ブランチで、破壊的変更のプルリクエストはここ向けに作成してください。
10+
定期的にmasterブランチをマージします。(このときはsquashマージは使用しないでください)
11+
[publish-nightly](/.github/workflows/publish-nightly.yml)ワークフローにより、変更があると開発中バージョン(`next-<DATE>`)がpublishされます。
12+
メジャーリリースが近いときはmasterに合流されていることもあります。その場合は破壊的変更・非破壊的変更共にmasterにpushします。
13+
### gh-pagesブランチ
14+
[簡易playground](https://aiscript-dev.github.io/aiscript/)のデプロイ用です。
15+
### bugfix用ブランチ
16+
特にブランチ名は決まっていません。bugfix用に作成され、リリースされると削除されます。
17+
作成時は前回リリース時のコミットから分岐してください。
18+
### その他のブランチ
19+
特に用途は決まっていません。aiscript-devのmemberが自由に作成・使用することができます。
20+
dependabotのPRや古いプロジェクトのアーカイブなどがあります。
21+
22+
## 新バージョンをリリースするときの流れ
23+
### bugfixリリース
24+
バグ修正。できるだけ早急にリリースを目指す。バージョンx.y.zのzを一つ上げる。
25+
- bugfix用のブランチを作成。前回リリース時のコミットから分岐する。
26+
- master(マイナーリリース用ブランチ)ではないので注意。
27+
- bugfixブランチに修正用PRをマージ/コミットをプッシュ。
28+
- bugfixブランチで`npm version patch && npm run pre-release`を実行し、結果をプッシュ。
29+
- bugfixブランチで`npm publish`
30+
- bugfixブランチで`git tag <バージョン名> && git push --tag`
31+
- bugfixブランチをmasterブランチに合流。
32+
- package.jsonなどのバージョンにコンフリクトが生じた場合、masterのものを反映。
33+
### マイナーリリース
34+
非破壊的変更。バージョンx.y.zのyを一つ上げ、zを0にする。
35+
- 事前にdependabotの更新があれば極力マージする。
36+
- masterブランチで`npm run pre-release`を実行し、結果をプッシュ。
37+
- masterブランチで`npm publish`
38+
- masterブランチで`git tag <バージョン名> && git push --tag`
39+
- masterブランチで`npm version minor && npm run build && npm run api`を実行、結果をプッシュ。
40+
### メジャーリリース
41+
破壊的変更。バージョンx.y.zのxを一つ上げ、yとzを0にする。
42+
- aiscript-nextブランチをmasterブランチに合流。
43+
- package.jsonなどのバージョンにコンフリクトが生じた場合、aiscript-nextのものを反映。
44+
- この合流は、次回リリースがメジャーリリースになると決まった段階でいつでもおこなってよい。
45+
- dependabotの更新があれば極力マージする。
46+
- masterブランチで`npm run pre-release`を実行し、結果をプッシュ。
47+
- masterブランチで`npm publish`
48+
- masterブランチで`git tag <バージョン名> && git push --tag`
49+
- masterブランチからaiscript-nextブランチを再作成。
50+
- aiscript-nextブランチで`npm version major && npm run build && npm run api`を実行、結果をプッシュ。
51+
- masterブランチで`npm version minor && npm run build && npm run api`を実行、結果をプッシュ。
52+
### 補遺
53+
#### publish後にnpm version minor/majorをするのはなぜ?
54+
本リポジトリにおけるpackage.jsonのバージョンは、masterは「次のマイナーリリースのバージョン」、aiscript-nextは「次のメジャーリリースのバージョン」の番号で保持することにしています。
55+
これは主に、毎晩自動で行われる開発中バージョンのpublishの都合に関係しています。
56+
開発中(プレリリース)バージョンのバージョン番号は、[semantic versioning 2.0の定義では](https://semver.org/lang/ja/#spec-item-9)「次回リリース予定のバージョン」にハイフンを挟んで何かしらの文字列を置くということになっています。
57+
このバージョニングを機械的に行うには、元々「次回リリース予定のバージョン」になっているpackage.jsonのバージョンに適当な文字列を接尾するという形が都合がいいのです。
58+
(ちなみに設備される文字列は、masterのプレリリースでは`dev-<リリース日時>`、aiscript-nextでは`next-<リリース日時>`になっています)

eslint.config.mjs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import importPlugin from "eslint-plugin-import";
2+
import unusedImports from "eslint-plugin-unused-imports";
23
import js from "@eslint/js";
34
import ts from 'typescript-eslint';
45

@@ -13,6 +14,9 @@ export default ts.config({
1314
importPlugin.flatConfigs.recommended,
1415
importPlugin.flatConfigs.typescript,
1516
],
17+
plugins: {
18+
"unused-imports": unusedImports,
19+
},
1620

1721
languageOptions: {
1822
ecmaVersion: 5,
@@ -116,10 +120,15 @@ export default ts.config({
116120
],
117121
}],
118122

119-
"@typescript-eslint/no-unused-vars": ["warn", {
120-
argsIgnorePattern: "^_",
123+
"@typescript-eslint/no-unused-vars": "off",
124+
"unused-imports/no-unused-imports": "warn",
125+
"unused-imports/no-unused-vars": ["warn", {
126+
vars: "all",
121127
varsIgnorePattern: "^_",
122-
caughtErrorsIgnorePattern: "^_",
128+
args: "after-used",
129+
argsIgnorePattern: "^_",
130+
caughtErrors: "none",
131+
// caughtErrorsIgnorePattern: "^_",
123132
destructuredArrayIgnorePattern: "^_",
124133
}],
125134
},

package-lock.json

Lines changed: 19 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"chalk": "5.5.0",
4343
"eslint": "9.32.0",
4444
"eslint-plugin-import": "2.32.0",
45+
"eslint-plugin-unused-imports": "4.2.0",
4546
"semver": "7.7.2",
4647
"ts-node": "10.9.2",
4748
"typescript": "5.9.2",

src/error.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { TokenKind } from './parser/token.js';
21
import type { Pos } from './node.js';
32

43
export abstract class AiScriptError extends Error {

src/interpreter/index.ts

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ export class Interpreter {
265265
) {
266266
value.name = nsScope.getNsPrefix() + node.dest.name;
267267
}
268-
await this.define(nsScope, node.dest, value, node.mut);
268+
this.define(nsScope, node.dest, value, node.mut);
269269

270270
break;
271271
}
@@ -309,7 +309,7 @@ export class Interpreter {
309309
) {
310310
value.name = nsScope.getNsPrefix() + node.dest.name;
311311
}
312-
this.defineSync(nsScope, node.dest, value, node.mut);
312+
this.define(nsScope, node.dest, value, node.mut);
313313

314314
break;
315315
}
@@ -668,7 +668,7 @@ export class Interpreter {
668668
) {
669669
value.name = node.dest.name;
670670
}
671-
await this.define(scope, node.dest, value, node.mut);
671+
this.define(scope, node.dest, value, node.mut);
672672
return NULL;
673673
}
674674

@@ -1212,7 +1212,7 @@ export class Interpreter {
12121212
) {
12131213
value.name = node.dest.name;
12141214
}
1215-
this.defineSync(scope, node.dest, value, node.mut);
1215+
this.define(scope, node.dest, value, node.mut);
12161216
return NULL;
12171217
}
12181218

@@ -1667,34 +1667,7 @@ export class Interpreter {
16671667
}
16681668

16691669
@autobind
1670-
private async define(scope: Scope, dest: Ast.Expression, value: Value, isMutable: boolean): Promise<void> {
1671-
switch (dest.type) {
1672-
case 'identifier': {
1673-
scope.add(dest.name, { isMutable, value });
1674-
break;
1675-
}
1676-
case 'arr': {
1677-
assertArray(value);
1678-
await Promise.all(dest.value.map(
1679-
(item, index) => this.define(scope, item, value.value[index] ?? NULL, isMutable),
1680-
));
1681-
break;
1682-
}
1683-
case 'obj': {
1684-
assertObject(value);
1685-
await Promise.all([...dest.value].map(
1686-
([key, item]) => this.define(scope, item, value.value.get(key) ?? NULL, isMutable),
1687-
));
1688-
break;
1689-
}
1690-
default: {
1691-
throw new AiScriptRuntimeError('The left-hand side of an definition expression must be a variable.');
1692-
}
1693-
}
1694-
}
1695-
1696-
@autobind
1697-
private defineSync(scope: Scope, dest: Ast.Expression, value: Value, isMutable: boolean): void {
1670+
private define(scope: Scope, dest: Ast.Expression, value: Value, isMutable: boolean): void {
16981671
switch (dest.type) {
16991672
case 'identifier': {
17001673
scope.add(dest.name, { isMutable, value });
@@ -1703,14 +1676,14 @@ export class Interpreter {
17031676
case 'arr': {
17041677
assertArray(value);
17051678
dest.value.map(
1706-
(item, index) => this.defineSync(scope, item, value.value[index] ?? NULL, isMutable),
1679+
(item, index) => this.define(scope, item, value.value[index] ?? NULL, isMutable),
17071680
);
17081681
break;
17091682
}
17101683
case 'obj': {
17111684
assertObject(value);
17121685
[...dest.value].map(
1713-
([key, item]) => this.defineSync(scope, item, value.value.get(key) ?? NULL, isMutable),
1686+
([key, item]) => this.define(scope, item, value.value.get(key) ?? NULL, isMutable),
17141687
);
17151688
break;
17161689
}

0 commit comments

Comments
 (0)