キーにJSON5における識別子を使えるようにする
目的
オブジェクトリテラルのプロパティ名に予約語も書けるようにしたい
現状
Misskeyの拡張APIにおいて、Ui:C:textInput関数などの引数のプロパティにdefaultがあるが、
AiScriptがバージョン1.0.0になるとdefaultが予約語となるため、既存のコードが動かなくなってしまう懸念がある。
例えば、Misskey Playだとこういうコードが動くが、
1.0.0になるとSyntax: unexpected token: DefaultKeywordのエラーになる。
/// @ 0.19.0
Ui:render([
Ui:C:textInput({
default: 'text',
})
])
解決策
オブジェクトリテラルのキー名に予約語を使えるようになる。 JSON5の識別子(=ECMAScriptにおけるIdentifierName)では、一部の非ASCII文字・$・Unicodeエスケープシーケンス・予約語も使えるため、それに準拠してみる。 JSON5Identifier: https://spec.json5.org/#prod-JSON5Identifier
JSON5Identifier: https://spec.json5.org/#prod-JSON5Identifier Misskeyの拡張APIにおいて、
Ui:C:stringInput関数などの引数のプロパティにdefaultがあるが、 AiScriptがバージョン1.0.0になるとdefaultが予約語となるため、既存のコードが動かなくなってしまう懸念がある。
これとタイトルの
キーにJSON5における識別子を使えるようにする
の関連性がよくわからないので説明を頂いてもよろしいですか?
説明を追加・修正しました 🙏 (issueテンプレートが欲しくなってきたな……)
だいたい理解しました。
- オブジェクトのキーにおける予約語解禁
- オブジェクトのキーを文字列リテラルで書く記法
- 空白や改行などの特殊文字のエスケープ記法
- Identifierの使用可能文字への$の追加
をしたい感じですね。賛成です。
※JS・JSON5との互換性よりlightweightさを優先したい気持ちはあるから、あまり実際には現れない細かい仕様まで厳密に追従する必要はなさそう
AiScript的には識別子にはアルファベットと数字と一部の記号しか使えなくて良さそうと思ってます(=日本語などは使えない)
ご意見募集中
(実際にJSなどでそれ以外の文字が識別子に使われているのは、個人的にまず見たことがないというのと、仕様をシンプルに保つため)
一旦制限を緩めると後から撤回するのは困難だから緩める場合は慎重に判断したい