nadesiko3 3.8.8 → 3.8.9
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.
- package/batch/command.txt +6 -804
- package/batch/doctest.mjs +3 -0
- package/batch/doctest.nako3 +514 -0
- package/batch/pickup_command.nako3 +0 -4
- package/core/package-lock.json +9 -12
- package/core/package.json +2 -2
- package/core/src/nako_core_version.mjs +2 -2
- package/core/src/nako_core_version.mts +2 -2
- package/core/src/nako_csv.mjs +9 -0
- package/core/src/nako_csv.mts +12 -0
- package/core/src/nako_gen.mjs +7 -3
- package/core/src/nako_gen.mts +7 -3
- package/core/src/nako_global.mjs +2 -0
- package/core/src/nako_global.mts +4 -0
- package/core/src/nako_parser3.mjs +94 -1
- package/core/src/nako_parser3.mts +69 -1
- package/core/src/nako_read_index.mjs +43 -0
- package/core/src/nako_read_index.mts +43 -0
- package/core/src/plugin_csv.mjs +14 -10
- package/core/src/plugin_csv.mts +14 -10
- package/core/src/plugin_toml.mjs +3 -3
- package/core/src/plugin_toml.mts +3 -3
- package/core/test/array_slice_test.mjs +39 -0
- package/core/test/array_test.mjs +54 -0
- package/core/test/fixtures/compat/SPEC.md +3 -3
- package/core/test/fixtures/compat/cases/04_string.json +1 -4
- package/core/test/fixtures/compat/expected/04_string.json +1 -1
- package/core/test/plugin_csv_test.mjs +20 -0
- package/core/test/plugin_toml_test.mjs +25 -0
- package/core/test/string_index_test.mjs +131 -0
- package/demo/browsers.html +11 -11
- package/doc/browsers.md +11 -11
- package/doc/command_list.json +6 -7342
- package/doc/doctest.md +87 -3
- package/doc/syntax-nako3.md +9 -0
- package/package.json +6 -5
- package/release/_hash.txt +32 -32
- package/release/_script-tags.txt +16 -16
- package/release/command.json +1 -1
- package/release/command.json.js +1 -1
- package/release/command_cnako3.json +1 -1
- package/release/command_list.json +1 -1
- package/release/edit_main.js +8 -8
- package/release/edit_main.js.map +3 -3
- package/release/editor.js +8 -8
- package/release/plugin_caniuse.js +1 -1
- package/release/plugin_caniuse.js.map +2 -2
- package/release/version.js +1 -1
- package/release/version_main.js +1 -1
- package/release/version_main.js.map +1 -1
- package/release/wnako3.js +190 -237
- package/release/wnako3.js.map +4 -4
- package/release/wnako3webworker.js +166 -215
- package/release/wnako3webworker.js.map +4 -4
- package/src/browsers.mjs +1 -1
- package/src/browsers.txt +31 -31
- package/src/nako_version.mjs +2 -2
- package/src/nako_version.mts +2 -2
- package/test/common/wnako3mod_test.mjs +6 -0
- package/test/node/build_command_test.mjs +39 -0
- package/test/node/doctest_nako3_test.mjs +112 -0
- package/test/node/fixtures/doctest_nako3/ng.txt +16 -0
- package/test/node/fixtures/doctest_nako3/ok.txt +18 -0
- package/test/node/node_test.mjs +10 -0
- package/test/node/node_version_support_test.mjs +15 -0
package/batch/doctest.mjs
CHANGED
|
@@ -20,6 +20,7 @@ import url from 'node:url'
|
|
|
20
20
|
import { NakoCompiler } from '../core/src/nako3.mjs'
|
|
21
21
|
import PluginNode from '../src/plugin_node.mjs'
|
|
22
22
|
import PluginCSV from '../core/src/plugin_csv.mjs'
|
|
23
|
+
import { resetEnv as resetCSVEnv } from '../core/src/nako_csv.mjs'
|
|
23
24
|
|
|
24
25
|
const thisDir = path.dirname(url.fileURLToPath(import.meta.url))
|
|
25
26
|
export const rootDir = path.resolve(thisDir, '..')
|
|
@@ -153,6 +154,8 @@ export async function runDocTest (test) {
|
|
|
153
154
|
if (test.runtime === 'wnako') {
|
|
154
155
|
return { ok: false, actual: '', error: new Error('WEB表示結果のDocTestはブラウザ版の実行コマンドを使用してください。') }
|
|
155
156
|
}
|
|
157
|
+
// CSVオプションの状態をテストごとにリセットする
|
|
158
|
+
resetCSVEnv()
|
|
156
159
|
const nako = new NakoCompiler()
|
|
157
160
|
nako.addPluginFile('PluginNode', 'plugin_node.js', PluginNode)
|
|
158
161
|
nako.addPluginFile('PluginCSV', 'plugin_csv.js', PluginCSV)
|
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
#!/usr/bin/env cnako3
|
|
2
|
+
# -----------------------------------------------------
|
|
3
|
+
# batch/doctest.nako3 --- DocTest(サンプルコードの実行テスト)
|
|
4
|
+
#
|
|
5
|
+
# manual/{プラグイン名}/{命令名}.txt と test/doctest/*.txt に書かれた
|
|
6
|
+
# 「{{{#nako3 ... }}}」のサンプルコードを実行し、
|
|
7
|
+
# 「### 表示結果:」に書かれた内容と一致するかを検証する。(#2409)
|
|
8
|
+
#
|
|
9
|
+
# なでしこ自身で記述したDocTestである。(#2570)
|
|
10
|
+
# 書式とオプションは gonako 版(gonako/gonako-package/doctest.nako3)に合わせている。
|
|
11
|
+
#
|
|
12
|
+
# 使い方:
|
|
13
|
+
# node src/cnako3.mjs batch/doctest.nako3 [オプション] [対象...]
|
|
14
|
+
# npm run doctest:nako3 -- [オプション] [対象...]
|
|
15
|
+
#
|
|
16
|
+
# 既定では、このファイルを実行しているなでしこ(cnako3)を別プロセスで呼び出して、
|
|
17
|
+
# サンプルを1件ずつ実行する。gonako など別のランタイムでの検証もできる。(#2570)
|
|
18
|
+
#
|
|
19
|
+
# オプション:
|
|
20
|
+
# --max 件数 失敗の詳細を表示する最大件数(既定10、0で全件)
|
|
21
|
+
# --runtime 実行ファイル サンプルを実行する外部ランタイムを指定する
|
|
22
|
+
# 「--runtime "node src/cnako3.mjs"」のようにまとめても書ける
|
|
23
|
+
# --subcommand 命令 --runtime に渡す引数(サブコマンドなど)
|
|
24
|
+
# --label ラベル 対象にする表示結果のラベル(既定「表示結果」。カンマ区切りで複数)
|
|
25
|
+
# --json[=ファイル名] 失敗した結果をJSONで出力する(省略時は標準出力)
|
|
26
|
+
# --internal 同じなでしこの中で実行する(高速だが Doctest 本体の環境の影響を受ける)
|
|
27
|
+
# --usage この使い方を表示する(-h/--help は cnako3 本体が先に受け取る)
|
|
28
|
+
#
|
|
29
|
+
# 対象:
|
|
30
|
+
# ファイルまたはディレクトリ(省略時は manual と test/doctest)
|
|
31
|
+
#
|
|
32
|
+
# 環境変数:
|
|
33
|
+
# NAKO3_DOCTEST_RUNTIME --runtime の既定値
|
|
34
|
+
# -----------------------------------------------------
|
|
35
|
+
|
|
36
|
+
# =====================================================
|
|
37
|
+
# 文字列の下処理
|
|
38
|
+
# =====================================================
|
|
39
|
+
|
|
40
|
+
●(文を)DT末尾除去とは:
|
|
41
|
+
文の『/\s+$/』を「」に正規表現置換して戻る。
|
|
42
|
+
|
|
43
|
+
●(文を)DT改行統一とは:
|
|
44
|
+
文の(CR&LF)をLFに置換。
|
|
45
|
+
それのCRをLFに置換して戻る。
|
|
46
|
+
|
|
47
|
+
●(ラベルを)DTラベル統一とは:
|
|
48
|
+
ラベルをトリム。
|
|
49
|
+
それの『/^###[ \t]*/』を「」に正規表現置換。
|
|
50
|
+
それの『/[::]\s*$/』を「」に正規表現置換。
|
|
51
|
+
それをトリムして戻る。
|
|
52
|
+
|
|
53
|
+
# =====================================================
|
|
54
|
+
# パス・シェル・表示の補助
|
|
55
|
+
# =====================================================
|
|
56
|
+
|
|
57
|
+
# 未設定の環境変数は「undefined」になるので空文字に直す (#2570)
|
|
58
|
+
●(名前の)DT環境変数取得とは:
|
|
59
|
+
値=名前の環境変数取得。
|
|
60
|
+
値=「」&値。
|
|
61
|
+
もし、値=「undefined」ならば:
|
|
62
|
+
「」を戻る。
|
|
63
|
+
値を戻る。
|
|
64
|
+
|
|
65
|
+
# 正規表現の抽出結果(『抽出文字列』)を安全に文字列で得る
|
|
66
|
+
●(添字の)DT抽出値とは:
|
|
67
|
+
値=抽出文字列[添字]。
|
|
68
|
+
値=「」&値。
|
|
69
|
+
もし、値=「undefined」ならば:
|
|
70
|
+
「」を戻る。
|
|
71
|
+
値を戻る。
|
|
72
|
+
|
|
73
|
+
# ログに混ざるANSIの色指定を取り除く(外部ランタイムで実行したとき用)
|
|
74
|
+
●(文を)DT色除去とは:
|
|
75
|
+
ESC=「String.fromCharCode(27)」をJS実行。
|
|
76
|
+
文の(ESC&「\[[0-9;]*m」)を「」に正規表現置換して戻る。
|
|
77
|
+
|
|
78
|
+
# シェルで安全に扱えるようにシングルクォートで囲む
|
|
79
|
+
●(語を)DT引用とは:
|
|
80
|
+
語の「'」を「'"'"'」に置換して、置換語に代入。
|
|
81
|
+
「'{置換語}'」を戻る。
|
|
82
|
+
|
|
83
|
+
# リポジトリのルートディレクトリを求める(このファイルは batch/ に置く)
|
|
84
|
+
●DT基本パス取得とは:
|
|
85
|
+
母艦=母艦パス取得。
|
|
86
|
+
「{母艦}/..」を絶対パス変換して戻る。
|
|
87
|
+
|
|
88
|
+
# 基本パスからの相対パスにする(外にある場合はそのまま返す)
|
|
89
|
+
●(対象パスを)DT短縮パス変換とは:
|
|
90
|
+
基本=DT基本パス取得&「/」。
|
|
91
|
+
もし、(対象パスで基本の出現回数)=1かつ(対象パスの文字数)>(基本の文字数)ならば:
|
|
92
|
+
結果=対象パスの基本を「」に置換。
|
|
93
|
+
結果を戻る。
|
|
94
|
+
対象パスを戻る。
|
|
95
|
+
|
|
96
|
+
# 各行の先頭に空白を足して見やすくする
|
|
97
|
+
●(文を)DT字下げとは:
|
|
98
|
+
文をLFで区切って、行一覧に代入。
|
|
99
|
+
結果=[]。
|
|
100
|
+
行一覧を反復:
|
|
101
|
+
結果に「 」&対象を配列追加。
|
|
102
|
+
結果をLFで配列結合して戻る。
|
|
103
|
+
|
|
104
|
+
# 期待と実際の違いを行ごとに調べる
|
|
105
|
+
●(期待と実際を)DT差分一覧とは:
|
|
106
|
+
期待行=期待をLFで区切る。
|
|
107
|
+
実際行=実際をLFで区切る。
|
|
108
|
+
個数=期待行の要素数。
|
|
109
|
+
もし、(実際行の要素数)>個数ならば:
|
|
110
|
+
個数=実際行の要素数。
|
|
111
|
+
結果=[]。
|
|
112
|
+
位置=0。
|
|
113
|
+
(個数)回繰り返す:
|
|
114
|
+
位置=位置+1。
|
|
115
|
+
期待値=期待行[位置-1]。
|
|
116
|
+
実際値=実際行[位置-1]。
|
|
117
|
+
もし、期待値<>実際値ならば:
|
|
118
|
+
もし、期待値=「」ならば:
|
|
119
|
+
期待値=「(なし)」。
|
|
120
|
+
もし、実際値=「」ならば:
|
|
121
|
+
実際値=「(なし)」。
|
|
122
|
+
結果に「{位置}行目: 期待=『{期待値}』 / 実際=『{実際値}』」を配列追加。
|
|
123
|
+
結果をLFで配列結合して戻る。
|
|
124
|
+
|
|
125
|
+
# 失敗を人が読みやすく整える
|
|
126
|
+
●(失敗を)DT失敗文作成とは:
|
|
127
|
+
場所=失敗["ファイル"]&「:」&失敗["行"]。
|
|
128
|
+
一覧=[]。
|
|
129
|
+
もし、失敗["エラー"]<>「」ならば:
|
|
130
|
+
一覧に「[DocTest失敗] {場所} のサンプルコードが実行エラーになりました。」を配列追加。
|
|
131
|
+
一覧に「--- 実行したコード ---」を配列追加。
|
|
132
|
+
一覧にDT字下げ(失敗["コード"])を配列追加。
|
|
133
|
+
一覧に「--- エラー内容 ---」を配列追加。
|
|
134
|
+
一覧にDT字下げ(失敗["エラー"])を配列追加。
|
|
135
|
+
違えば:
|
|
136
|
+
一覧に「[DocTest失敗] {場所} の表示結果が期待と異なります。」を配列追加。
|
|
137
|
+
一覧に「--- 実行したコード ---」を配列追加。
|
|
138
|
+
一覧にDT字下げ(失敗["コード"])を配列追加。
|
|
139
|
+
一覧に「--- 期待した表示結果 ---」を配列追加。
|
|
140
|
+
一覧にDT字下げ(失敗["期待"])を配列追加。
|
|
141
|
+
一覧に「--- 実際の表示結果 ---」を配列追加。
|
|
142
|
+
一覧にDT字下げ(失敗["実際"])を配列追加。
|
|
143
|
+
一覧に「--- 違いのある行 ---」を配列追加。
|
|
144
|
+
一覧にDT字下げ(DT差分一覧(失敗["期待"],失敗["実際"]))を配列追加。
|
|
145
|
+
案内=「マニュアルの『### 」&失敗["ラベル"]&「』の記述か、サンプルコードのどちらかを修正してください。」
|
|
146
|
+
一覧に案内を配列追加。
|
|
147
|
+
一覧をLFで配列結合して戻る。
|
|
148
|
+
|
|
149
|
+
# =====================================================
|
|
150
|
+
# 抽出(マニュアルの本文からサンプルを集める)
|
|
151
|
+
# =====================================================
|
|
152
|
+
|
|
153
|
+
●(本文を)DTサンプル抽出とは:
|
|
154
|
+
行一覧=本文をDT改行統一をLFで区切る。
|
|
155
|
+
サンプル一覧=[]。
|
|
156
|
+
ブロック中=偽。
|
|
157
|
+
行番号=0。
|
|
158
|
+
行一覧を反復:
|
|
159
|
+
行=対象。
|
|
160
|
+
行番号=行番号+1。
|
|
161
|
+
もし、ブロック中=偽ならば:
|
|
162
|
+
合致=行を『/^\s*\{\{\{#nako3/』で正規表現マッチ。
|
|
163
|
+
もし、合致<>NULLならば:
|
|
164
|
+
ブロック中=真。
|
|
165
|
+
開始行=行番号。
|
|
166
|
+
コード行=[]。
|
|
167
|
+
期待行=[]。
|
|
168
|
+
見出し=「」。
|
|
169
|
+
期待中=偽。
|
|
170
|
+
続ける。
|
|
171
|
+
もし、(行をトリム)=「}}}」ならば:
|
|
172
|
+
ブロック中=偽。
|
|
173
|
+
もし、見出し<>「」ならば:
|
|
174
|
+
サンプル={"ファイル":"","行":開始行,"ラベル":見出し,"コード":コード行をLFで配列結合,"期待":期待行をLFで配列結合をDT末尾除去}。
|
|
175
|
+
サンプル一覧にサンプルを配列追加。
|
|
176
|
+
続ける。
|
|
177
|
+
行=行の『/[ \t]+$/』を「」に正規表現置換。
|
|
178
|
+
もし、見出し=「」ならば:
|
|
179
|
+
合致=行を『/^###[ \t]*([^\s::]*表示結果)[ \t]*[::]?[ \t]?(.*)$/』で正規表現マッチ。
|
|
180
|
+
もし、合致<>NULLならば:
|
|
181
|
+
見出し=抽出文字列[0]。
|
|
182
|
+
期待行に抽出文字列[1]を配列追加。
|
|
183
|
+
期待中=真。
|
|
184
|
+
違えば:
|
|
185
|
+
コード行に行を配列追加。
|
|
186
|
+
続ける。
|
|
187
|
+
合致=行を『/^###[ \t]?(.*)$/』で正規表現マッチ。
|
|
188
|
+
もし、期待中かつ合致<>NULLならば:
|
|
189
|
+
期待行に抽出文字列[0]を配列追加。
|
|
190
|
+
違えば:
|
|
191
|
+
期待中=偽。
|
|
192
|
+
コード行に行を配列追加。
|
|
193
|
+
サンプル一覧を戻る。
|
|
194
|
+
|
|
195
|
+
# ファイル名を添えてサンプルを集める
|
|
196
|
+
●(ファイル名を)DTファイル抽出とは:
|
|
197
|
+
本文=ファイル名を読む。
|
|
198
|
+
サンプル一覧=本文をDTサンプル抽出。
|
|
199
|
+
結果=[]。
|
|
200
|
+
サンプル一覧を反復:
|
|
201
|
+
サンプル=対象。
|
|
202
|
+
サンプル["ファイル"]=ファイル名。
|
|
203
|
+
結果にサンプルを配列追加。
|
|
204
|
+
結果を戻る。
|
|
205
|
+
|
|
206
|
+
# =====================================================
|
|
207
|
+
# 実行
|
|
208
|
+
# =====================================================
|
|
209
|
+
|
|
210
|
+
# このなでしこの中でサンプルを実行する(--internal 指定時・高速)
|
|
211
|
+
●(コードを)DT内部実行とは:
|
|
212
|
+
結果={"出力":"","エラー":""}。
|
|
213
|
+
エラー監視:
|
|
214
|
+
# サンプルの表示がDoctestの出力に混ざらないように、一時的にログ出力を止める
|
|
215
|
+
「sys.__doctestListener = sys.logger.listeners; sys.logger.listeners = []」をJS実行。
|
|
216
|
+
実行出力=コードをナデシコ。
|
|
217
|
+
結果["出力"]=DT末尾除去(実行出力)。
|
|
218
|
+
エラーならば:
|
|
219
|
+
結果["エラー"]=エラーメッセージ。
|
|
220
|
+
エラー監視:
|
|
221
|
+
「sys.logger.listeners = sys.__doctestListener」をJS実行。
|
|
222
|
+
エラーならば:
|
|
223
|
+
もし、結果["エラー"]=「」ならば:
|
|
224
|
+
結果["エラー"]=エラーメッセージ。
|
|
225
|
+
結果を戻る。
|
|
226
|
+
|
|
227
|
+
# 外部ランタイムでサンプルを実行する(標準出力と標準エラーはファイルに書かせて読む)
|
|
228
|
+
●(実行設定を)DT外部実行とは:
|
|
229
|
+
コード=実行設定["コード"]。
|
|
230
|
+
一時場所=実行設定["一時場所"]。
|
|
231
|
+
作業名=実行設定["作業名"]。
|
|
232
|
+
結果={"出力":"","エラー":""}。
|
|
233
|
+
一時ソース=「」。
|
|
234
|
+
出力先=「{一時場所}/{作業名}.txt」。
|
|
235
|
+
エラー先=「{一時場所}/{作業名}.err.txt」。
|
|
236
|
+
命令=DT引用(実行設定["ランタイム"])。
|
|
237
|
+
もし、実行設定["サブ命令"]<>「」ならば:
|
|
238
|
+
# サブ命令は空白区切りで複数の引数を渡せる
|
|
239
|
+
語一覧=実行設定["サブ命令"]を「 」で区切る。
|
|
240
|
+
語一覧を反復:
|
|
241
|
+
もし、対象<>「」ならば:
|
|
242
|
+
命令=命令&「 」&DT引用(対象)。
|
|
243
|
+
エラー監視:
|
|
244
|
+
# 相対パスの基準を保つため、元ファイルの隣に一時ソースを置く
|
|
245
|
+
一時ソース=「{実行設定["起点"]}/.{作業名}.nako3」を絶対パス変換。
|
|
246
|
+
コードを一時ソースに保存。
|
|
247
|
+
命令=命令&「 」&DT引用(一時ソース)&「 > 」&DT引用(出力先)&「 2> 」&DT引用(エラー先)。
|
|
248
|
+
命令を起動待機。
|
|
249
|
+
エラーならば:
|
|
250
|
+
結果["エラー"]=エラーメッセージ。
|
|
251
|
+
エラー監視:
|
|
252
|
+
もし、出力先が存在ならば:
|
|
253
|
+
読込=出力先を読む。
|
|
254
|
+
読込=DT色除去(読込)。
|
|
255
|
+
# 一時ファイルの名前は見やすく元のファイル名に置き換える
|
|
256
|
+
読込=読込の一時ソースを実行設定["元ファイル"]に置換。
|
|
257
|
+
結果["出力"]=DT末尾除去(読込)。
|
|
258
|
+
もし、エラー先が存在ならば:
|
|
259
|
+
読込=エラー先を読む。
|
|
260
|
+
読込=DT色除去(読込)。
|
|
261
|
+
読込=読込をトリム。
|
|
262
|
+
もし、読込<>「」ならば:
|
|
263
|
+
読込=読込の一時ソースを実行設定["元ファイル"]に置換。
|
|
264
|
+
結果["エラー"]=読込。
|
|
265
|
+
エラーならば:
|
|
266
|
+
もし、結果["エラー"]=「」ならば:
|
|
267
|
+
結果["エラー"]=エラーメッセージ。
|
|
268
|
+
エラー監視:
|
|
269
|
+
もし、一時ソース<>「」ならば:
|
|
270
|
+
もし、一時ソースが存在ならば:
|
|
271
|
+
一時ソースをファイル削除。
|
|
272
|
+
エラーならば:
|
|
273
|
+
もし、結果["エラー"]=「」ならば:
|
|
274
|
+
結果["エラー"]=エラーメッセージ。
|
|
275
|
+
結果を戻る。
|
|
276
|
+
|
|
277
|
+
# =====================================================
|
|
278
|
+
# 結果出力
|
|
279
|
+
# =====================================================
|
|
280
|
+
|
|
281
|
+
# 失敗した結果をJSONで出力する(AIが結果を読み取って修正しやすいようにする)
|
|
282
|
+
●(結果情報を)DT結果JSON出力とは:
|
|
283
|
+
もし、結果情報["JSON"]=偽ならば:
|
|
284
|
+
戻る。
|
|
285
|
+
本文={"ツール":"nadesiko3-doctest","件数":結果情報["件数"],"成功数":結果情報["成功数"],"失敗数":結果情報["失敗数"],"省略数":結果情報["省略数"],"結果":結果情報["失敗一覧"]}をJSONエンコード整形。
|
|
286
|
+
もし、結果情報["出力先"]=「」ならば:
|
|
287
|
+
本文を表示。
|
|
288
|
+
戻る。
|
|
289
|
+
本文を結果情報["出力先"]に保存。
|
|
290
|
+
「[DocTest] 結果をJSONで書きました: {結果情報["出力先"]}」と表示。
|
|
291
|
+
|
|
292
|
+
●DT使い方表示とは:
|
|
293
|
+
「使い方: node src/cnako3.mjs batch/doctest.nako3 [オプション] [対象...]」と表示。
|
|
294
|
+
「対象: ファイルまたはディレクトリ(省略時は manual と test/doctest)」と表示。
|
|
295
|
+
「オプション:」と表示。
|
|
296
|
+
「 --max 件数 失敗の詳細を表示する最大件数(既定10、0で全件)」と表示。
|
|
297
|
+
「 --runtime 実行ファイル サンプルを実行する外部ランタイムを指定する」と表示。
|
|
298
|
+
「 --subcommand 命令 --runtime に渡す引数。まとめて書いてもよい」と表示。
|
|
299
|
+
「 --label ラベル 対象にする表示結果のラベル(既定は表示結果。カンマ区切りで複数)」と表示。
|
|
300
|
+
「 --json[=ファイル名] 失敗した結果をJSONで出力する(ファイル名を省略すると標準出力)」と表示。
|
|
301
|
+
「 --internal 同じなでしこの中で実行する(高速だが Doctest 本体の環境の影響を受ける)」と表示。
|
|
302
|
+
「 --usage この使い方を表示する(-h/--help は cnako3 本体が先に受け取る)」と表示。
|
|
303
|
+
「既定では、このファイルと同じなでしこ(cnako3)を別プロセスで実行して検証する。」と表示。
|
|
304
|
+
「環境変数 NAKO3_DOCTEST_RUNTIME で --runtime の既定値を指定できる。」と表示。
|
|
305
|
+
|
|
306
|
+
# =====================================================
|
|
307
|
+
# メイン処理
|
|
308
|
+
# =====================================================
|
|
309
|
+
|
|
310
|
+
●(引数列を)DocTest実行とは:
|
|
311
|
+
最大詳細=10。
|
|
312
|
+
基本パス=DT基本パス取得。
|
|
313
|
+
# 既定では、このファイルと同じなでしこ(cnako3)を別プロセスで呼び出して検証する
|
|
314
|
+
既定モード=真。
|
|
315
|
+
ランタイム=ナデシコランタイムパス。
|
|
316
|
+
サブ命令=基本パス&「/src/cnako3.mjs」。
|
|
317
|
+
環境値=「NAKO3_DOCTEST_RUNTIME」のDT環境変数取得。
|
|
318
|
+
もし、環境値<>「」ならば:
|
|
319
|
+
既定モード=偽。
|
|
320
|
+
ランタイム=環境値。
|
|
321
|
+
サブ命令=「」。
|
|
322
|
+
選択ラベル=[「表示結果」]。
|
|
323
|
+
対象一覧=[]。
|
|
324
|
+
JSON出力=「」。
|
|
325
|
+
JSON指定=偽。
|
|
326
|
+
番号=0。
|
|
327
|
+
(引数列の要素数)回繰り返す:
|
|
328
|
+
もし、番号>=(引数列の要素数)ならば:
|
|
329
|
+
抜ける。
|
|
330
|
+
引数=引数列[番号]。
|
|
331
|
+
番号=番号+1。
|
|
332
|
+
# -h/--help は cnako3 本体が先に受け取るので --usage でも使い方を表示する
|
|
333
|
+
もし、引数=「-h」または引数=「--help」または引数=「--usage」ならば:
|
|
334
|
+
DT使い方表示。
|
|
335
|
+
0で戻る。
|
|
336
|
+
# --json[=ファイル名] : 出力先を省略すると標準出力に書く
|
|
337
|
+
合致=引数を『/^--?json(?:=(.*))?$/』で正規表現マッチ。
|
|
338
|
+
もし、合致<>NULLならば:
|
|
339
|
+
JSON指定=真。
|
|
340
|
+
JSON出力=DT抽出値(0)。
|
|
341
|
+
続ける。
|
|
342
|
+
# 値を取らないオプション(--internal は同じ処理の中で実行する)
|
|
343
|
+
合致=引数を『/^--?internal$/』で正規表現マッチ。
|
|
344
|
+
もし、合致<>NULLならば:
|
|
345
|
+
既定モード=偽。
|
|
346
|
+
ランタイム=「」。
|
|
347
|
+
サブ命令=「」。
|
|
348
|
+
続ける。
|
|
349
|
+
合致=引数を『/^--?(max|runtime|subcommand|label)(?:=(.*))?$/』で正規表現マッチ。
|
|
350
|
+
もし、合致<>NULLならば:
|
|
351
|
+
項目=DT抽出値(0)。
|
|
352
|
+
設定値=DT抽出値(1)。
|
|
353
|
+
もし、(引数で「=」の出現回数)=0ならば:
|
|
354
|
+
もし、番号>=(引数列の要素数)ならば:
|
|
355
|
+
「引数が不足しています: {引数}」と表示。
|
|
356
|
+
2で戻る。
|
|
357
|
+
設定値=引数列[番号]。
|
|
358
|
+
番号=番号+1。
|
|
359
|
+
もし、項目=「max」ならば:
|
|
360
|
+
もし、(設定値を『/^\d+$/』で正規表現マッチ)=NULLならば:
|
|
361
|
+
「maxは0以上の整数で指定してください」と表示。
|
|
362
|
+
2で戻る。
|
|
363
|
+
最大詳細=設定値を整数変換。
|
|
364
|
+
もし、項目=「runtime」ならば:
|
|
365
|
+
既定モード=偽。
|
|
366
|
+
ランタイム=設定値。
|
|
367
|
+
サブ命令=「」。
|
|
368
|
+
もし、項目=「subcommand」ならば:
|
|
369
|
+
サブ命令=設定値。
|
|
370
|
+
もし、項目=「label」ならば:
|
|
371
|
+
選択ラベル=[]。
|
|
372
|
+
分割=設定値を「,」で区切る。
|
|
373
|
+
分割を反復:
|
|
374
|
+
語=対象をDTラベル統一。
|
|
375
|
+
選択ラベルに語を配列追加。
|
|
376
|
+
続ける。
|
|
377
|
+
もし、(引数を『/^-/』で正規表現マッチ)<>NULLならば:
|
|
378
|
+
「未対応の引数: {引数}」と表示。
|
|
379
|
+
2で戻る。
|
|
380
|
+
対象一覧に引数を配列追加。
|
|
381
|
+
もし、サブ命令<>「」かつランタイム=「」ならば:
|
|
382
|
+
「--subcommand は --runtime と一緒に指定してください」と表示。
|
|
383
|
+
2で戻る。
|
|
384
|
+
もし、既定モード=偽かつランタイム<>「」ならば:
|
|
385
|
+
# 「--runtime "node src/cnako3.mjs"」のようにコマンドと引数をまとめて指定できる
|
|
386
|
+
分割=ランタイムを「 」で区切る。
|
|
387
|
+
分割一覧=[]。
|
|
388
|
+
分割を反復:
|
|
389
|
+
もし、対象<>「」ならば:
|
|
390
|
+
分割一覧に対象を配列追加。
|
|
391
|
+
個数=分割一覧の要素数。
|
|
392
|
+
もし、個数>0ならば:
|
|
393
|
+
ランタイム=分割一覧[0]。
|
|
394
|
+
もし、個数>1かつサブ命令=「」ならば:
|
|
395
|
+
位置=1。
|
|
396
|
+
(個数-1)回繰り返す:
|
|
397
|
+
位置=位置+1。
|
|
398
|
+
サブ命令=サブ命令&分割一覧[位置-1]。
|
|
399
|
+
もし、位置<個数ならば:
|
|
400
|
+
サブ命令=サブ命令&「 」。
|
|
401
|
+
もし、(対象一覧の要素数)=0ならば:
|
|
402
|
+
[基本パス&「/manual」,基本パス&「/test/doctest」]を反復:
|
|
403
|
+
もし、対象がフォルダ存在ならば:
|
|
404
|
+
対象一覧に対象を配列追加。
|
|
405
|
+
テスト一覧=[]。
|
|
406
|
+
対象一覧を反復:
|
|
407
|
+
指定=対象。
|
|
408
|
+
ファイル一覧=[]。
|
|
409
|
+
もし、指定がフォルダ存在ならば:
|
|
410
|
+
ファイル一覧=「{指定}/*.txt」の全ファイル列挙。
|
|
411
|
+
ファイル一覧を配列ソート。
|
|
412
|
+
違えば:
|
|
413
|
+
もし、(指定が存在)=偽ならば:
|
|
414
|
+
「対象が見つかりません: {指定}」と表示。
|
|
415
|
+
2で戻る。
|
|
416
|
+
もし、(指定を『/\.txt$/』で正規表現マッチ)<>NULLならば:
|
|
417
|
+
ファイル一覧=[指定]。
|
|
418
|
+
ファイル一覧を反復:
|
|
419
|
+
サンプル一覧=対象をDTファイル抽出。
|
|
420
|
+
サンプル一覧を反復:
|
|
421
|
+
サンプル=対象。
|
|
422
|
+
もし、(選択ラベルからサンプル["ラベル"]を配列検索)>=0ならば:
|
|
423
|
+
テスト一覧にサンプルを配列追加。
|
|
424
|
+
件数=テスト一覧の要素数。
|
|
425
|
+
もし、件数=0ならば:
|
|
426
|
+
「[DocTest] 対象のサンプルコードがありません。」と表示。
|
|
427
|
+
結果情報={"JSON":JSON指定,"出力先":JSON出力,"件数":0,"成功数":0,"失敗数":0,"省略数":0,"失敗一覧":[]}。
|
|
428
|
+
結果情報をDT結果JSON出力。
|
|
429
|
+
0で戻る。
|
|
430
|
+
「[DocTest] {件数}件のサンプルコードを実行します。」と表示。
|
|
431
|
+
成功数=0。
|
|
432
|
+
失敗数=0。
|
|
433
|
+
省略数=0。
|
|
434
|
+
失敗一覧=[]。
|
|
435
|
+
一時場所=「」。
|
|
436
|
+
作業番号=0。
|
|
437
|
+
実行エラー=「」。
|
|
438
|
+
# 同じ処理の中で実行すると止まってしまう命令を含むサンプルは省略する
|
|
439
|
+
省略語=[「プロセス終」,「標準入力取得」,「標準入力全取得」,「ブラウザ起動」,「サーバ起動」]。
|
|
440
|
+
エラー監視:
|
|
441
|
+
一時場所=一時フォルダ作成。
|
|
442
|
+
識別子=一時場所のファイル名抽出。
|
|
443
|
+
テスト一覧を反復:
|
|
444
|
+
サンプル=対象。
|
|
445
|
+
作業番号=作業番号+1。
|
|
446
|
+
作業名=「nako3-doctest-{識別子}-{作業番号}」。
|
|
447
|
+
コード=サンプル["コード"]。
|
|
448
|
+
省略=偽。
|
|
449
|
+
もし、ランタイム=「」ならば:
|
|
450
|
+
省略語を反復:
|
|
451
|
+
省略語句=対象。
|
|
452
|
+
もし、(コードで省略語句の出現回数)>0ならば:
|
|
453
|
+
省略=真。
|
|
454
|
+
もし、省略ならば:
|
|
455
|
+
省略数=省略数+1。
|
|
456
|
+
続ける。
|
|
457
|
+
もし、ランタイム=「」ならば:
|
|
458
|
+
実行結果=コードをDT内部実行。
|
|
459
|
+
違えば:
|
|
460
|
+
元場所=サンプル["ファイル"]のパス抽出。
|
|
461
|
+
実行設定={"コード":コード,"ランタイム":ランタイム,"サブ命令":サブ命令,"起点":元場所,"元ファイル":サンプル["ファイル"],"一時場所":一時場所,"作業名":作業名}。
|
|
462
|
+
実行結果=実行設定をDT外部実行。
|
|
463
|
+
実出力=実行結果["出力"]。
|
|
464
|
+
もし、実出力=サンプル["期待"]ならば:
|
|
465
|
+
成功数=成功数+1。
|
|
466
|
+
続ける。
|
|
467
|
+
失敗数=失敗数+1。
|
|
468
|
+
失敗={"ファイル":DT短縮パス変換(サンプル["ファイル"]),"行":サンプル["行"],"ラベル":サンプル["ラベル"],"コード":コード,"期待":サンプル["期待"],"実際":実出力,"エラー":実行結果["エラー"]}。
|
|
469
|
+
失敗一覧に失敗を配列追加。
|
|
470
|
+
もし、最大詳細=0または失敗数<=最大詳細ならば:
|
|
471
|
+
DT失敗文作成(失敗)を表示。
|
|
472
|
+
エラーならば:
|
|
473
|
+
実行エラー=エラーメッセージ。
|
|
474
|
+
エラー監視:
|
|
475
|
+
もし、一時場所<>「」ならば:
|
|
476
|
+
もし、一時場所がフォルダ存在ならば:
|
|
477
|
+
一時場所をファイル削除。
|
|
478
|
+
エラーならば:
|
|
479
|
+
もし、実行エラー=「」ならば:
|
|
480
|
+
実行エラー=エラーメッセージ。
|
|
481
|
+
結果情報={"JSON":JSON指定,"出力先":JSON出力,"件数":件数,"成功数":成功数,"失敗数":失敗数,"省略数":省略数,"失敗一覧":失敗一覧}。
|
|
482
|
+
結果情報をDT結果JSON出力。
|
|
483
|
+
もし、実行エラー<>「」ならば:
|
|
484
|
+
実行エラーを表示。
|
|
485
|
+
2で戻る。
|
|
486
|
+
もし、失敗数=0ならば:
|
|
487
|
+
「[DocTest] {成功数}件成功・{省略数}件省略・失敗なし。」と表示。
|
|
488
|
+
0で戻る。
|
|
489
|
+
「[DocTest] {成功数}/{件数}件成功・{失敗数}件失敗・{省略数}件省略。」と表示。
|
|
490
|
+
1で戻る。
|
|
491
|
+
|
|
492
|
+
# =====================================================
|
|
493
|
+
# 起動処理
|
|
494
|
+
# =====================================================
|
|
495
|
+
|
|
496
|
+
# コマンドラインのうち、自分より前(nodeと本体とこのファイル)を取り除く
|
|
497
|
+
自分引数=[]。
|
|
498
|
+
番号=0。
|
|
499
|
+
全引数=コマンドライン。
|
|
500
|
+
引数個数=全引数の要素数。
|
|
501
|
+
(引数個数)回繰り返す:
|
|
502
|
+
項目=全引数[番号]。
|
|
503
|
+
番号=番号+1。
|
|
504
|
+
もし、番号>=3ならば:
|
|
505
|
+
合致=項目を『/\.nako3$/』で正規表現マッチ。
|
|
506
|
+
もし、合致=NULLならば:
|
|
507
|
+
自分引数に項目を配列追加。
|
|
508
|
+
|
|
509
|
+
エラー監視:
|
|
510
|
+
終了値=自分引数をDocTest実行。
|
|
511
|
+
エラーならば:
|
|
512
|
+
エラーメッセージを表示。
|
|
513
|
+
終了値=2。
|
|
514
|
+
終了値でプロセス終。
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
# 出力: command.txt
|
|
6
6
|
# -----------------------------------------------------
|
|
7
7
|
!「jsplugin2text.nako3」を取り込む。
|
|
8
|
-
!「merge_gonako_commands.nako3」を取り込む。
|
|
9
8
|
|
|
10
9
|
# 基本パスを取得
|
|
11
10
|
母艦パス取得してパス抽出して基本パスに代入。
|
|
@@ -118,9 +117,6 @@ FILE_PATH=""
|
|
|
118
117
|
ここまで。
|
|
119
118
|
ここまで。
|
|
120
119
|
#------------------------
|
|
121
|
-
# gonako(なでしこ3go)の命令一覧をマージする (#2465)
|
|
122
|
-
結果データ=結果データをgonakoコマンド一覧マージ。
|
|
123
|
-
#------------------------
|
|
124
120
|
B=「REPORT_ERR」の環境変数取得
|
|
125
121
|
もし、Bならば、結果データを表示。
|
|
126
122
|
結果データを「{基本パス}/batch/command.txt」に保存。
|
package/core/package-lock.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nadesiko3core",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.8",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "nadesiko3core",
|
|
9
|
-
"version": "3.8.
|
|
9
|
+
"version": "3.8.8",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"cross-env": "^10.0.0",
|
|
13
|
-
"
|
|
13
|
+
"tomlite": "^0.1.1"
|
|
14
14
|
},
|
|
15
15
|
"bin": {
|
|
16
16
|
"snako": "command/snako.mjs"
|
|
@@ -446,16 +446,13 @@
|
|
|
446
446
|
"node": ">=8"
|
|
447
447
|
}
|
|
448
448
|
},
|
|
449
|
-
"node_modules/
|
|
450
|
-
"version": "1.
|
|
451
|
-
"resolved": "https://registry.npmjs.org/
|
|
452
|
-
"integrity": "sha512-
|
|
453
|
-
"license": "
|
|
449
|
+
"node_modules/tomlite": {
|
|
450
|
+
"version": "0.1.1",
|
|
451
|
+
"resolved": "https://registry.npmjs.org/tomlite/-/tomlite-0.1.1.tgz",
|
|
452
|
+
"integrity": "sha512-O6lOLsgfIaq8UsqcycX4IacqvnWlySWFQ85y0x2zjhTDCbfncWEGa9PHuQ/7q+UvZ6A4wMmOPQr4RDlnjC/x/g==",
|
|
453
|
+
"license": "MIT",
|
|
454
454
|
"engines": {
|
|
455
|
-
"node": ">=
|
|
456
|
-
},
|
|
457
|
-
"funding": {
|
|
458
|
-
"url": "https://github.com/sponsors/cyyynthia"
|
|
455
|
+
"node": ">=20"
|
|
459
456
|
}
|
|
460
457
|
},
|
|
461
458
|
"node_modules/typescript": {
|
package/core/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nadesiko3core",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.9",
|
|
4
4
|
"description": "Japanese Programming Language Nadesiko v3 core",
|
|
5
5
|
"main": "index.mjs",
|
|
6
6
|
"type": "module",
|
|
@@ -44,6 +44,6 @@
|
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"cross-env": "^10.0.0",
|
|
47
|
-
"
|
|
47
|
+
"tomlite": "^0.1.1"
|
|
48
48
|
}
|
|
49
49
|
}
|
package/core/src/nako_csv.mjs
CHANGED
|
@@ -3,10 +3,19 @@ export const options = {
|
|
|
3
3
|
eol: '\r\n',
|
|
4
4
|
auto_convert_number: true
|
|
5
5
|
};
|
|
6
|
+
// delimiter が明示的に設定されたかどうかを追跡するフラグ
|
|
7
|
+
let delimiterExplicitlySet = false;
|
|
6
8
|
export function resetEnv() {
|
|
7
9
|
options.delimiter = ',';
|
|
8
10
|
options.eol = '\r\n';
|
|
9
11
|
options.auto_convert_number = true;
|
|
12
|
+
delimiterExplicitlySet = false;
|
|
13
|
+
}
|
|
14
|
+
export function isDelimiterExplicitlySet() {
|
|
15
|
+
return delimiterExplicitlySet;
|
|
16
|
+
}
|
|
17
|
+
export function setDelimiterExplicitlySet(value) {
|
|
18
|
+
delimiterExplicitlySet = value;
|
|
10
19
|
}
|
|
11
20
|
/** 文字列が数値かどうか判定する関数
|
|
12
21
|
* @param str 判定する文字列
|