aiscript icon indicating copy to clipboard operation
aiscript copied to clipboard

キーにJSON5における識別子を使えるようにする

Open takejohn opened this issue 1 year ago • 7 comments

目的

オブジェクトリテラルのプロパティ名に予約語も書けるようにしたい

現状

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

takejohn avatar Dec 30 '24 13:12 takejohn

JSON5Identifier: https://spec.json5.org/#prod-JSON5Identifier Misskeyの拡張APIにおいて、Ui:C:stringInput関数などの引数のプロパティにdefaultがあるが、 AiScriptがバージョン1.0.0になるとdefaultが予約語となるため、既存のコードが動かなくなってしまう懸念がある。

これとタイトルの

キーにJSON5における識別子を使えるようにする

の関連性がよくわからないので説明を頂いてもよろしいですか?

FineArchs avatar Dec 30 '24 16:12 FineArchs

説明を追加・修正しました 🙏 (issueテンプレートが欲しくなってきたな……)

takejohn avatar Dec 31 '24 05:12 takejohn

だいたい理解しました。

  • オブジェクトのキーにおける予約語解禁
  • オブジェクトのキーを文字列リテラルで書く記法
  • 空白や改行などの特殊文字のエスケープ記法
  • Identifierの使用可能文字への$の追加

をしたい感じですね。賛成です。

FineArchs avatar Dec 31 '24 08:12 FineArchs

※JS・JSON5との互換性よりlightweightさを優先したい気持ちはあるから、あまり実際には現れない細かい仕様まで厳密に追従する必要はなさそう

syuilo avatar Sep 12 '25 08:09 syuilo

AiScript的には識別子にはアルファベットと数字と一部の記号しか使えなくて良さそうと思ってます(=日本語などは使えない)

ご意見募集中

syuilo avatar Sep 12 '25 11:09 syuilo

(実際にJSなどでそれ以外の文字が識別子に使われているのは、個人的にまず見たことがないというのと、仕様をシンプルに保つため)

syuilo avatar Sep 12 '25 11:09 syuilo

一旦制限を緩めると後から撤回するのは困難だから緩める場合は慎重に判断したい

syuilo avatar Sep 12 '25 11:09 syuilo