vscode-liquidsoap 0.2.0 → 0.3.0
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/package.json +14 -9
- package/syntaxes/liquidsoap.tmLanguage.json +41 -12
- package/test-suite/fetch-stdlib.js +125 -0
- package/test-suite/run-tests.js +544 -0
- package/tests/snap/libs/audio.liq.snap +20 -10
- package/tests/snap/libs/fades.liq.snap +3 -1
- package/tests/snap/libs/ffmpeg.liq.snap +10 -5
- package/tests/snap/libs/file.liq.snap +1 -1
- package/tests/snap/libs/hls.liq.snap +22 -9
- package/tests/snap/libs/http.liq.snap +60 -22
- package/tests/snap/libs/icecast.liq.snap +19 -13
- package/tests/snap/libs/medialib.liq.snap +5 -2
- package/tests/snap/libs/metadata.liq.snap +7 -3
- package/tests/snap/libs/playlist.liq.snap +4 -2
- package/tests/snap/libs/protocols.liq.snap +70 -24
- package/tests/snap/libs/ref.liq.snap +4 -3
- package/tests/snap/libs/request.liq.snap +3 -1
- package/tests/snap/libs/resolvers.liq.snap +5 -2
- package/tests/snap/libs/settings.liq.snap +11 -5
- package/tests/snap/libs/source.liq.snap +2 -1
- package/tests/snap/libs/stdlib.liq.snap +52 -52
- package/tests/snap/libs/string.liq.snap +6 -4
- package/tests/snap/libs/switches.liq.snap +2 -2
- package/tests/snap/libs/testing.liq.snap +3 -1
- package/tests/snap/libs/thread.liq.snap +3 -1
- package/tests/snap/libs/video.liq.snap +21 -12
- package/tests/snap/tests/failures/ctype.liq +0 -0
- package/tests/snap/tests/failures/ctype.liq.snap +69 -11
- package/tests/snap/tests/failures/error.liq +0 -0
- package/tests/snap/tests/failures/error.liq.snap +21 -10
- package/tests/snap/tests/failures/record-invalid-member1.liq +0 -0
- package/tests/snap/tests/failures/record-invalid-member1.liq.snap +26 -11
- package/tests/snap/tests/failures/record-invalid-member2.liq +0 -0
- package/tests/snap/tests/failures/record-invalid-member2.liq.snap +13 -5
- package/tests/snap/tests/failures/ref.liq +0 -0
- package/tests/snap/tests/failures/ref.liq.snap +53 -17
- package/tests/snap/tests/fixme/GH1170.liq +0 -0
- package/tests/snap/tests/fixme/GH1170.liq.snap +139 -36
- package/tests/snap/tests/fixme/LS527.liq.snap +89 -32
- package/tests/snap/tests/fixme/cross2.liq +0 -0
- package/tests/snap/tests/fixme/cross2.liq.snap +122 -31
- package/tests/snap/tests/fixme/cross3.liq +0 -0
- package/tests/snap/tests/fixme/cross3.liq.snap +96 -26
- package/tests/snap/tests/fixme/sequence-1.liq +0 -0
- package/tests/snap/tests/fixme/sequence-1.liq.snap +168 -49
- package/tests/snap/tests/fixme/sequence-2.liq.snap +163 -42
- package/tests/snap/tests/harbor/http.liq.snap +2246 -798
- package/tests/snap/tests/harbor/http2.liq.snap +447 -150
- package/tests/snap/tests/harbor/http3.liq.snap +238 -99
- package/tests/snap/tests/harbor/post.liq.snap +1416 -575
- package/tests/snap/tests/harbor/put.liq.snap +1416 -578
- package/tests/snap/tests/language/argsof.liq +0 -0
- package/tests/snap/tests/language/argsof.liq.snap +342 -74
- package/tests/snap/tests/language/bool.liq +0 -0
- package/tests/snap/tests/language/bool.liq.snap +129 -29
- package/tests/snap/tests/language/comments.liq.snap +188 -95
- package/tests/snap/tests/language/conversions.liq.snap +181 -68
- package/tests/snap/tests/language/doc.liq +0 -0
- package/tests/snap/tests/language/doc.liq.snap +42 -13
- package/tests/snap/tests/language/encoders.liq +0 -0
- package/tests/snap/tests/language/encoders.liq.snap +153 -39
- package/tests/snap/tests/language/error.liq +0 -0
- package/tests/snap/tests/language/error.liq.snap +677 -179
- package/tests/snap/tests/language/eval.liq +0 -0
- package/tests/snap/tests/language/eval.liq.snap +761 -308
- package/tests/snap/tests/language/file.liq +0 -0
- package/tests/snap/tests/language/file.liq.snap +326 -92
- package/tests/snap/tests/language/file.watch.liq +0 -0
- package/tests/snap/tests/language/file.watch.liq.snap +122 -30
- package/tests/snap/tests/language/file.watch2.liq +0 -0
- package/tests/snap/tests/language/file.watch2.liq.snap +147 -42
- package/tests/snap/tests/language/file_protocol.liq +0 -0
- package/tests/snap/tests/language/file_protocol.liq.snap +109 -32
- package/tests/snap/tests/language/functions.liq +0 -0
- package/tests/snap/tests/language/functions.liq.snap +189 -59
- package/tests/snap/tests/language/getter.liq +0 -0
- package/tests/snap/tests/language/getter.liq.snap +470 -133
- package/tests/snap/tests/language/interactive.liq +0 -0
- package/tests/snap/tests/language/interactive.liq.snap +254 -83
- package/tests/snap/tests/language/interpolation.liq +20 -0
- package/tests/snap/tests/language/interpolation.liq.snap +141 -0
- package/tests/snap/tests/language/json.liq +0 -0
- package/tests/snap/tests/language/json.liq.snap +1304 -738
- package/tests/snap/tests/language/list.liq +0 -0
- package/tests/snap/tests/language/list.liq.snap +1932 -883
- package/tests/snap/tests/language/loop.liq +0 -0
- package/tests/snap/tests/language/loop.liq.snap +276 -101
- package/tests/snap/tests/language/math.liq +0 -0
- package/tests/snap/tests/language/math.liq.snap +134 -26
- package/tests/snap/tests/language/mem_usage.liq +0 -0
- package/tests/snap/tests/language/mem_usage.liq.snap +66 -17
- package/tests/snap/tests/language/metadata.liq +0 -0
- package/tests/snap/tests/language/metadata.liq.snap +606 -177
- package/tests/snap/tests/language/null.liq +0 -0
- package/tests/snap/tests/language/null.liq.snap +351 -131
- package/tests/snap/tests/language/osc.liq +0 -0
- package/tests/snap/tests/language/osc.liq.snap +350 -124
- package/tests/snap/tests/language/pattern.liq +0 -0
- package/tests/snap/tests/language/pattern.liq.snap +955 -308
- package/tests/snap/tests/language/pp.liq +0 -0
- package/tests/snap/tests/language/pp.liq.snap +227 -78
- package/tests/snap/tests/language/predicate.liq +0 -0
- package/tests/snap/tests/language/predicate.liq.snap +365 -70
- package/tests/snap/tests/language/process.liq +0 -0
- package/tests/snap/tests/language/process.liq.snap +227 -99
- package/tests/snap/tests/language/rec.liq +0 -0
- package/tests/snap/tests/language/rec.liq.snap +134 -49
- package/tests/snap/tests/language/record.liq +0 -0
- package/tests/snap/tests/language/record.liq.snap +2251 -570
- package/tests/snap/tests/language/ref.liq +0 -0
- package/tests/snap/tests/language/ref.liq.snap +208 -55
- package/tests/snap/tests/language/regexp.liq +0 -0
- package/tests/snap/tests/language/regexp.liq.snap +327 -176
- package/tests/snap/tests/language/socket.liq.snap +279 -96
- package/tests/snap/tests/language/stdlib.liq +0 -0
- package/tests/snap/tests/language/stdlib.liq.snap +170 -51
- package/tests/snap/tests/language/string.liq +0 -0
- package/tests/snap/tests/language/string.liq.snap +1747 -860
- package/tests/snap/tests/language/test_cover.liq.snap +57 -20
- package/tests/snap/tests/language/thread.liq.snap +391 -102
- package/tests/snap/tests/language/time.liq +0 -0
- package/tests/snap/tests/language/time.liq.snap +115 -33
- package/tests/snap/tests/language/type_errors.liq +0 -0
- package/tests/snap/tests/language/type_errors.liq.snap +1042 -703
- package/tests/snap/tests/language/types.liq +33 -0
- package/tests/snap/tests/language/types.liq.snap +321 -0
- package/tests/snap/tests/language/typing.liq +0 -0
- package/tests/snap/tests/language/typing.liq.snap +1233 -405
- package/tests/snap/tests/language/url.liq +0 -0
- package/tests/snap/tests/language/url.liq.snap +84 -38
- package/tests/snap/tests/language/write_cover.liq.snap +44 -15
- package/tests/snap/tests/language/yaml.liq.snap +252 -97
- package/tests/snap/tests/media/ffmpeg_add_text.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_add_text.liq.snap +558 -120
- package/tests/snap/tests/media/ffmpeg_audio_decoder.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_audio_decoder.liq.snap +228 -49
- package/tests/snap/tests/media/ffmpeg_complex_filter.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_complex_filter.liq.snap +544 -68
- package/tests/snap/tests/media/ffmpeg_copy_and_encode_decoder.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_copy_and_encode_decoder.liq.snap +362 -68
- package/tests/snap/tests/media/ffmpeg_copy_concat.liq.snap +159 -56
- package/tests/snap/tests/media/ffmpeg_copy_decoder.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_copy_decoder.liq.snap +507 -121
- package/tests/snap/tests/media/ffmpeg_distributed_hls.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_distributed_hls.liq.snap +645 -186
- package/tests/snap/tests/media/ffmpeg_filter.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_filter.liq.snap +603 -101
- package/tests/snap/tests/media/ffmpeg_filter_changing_rate.liq.snap +712 -142
- package/tests/snap/tests/media/ffmpeg_inline_encode_decode.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_inline_encode_decode.liq.snap +530 -131
- package/tests/snap/tests/media/ffmpeg_inline_encode_decode_audio.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_inline_encode_decode_audio.liq.snap +365 -94
- package/tests/snap/tests/media/ffmpeg_inline_encode_decode_video.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_inline_encode_decode_video.liq.snap +365 -94
- package/tests/snap/tests/media/ffmpeg_raw_and_copy_decoder.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_raw_and_copy_decoder.liq.snap +514 -125
- package/tests/snap/tests/media/ffmpeg_raw_and_encode_decoder.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_raw_and_encode_decoder.liq.snap +385 -73
- package/tests/snap/tests/media/ffmpeg_raw_decoder.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_raw_decoder.liq.snap +370 -72
- package/tests/snap/tests/media/ffmpeg_raw_hls.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_raw_hls.liq.snap +629 -193
- package/tests/snap/tests/media/ffmpeg_transparency_filter.liq.snap +538 -109
- package/tests/snap/tests/media/ffmpeg_video_decoder.liq +0 -0
- package/tests/snap/tests/media/ffmpeg_video_decoder.liq.snap +236 -59
- package/tests/snap/tests/media/mono.liq +0 -0
- package/tests/snap/tests/media/mono.liq.snap +223 -47
- package/tests/snap/tests/media/multitrack.liq.snap +790 -235
- package/tests/snap/tests/media/pcm_f32_decode.liq +0 -0
- package/tests/snap/tests/media/pcm_f32_decode.liq.snap +61 -12
- package/tests/snap/tests/media/pcm_s16_decode.liq +0 -0
- package/tests/snap/tests/media/pcm_s16_decode.liq.snap +61 -12
- package/tests/snap/tests/media/stereo.liq +0 -0
- package/tests/snap/tests/media/stereo.liq.snap +223 -47
- package/tests/snap/tests/media/stream_audio.liq.in +0 -0
- package/tests/snap/tests/media/stream_video.liq.in +0 -0
- package/tests/snap/tests/media/taglib.liq +0 -0
- package/tests/snap/tests/media/taglib.liq.snap +77 -26
- package/tests/snap/tests/media/video_size.liq +0 -0
- package/tests/snap/tests/media/video_size.liq.snap +305 -68
- package/tests/snap/tests/performance/erathostenes.liq +0 -0
- package/tests/snap/tests/performance/erathostenes.liq.snap +281 -62
- package/tests/snap/tests/performance/performance.liq.snap +99 -26
- package/tests/snap/tests/performance/small-record.liq +0 -0
- package/tests/snap/tests/performance/small-record.liq.snap +626 -320
- package/tests/snap/tests/regression/115-1.liq +0 -0
- package/tests/snap/tests/regression/115-1.liq.snap +74 -15
- package/tests/snap/tests/regression/115-2.liq +0 -0
- package/tests/snap/tests/regression/115-2.liq.snap +101 -16
- package/tests/snap/tests/regression/AC5109.liq +0 -0
- package/tests/snap/tests/regression/AC5109.liq.snap +216 -78
- package/tests/snap/tests/regression/BUG403.liq +0 -0
- package/tests/snap/tests/regression/BUG403.liq.snap +136 -33
- package/tests/snap/tests/regression/GH-action-919422659.liq +0 -0
- package/tests/snap/tests/regression/GH-action-919422659.liq.snap +105 -34
- package/tests/snap/tests/regression/GH1129.liq +0 -0
- package/tests/snap/tests/regression/GH1129.liq.snap +351 -153
- package/tests/snap/tests/regression/GH1146.liq +0 -0
- package/tests/snap/tests/regression/GH1146.liq.snap +82 -27
- package/tests/snap/tests/regression/GH1151.liq +0 -0
- package/tests/snap/tests/regression/GH1151.liq.snap +55 -25
- package/tests/snap/tests/regression/GH1159.liq +0 -0
- package/tests/snap/tests/regression/GH1159.liq.snap +97 -30
- package/tests/snap/tests/regression/GH1279.liq +0 -0
- package/tests/snap/tests/regression/GH1279.liq.snap +270 -108
- package/tests/snap/tests/regression/GH1327.liq +0 -0
- package/tests/snap/tests/regression/GH1327.liq.snap +380 -134
- package/tests/snap/tests/regression/GH2585.liq.snap +110 -45
- package/tests/snap/tests/regression/GH2602.liq.snap +116 -30
- package/tests/snap/tests/regression/GH2756-2.liq.snap +361 -104
- package/tests/snap/tests/regression/GH2756.liq.snap +419 -119
- package/tests/snap/tests/regression/GH2758.liq.snap +113 -30
- package/tests/snap/tests/regression/GH2842.liq.snap +151 -50
- package/tests/snap/tests/regression/GH2850.liq.snap +358 -146
- package/tests/snap/tests/regression/GH2867.liq.snap +46 -15
- package/tests/snap/tests/regression/GH2871.liq.snap +86 -30
- package/tests/snap/tests/regression/GH2872.liq.snap +103 -32
- package/tests/snap/tests/regression/GH2897.liq.snap +123 -33
- package/tests/snap/tests/regression/GH2902.liq.snap +326 -109
- package/tests/snap/tests/regression/GH2926.liq.snap +121 -39
- package/tests/snap/tests/regression/GH3093.liq.snap +46 -11
- package/tests/snap/tests/regression/GH3121.liq.snap +138 -36
- package/tests/snap/tests/regression/GH3132.liq.snap +146 -43
- package/tests/snap/tests/regression/GH3224.liq.snap +18 -10
- package/tests/snap/tests/regression/GH3239-2.liq.snap +154 -34
- package/tests/snap/tests/regression/GH3239.liq.snap +149 -33
- package/tests/snap/tests/regression/GH3276.liq.snap +164 -53
- package/tests/snap/tests/regression/GH3316.liq.snap +229 -55
- package/tests/snap/tests/regression/LS268.liq +0 -0
- package/tests/snap/tests/regression/LS268.liq.snap +102 -19
- package/tests/snap/tests/regression/LS354-1.liq +0 -0
- package/tests/snap/tests/regression/LS354-1.liq.snap +117 -28
- package/tests/snap/tests/regression/LS354-2.liq +0 -0
- package/tests/snap/tests/regression/LS354-2.liq.snap +154 -56
- package/tests/snap/tests/regression/LS460.liq +0 -0
- package/tests/snap/tests/regression/LS460.liq.snap +145 -49
- package/tests/snap/tests/regression/LS503.liq +0 -0
- package/tests/snap/tests/regression/LS503.liq.snap +71 -24
- package/tests/snap/tests/regression/default_format.liq.snap +43 -7
- package/tests/snap/tests/regression/external-encoder.liq.snap +72 -28
- package/tests/snap/tests/regression/ffmpeg-copy-encode.liq.snap +167 -62
- package/tests/snap/tests/regression/ffmpeg-copy-input-http.liq.snap +55 -13
- package/tests/snap/tests/regression/ffmpeg-naming-convention.liq.snap +371 -126
- package/tests/snap/tests/regression/infallible-shutdown.liq +0 -0
- package/tests/snap/tests/regression/infallible-shutdown.liq.snap +26 -6
- package/tests/snap/tests/regression/init-error.liq +0 -0
- package/tests/snap/tests/regression/init-error.liq.snap +70 -10
- package/tests/snap/tests/regression/initial_request_queue.liq.snap +69 -14
- package/tests/snap/tests/regression/input_rtmp.liq +0 -0
- package/tests/snap/tests/regression/input_rtmp.liq.snap +28 -7
- package/tests/snap/tests/regression/metadata_cache.liq +0 -0
- package/tests/snap/tests/regression/metadata_cache.liq.snap +173 -56
- package/tests/snap/tests/regression/playlist-id.liq +0 -0
- package/tests/snap/tests/regression/playlist-id.liq.snap +126 -56
- package/tests/snap/tests/regression/replaygain.liq.snap +53 -11
- package/tests/snap/tests/regression/shoutcast-args.liq.snap +52 -24
- package/tests/snap/tests/regression/unified-pcm-types.liq.snap +91 -28
- package/tests/snap/tests/regression/video-only.liq.snap +121 -33
- package/tests/snap/tests/streams/195.liq +0 -0
- package/tests/snap/tests/streams/195.liq.snap +63 -26
- package/tests/snap/tests/streams/197.liq +0 -0
- package/tests/snap/tests/streams/197.liq.snap +129 -40
- package/tests/snap/tests/streams/autostart.liq +0 -0
- package/tests/snap/tests/streams/autostart.liq.snap +147 -37
- package/tests/snap/tests/streams/cross-override.liq.snap +338 -92
- package/tests/snap/tests/streams/cross-persist-override.liq.snap +342 -92
- package/tests/snap/tests/streams/cross.liq +0 -0
- package/tests/snap/tests/streams/cross.liq.snap +343 -90
- package/tests/snap/tests/streams/crossfade.liq +0 -0
- package/tests/snap/tests/streams/crossfade.liq.snap +476 -128
- package/tests/snap/tests/streams/ctype1.liq +0 -0
- package/tests/snap/tests/streams/ctype1.liq.snap +89 -26
- package/tests/snap/tests/streams/ctype2.liq +0 -0
- package/tests/snap/tests/streams/ctype2.liq.snap +114 -30
- package/tests/snap/tests/streams/dtmf.liq +0 -0
- package/tests/snap/tests/streams/dtmf.liq.snap +129 -32
- package/tests/snap/tests/streams/dtmf_pcm_s16.liq +0 -0
- package/tests/snap/tests/streams/dtmf_pcm_s16.liq.snap +161 -38
- package/tests/snap/tests/streams/fades-overrides.liq.snap +472 -121
- package/tests/snap/tests/streams/fades-persistent-override.liq.snap +482 -121
- package/tests/snap/tests/streams/ffmpeg-errors.liq.snap +108 -30
- package/tests/snap/tests/streams/ffmpeg-trim.liq.snap +63 -18
- package/tests/snap/tests/streams/file_output.liq.snap +131 -33
- package/tests/snap/tests/streams/harbor_kick_client.liq.snap +235 -72
- package/tests/snap/tests/streams/harbor_metadata.liq.snap +206 -96
- package/tests/snap/tests/streams/hls_custom_tags.liq.snap +407 -125
- package/tests/snap/tests/streams/hls_id3v2.liq.snap +742 -257
- package/tests/snap/tests/streams/huge-playlist.liq +0 -0
- package/tests/snap/tests/streams/huge-playlist.liq.snap +125 -40
- package/tests/snap/tests/streams/icecast_ssl.liq.snap +134 -42
- package/tests/snap/tests/streams/icecast_ssl_tls.liq.snap +164 -55
- package/tests/snap/tests/streams/icecast_tls.liq.snap +163 -53
- package/tests/snap/tests/streams/icecast_tls_ssl.liq.snap +164 -55
- package/tests/snap/tests/streams/image.liq +0 -0
- package/tests/snap/tests/streams/image.liq.snap +44 -10
- package/tests/snap/tests/streams/many-playlists.liq +0 -0
- package/tests/snap/tests/streams/many-playlists.liq.snap +142 -48
- package/tests/snap/tests/streams/merge_metadata.liq.snap +224 -63
- package/tests/snap/tests/streams/never.liq +0 -0
- package/tests/snap/tests/streams/never.liq.snap +56 -11
- package/tests/snap/tests/streams/on_frame.liq +0 -0
- package/tests/snap/tests/streams/on_frame.liq.snap +81 -23
- package/tests/snap/tests/streams/on_metadata.liq +0 -0
- package/tests/snap/tests/streams/on_metadata.liq.snap +103 -37
- package/tests/snap/tests/streams/on_track.liq +0 -0
- package/tests/snap/tests/streams/on_track.liq.snap +69 -18
- package/tests/snap/tests/streams/playlist-watch.liq +0 -0
- package/tests/snap/tests/streams/playlist-watch.liq.snap +195 -56
- package/tests/snap/tests/streams/radio.liq +0 -0
- package/tests/snap/tests/streams/radio.liq.snap +72 -17
- package/tests/snap/tests/streams/radio2.liq +0 -0
- package/tests/snap/tests/streams/radio2.liq.snap +143 -48
- package/tests/snap/tests/streams/random.liq +0 -0
- package/tests/snap/tests/streams/random.liq.snap +395 -171
- package/tests/snap/tests/streams/replaygain.liq +0 -0
- package/tests/snap/tests/streams/replaygain.liq.snap +62 -19
- package/tests/snap/tests/streams/request.liq +0 -0
- package/tests/snap/tests/streams/request.liq.snap +361 -145
- package/tests/snap/tests/streams/rotate.liq +0 -0
- package/tests/snap/tests/streams/rotate.liq.snap +421 -151
- package/tests/snap/tests/streams/say.liq +0 -0
- package/tests/snap/tests/streams/say.liq.snap +139 -32
- package/tests/snap/tests/streams/seek_track_map.liq.snap +143 -48
- package/tests/snap/tests/streams/sharing.liq +0 -0
- package/tests/snap/tests/streams/sharing.liq.snap +109 -25
- package/tests/snap/tests/streams/sine.detect.full_conv.liq +0 -0
- package/tests/snap/tests/streams/sine.detect.full_conv.liq.snap +127 -33
- package/tests/snap/tests/streams/sine.detect.liq +0 -0
- package/tests/snap/tests/streams/sine.detect.liq.snap +71 -20
- package/tests/snap/tests/streams/sine.detect.pcm_f32.liq +0 -0
- package/tests/snap/tests/streams/sine.detect.pcm_f32.liq.snap +95 -26
- package/tests/snap/tests/streams/sine.detect.pcm_s16.liq +0 -0
- package/tests/snap/tests/streams/sine.detect.pcm_s16.liq.snap +95 -26
- package/tests/snap/tests/streams/smart-crossfade.liq +0 -0
- package/tests/snap/tests/streams/smart-crossfade.liq.snap +101 -25
- package/tests/snap/tests/streams/srt_listen_callback.liq.snap +149 -38
- package/tests/snap/tests/streams/srt_multiple_outputs.liq.snap +146 -35
- package/tests/snap/tests/streams/srt_passphrase.liq.snap +92 -27
- package/tests/snap/tests/streams/srt_raw_pcm.liq.snap +134 -43
- package/tests/snap/tests/streams/stretch-clock-propagation.liq +0 -0
- package/tests/snap/tests/streams/stretch-clock-propagation.liq.snap +86 -20
- package/tests/snap/tests/test.liq +0 -0
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Test runner for liquidsoap syntax highlighting
|
|
5
|
+
* Tokenizes .liq files and generates HTML reports
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const fs = require("fs");
|
|
9
|
+
const path = require("path");
|
|
10
|
+
const vsctm = require("vscode-textmate");
|
|
11
|
+
const oniguruma = require("vscode-oniguruma");
|
|
12
|
+
|
|
13
|
+
const GRAMMAR_PATH = path.join(
|
|
14
|
+
__dirname,
|
|
15
|
+
"..",
|
|
16
|
+
"syntaxes",
|
|
17
|
+
"liquidsoap.tmLanguage.json"
|
|
18
|
+
);
|
|
19
|
+
const OUTPUT_DIR = path.join(__dirname, "output");
|
|
20
|
+
const SOURCE_DIRS = [
|
|
21
|
+
{ dir: path.join(__dirname, "stdlib"), prefix: "stdlib" },
|
|
22
|
+
{ dir: path.join(__dirname, "..", "tests", "snap", "tests"), prefix: "tests" },
|
|
23
|
+
];
|
|
24
|
+
const ONIG_WASM_PATH = path.join(
|
|
25
|
+
__dirname,
|
|
26
|
+
"..",
|
|
27
|
+
"node_modules",
|
|
28
|
+
"vscode-oniguruma",
|
|
29
|
+
"release",
|
|
30
|
+
"onig.wasm"
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
// Scope to CSS class mapping
|
|
34
|
+
const SCOPE_COLORS = {
|
|
35
|
+
"keyword.control": { color: "#C586C0", name: "keyword" },
|
|
36
|
+
"keyword.operator": { color: "#D4D4D4", name: "operator" },
|
|
37
|
+
"keyword.other": { color: "#569CD6", name: "keyword-other" },
|
|
38
|
+
"entity.name.function": { color: "#DCDCAA", name: "function" },
|
|
39
|
+
"entity.name.method": { color: "#DCDCAA", name: "method" },
|
|
40
|
+
"storage.type": { color: "#4EC9B0", name: "type" },
|
|
41
|
+
"storage.modifier": { color: "#569CD6", name: "modifier" },
|
|
42
|
+
"constant.language": { color: "#569CD6", name: "constant" },
|
|
43
|
+
"constant.numeric": { color: "#B5CEA8", name: "number" },
|
|
44
|
+
"constant.character": { color: "#D7BA7D", name: "escape" },
|
|
45
|
+
"constant.time": { color: "#B5CEA8", name: "time" },
|
|
46
|
+
"string.quoted": { color: "#CE9178", name: "string" },
|
|
47
|
+
"string.regexp": { color: "#D16969", name: "regexp" },
|
|
48
|
+
"string.interpolation": { color: "#569CD6", name: "interpolation" },
|
|
49
|
+
"comment.line": { color: "#6A9955", name: "comment" },
|
|
50
|
+
"comment.block": { color: "#6A9955", name: "comment" },
|
|
51
|
+
"comment.doc": { color: "#608B4E", name: "doc-comment" },
|
|
52
|
+
"variable.parameter": { color: "#9CDCFE", name: "parameter" },
|
|
53
|
+
"variable.language": { color: "#9CDCFE", name: "variable-lang" },
|
|
54
|
+
"variable.encoder": { color: "#4FC1FF", name: "encoder" },
|
|
55
|
+
variable: { color: "#9CDCFE", name: "variable" },
|
|
56
|
+
"meta.function-call": { color: "#DCDCAA", name: "function-call" },
|
|
57
|
+
"meta.type-annotation": { color: "#4EC9B0", name: "type-annotation" },
|
|
58
|
+
"punctuation.comma": { color: "#D4D4D4", name: "punctuation" },
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
function getScopeStyle(scopes) {
|
|
62
|
+
for (const [scopePrefix, style] of Object.entries(SCOPE_COLORS)) {
|
|
63
|
+
for (const scope of scopes) {
|
|
64
|
+
if (scope.includes(scopePrefix)) {
|
|
65
|
+
return style;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return { color: "#D4D4D4", name: "default" };
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function escapeHtml(text) {
|
|
73
|
+
return text
|
|
74
|
+
.replace(/&/g, "&")
|
|
75
|
+
.replace(/</g, "<")
|
|
76
|
+
.replace(/>/g, ">")
|
|
77
|
+
.replace(/"/g, """);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function initGrammar() {
|
|
81
|
+
const wasmBin = fs.readFileSync(ONIG_WASM_PATH).buffer;
|
|
82
|
+
await oniguruma.loadWASM(wasmBin);
|
|
83
|
+
|
|
84
|
+
const registry = new vsctm.Registry({
|
|
85
|
+
onigLib: Promise.resolve({
|
|
86
|
+
createOnigScanner: (sources) => new oniguruma.OnigScanner(sources),
|
|
87
|
+
createOnigString: (str) => new oniguruma.OnigString(str),
|
|
88
|
+
}),
|
|
89
|
+
loadGrammar: async (scopeName) => {
|
|
90
|
+
if (scopeName === "source.liquidsoap") {
|
|
91
|
+
const grammarContent = fs.readFileSync(GRAMMAR_PATH, "utf8");
|
|
92
|
+
return vsctm.parseRawGrammar(grammarContent, GRAMMAR_PATH);
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
return registry.loadGrammar("source.liquidsoap");
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function tokenizeFile(grammar, content) {
|
|
102
|
+
const lines = content.split("\n");
|
|
103
|
+
const result = [];
|
|
104
|
+
let ruleStack = vsctm.INITIAL;
|
|
105
|
+
const issues = [];
|
|
106
|
+
|
|
107
|
+
for (let i = 0; i < lines.length; i++) {
|
|
108
|
+
const line = lines[i];
|
|
109
|
+
const lineTokens = grammar.tokenizeLine(line, ruleStack);
|
|
110
|
+
const tokens = [];
|
|
111
|
+
|
|
112
|
+
for (const token of lineTokens.tokens) {
|
|
113
|
+
const text = line.substring(token.startIndex, token.endIndex);
|
|
114
|
+
const scopes = token.scopes;
|
|
115
|
+
tokens.push({ text, scopes, startIndex: token.startIndex });
|
|
116
|
+
|
|
117
|
+
// Check for potential issues
|
|
118
|
+
if (
|
|
119
|
+
scopes.length === 1 &&
|
|
120
|
+
scopes[0] === "source.liquidsoap" &&
|
|
121
|
+
text.trim().length > 0
|
|
122
|
+
) {
|
|
123
|
+
// Check for known constructs that should be highlighted
|
|
124
|
+
const unmatched = checkUnmatchedConstruct(text.trim());
|
|
125
|
+
if (unmatched) {
|
|
126
|
+
issues.push({
|
|
127
|
+
line: i + 1,
|
|
128
|
+
text: text.trim(),
|
|
129
|
+
issue: unmatched,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
result.push({ line: line, lineNumber: i + 1, tokens });
|
|
136
|
+
ruleStack = lineTokens.ruleStack;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return { lines: result, issues };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function checkUnmatchedConstruct(text) {
|
|
143
|
+
// Keywords that should be highlighted but might be missed
|
|
144
|
+
const keywords = [
|
|
145
|
+
"open",
|
|
146
|
+
"finally",
|
|
147
|
+
"yields",
|
|
148
|
+
"null",
|
|
149
|
+
"mod",
|
|
150
|
+
"%include",
|
|
151
|
+
"@flag",
|
|
152
|
+
"@docof",
|
|
153
|
+
];
|
|
154
|
+
|
|
155
|
+
for (const kw of keywords) {
|
|
156
|
+
if (text === kw || text.startsWith(kw + " ") || text.startsWith(kw + "(")) {
|
|
157
|
+
return `Keyword '${kw}' not highlighted`;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Check for dereference operator
|
|
162
|
+
if (/^![a-z_]/.test(text)) {
|
|
163
|
+
return "Dereference operator '!' not highlighted";
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function generateLineHtml(lineData) {
|
|
170
|
+
const { line, lineNumber, tokens } = lineData;
|
|
171
|
+
let html = `<tr><td class="line-number">${lineNumber}</td><td class="code">`;
|
|
172
|
+
|
|
173
|
+
if (tokens.length === 0 || line.length === 0) {
|
|
174
|
+
html += " ";
|
|
175
|
+
} else {
|
|
176
|
+
for (const token of tokens) {
|
|
177
|
+
const style = getScopeStyle(token.scopes);
|
|
178
|
+
const escapedText = escapeHtml(token.text);
|
|
179
|
+
const scopeTitle = token.scopes.join(" → ");
|
|
180
|
+
html += `<span class="token ${style.name}" style="color: ${style.color}" title="${escapeHtml(scopeTitle)}">${escapedText}</span>`;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
html += "</td></tr>\n";
|
|
185
|
+
return html;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function generateFileHtml(filename, tokenResult) {
|
|
189
|
+
const { lines, issues } = tokenResult;
|
|
190
|
+
|
|
191
|
+
let html = `
|
|
192
|
+
<!DOCTYPE html>
|
|
193
|
+
<html lang="en">
|
|
194
|
+
<head>
|
|
195
|
+
<meta charset="UTF-8">
|
|
196
|
+
<title>${escapeHtml(filename)} - Syntax Highlight Test</title>
|
|
197
|
+
<style>
|
|
198
|
+
body {
|
|
199
|
+
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
|
|
200
|
+
background: #1E1E1E;
|
|
201
|
+
color: #D4D4D4;
|
|
202
|
+
margin: 0;
|
|
203
|
+
padding: 20px;
|
|
204
|
+
}
|
|
205
|
+
h1 {
|
|
206
|
+
color: #569CD6;
|
|
207
|
+
font-size: 18px;
|
|
208
|
+
border-bottom: 1px solid #333;
|
|
209
|
+
padding-bottom: 10px;
|
|
210
|
+
}
|
|
211
|
+
.file-info {
|
|
212
|
+
color: #808080;
|
|
213
|
+
font-size: 12px;
|
|
214
|
+
margin-bottom: 20px;
|
|
215
|
+
}
|
|
216
|
+
.issues {
|
|
217
|
+
background: #3E2A2A;
|
|
218
|
+
border: 1px solid #7D4040;
|
|
219
|
+
border-radius: 4px;
|
|
220
|
+
padding: 10px;
|
|
221
|
+
margin-bottom: 20px;
|
|
222
|
+
}
|
|
223
|
+
.issues h3 {
|
|
224
|
+
color: #F48771;
|
|
225
|
+
margin: 0 0 10px 0;
|
|
226
|
+
font-size: 14px;
|
|
227
|
+
}
|
|
228
|
+
.issues ul {
|
|
229
|
+
margin: 0;
|
|
230
|
+
padding-left: 20px;
|
|
231
|
+
}
|
|
232
|
+
.issues li {
|
|
233
|
+
color: #D4D4D4;
|
|
234
|
+
font-size: 12px;
|
|
235
|
+
margin: 4px 0;
|
|
236
|
+
}
|
|
237
|
+
table {
|
|
238
|
+
border-collapse: collapse;
|
|
239
|
+
width: 100%;
|
|
240
|
+
}
|
|
241
|
+
td {
|
|
242
|
+
padding: 0;
|
|
243
|
+
vertical-align: top;
|
|
244
|
+
}
|
|
245
|
+
.line-number {
|
|
246
|
+
color: #858585;
|
|
247
|
+
text-align: right;
|
|
248
|
+
padding-right: 16px;
|
|
249
|
+
width: 40px;
|
|
250
|
+
user-select: none;
|
|
251
|
+
border-right: 1px solid #333;
|
|
252
|
+
}
|
|
253
|
+
.code {
|
|
254
|
+
padding-left: 16px;
|
|
255
|
+
white-space: pre;
|
|
256
|
+
}
|
|
257
|
+
.token {
|
|
258
|
+
cursor: default;
|
|
259
|
+
}
|
|
260
|
+
tr:hover {
|
|
261
|
+
background: #2A2A2A;
|
|
262
|
+
}
|
|
263
|
+
.legend {
|
|
264
|
+
position: fixed;
|
|
265
|
+
top: 20px;
|
|
266
|
+
right: 20px;
|
|
267
|
+
background: #252526;
|
|
268
|
+
border: 1px solid #333;
|
|
269
|
+
border-radius: 4px;
|
|
270
|
+
padding: 10px;
|
|
271
|
+
font-size: 11px;
|
|
272
|
+
max-width: 200px;
|
|
273
|
+
}
|
|
274
|
+
.legend h4 {
|
|
275
|
+
margin: 0 0 8px 0;
|
|
276
|
+
color: #808080;
|
|
277
|
+
}
|
|
278
|
+
.legend-item {
|
|
279
|
+
margin: 4px 0;
|
|
280
|
+
}
|
|
281
|
+
</style>
|
|
282
|
+
</head>
|
|
283
|
+
<body>
|
|
284
|
+
<h1>${escapeHtml(filename)}</h1>
|
|
285
|
+
<div class="file-info">${lines.length} lines</div>
|
|
286
|
+
`;
|
|
287
|
+
|
|
288
|
+
if (issues.length > 0) {
|
|
289
|
+
html += `
|
|
290
|
+
<div class="issues">
|
|
291
|
+
<h3>⚠️ Potential Highlighting Issues (${issues.length})</h3>
|
|
292
|
+
<ul>
|
|
293
|
+
`;
|
|
294
|
+
for (const issue of issues.slice(0, 20)) {
|
|
295
|
+
html += ` <li>Line ${issue.line}: "${escapeHtml(issue.text)}" - ${escapeHtml(issue.issue)}</li>\n`;
|
|
296
|
+
}
|
|
297
|
+
if (issues.length > 20) {
|
|
298
|
+
html += ` <li>... and ${issues.length - 20} more</li>\n`;
|
|
299
|
+
}
|
|
300
|
+
html += ` </ul>
|
|
301
|
+
</div>
|
|
302
|
+
`;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
html += `
|
|
306
|
+
<div class="legend">
|
|
307
|
+
<h4>Scope Colors</h4>
|
|
308
|
+
`;
|
|
309
|
+
for (const [scope, style] of Object.entries(SCOPE_COLORS).slice(0, 10)) {
|
|
310
|
+
html += ` <div class="legend-item"><span style="color: ${style.color}">■</span> ${scope}</div>\n`;
|
|
311
|
+
}
|
|
312
|
+
html += ` </div>
|
|
313
|
+
|
|
314
|
+
<table>
|
|
315
|
+
`;
|
|
316
|
+
|
|
317
|
+
for (const lineData of lines) {
|
|
318
|
+
html += generateLineHtml(lineData);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
html += `
|
|
322
|
+
</table>
|
|
323
|
+
</body>
|
|
324
|
+
</html>
|
|
325
|
+
`;
|
|
326
|
+
|
|
327
|
+
return html;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function generateIndexHtml(files) {
|
|
331
|
+
let html = `
|
|
332
|
+
<!DOCTYPE html>
|
|
333
|
+
<html lang="en">
|
|
334
|
+
<head>
|
|
335
|
+
<meta charset="UTF-8">
|
|
336
|
+
<title>Liquidsoap Grammar Test Results</title>
|
|
337
|
+
<style>
|
|
338
|
+
body {
|
|
339
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
340
|
+
background: #1E1E1E;
|
|
341
|
+
color: #D4D4D4;
|
|
342
|
+
margin: 0;
|
|
343
|
+
padding: 20px;
|
|
344
|
+
max-width: 1200px;
|
|
345
|
+
margin: 0 auto;
|
|
346
|
+
}
|
|
347
|
+
h1 {
|
|
348
|
+
color: #569CD6;
|
|
349
|
+
border-bottom: 1px solid #333;
|
|
350
|
+
padding-bottom: 10px;
|
|
351
|
+
}
|
|
352
|
+
.summary {
|
|
353
|
+
background: #252526;
|
|
354
|
+
border: 1px solid #333;
|
|
355
|
+
border-radius: 4px;
|
|
356
|
+
padding: 20px;
|
|
357
|
+
margin-bottom: 20px;
|
|
358
|
+
}
|
|
359
|
+
.summary h2 {
|
|
360
|
+
margin-top: 0;
|
|
361
|
+
color: #4EC9B0;
|
|
362
|
+
}
|
|
363
|
+
.stat {
|
|
364
|
+
display: inline-block;
|
|
365
|
+
margin-right: 30px;
|
|
366
|
+
}
|
|
367
|
+
.stat-value {
|
|
368
|
+
font-size: 24px;
|
|
369
|
+
font-weight: bold;
|
|
370
|
+
color: #DCDCAA;
|
|
371
|
+
}
|
|
372
|
+
.stat-label {
|
|
373
|
+
font-size: 12px;
|
|
374
|
+
color: #808080;
|
|
375
|
+
}
|
|
376
|
+
.file-list {
|
|
377
|
+
list-style: none;
|
|
378
|
+
padding: 0;
|
|
379
|
+
}
|
|
380
|
+
.file-list li {
|
|
381
|
+
margin: 4px 0;
|
|
382
|
+
}
|
|
383
|
+
.file-list a {
|
|
384
|
+
color: #9CDCFE;
|
|
385
|
+
text-decoration: none;
|
|
386
|
+
}
|
|
387
|
+
.file-list a:hover {
|
|
388
|
+
text-decoration: underline;
|
|
389
|
+
}
|
|
390
|
+
.has-issues {
|
|
391
|
+
color: #F48771 !important;
|
|
392
|
+
}
|
|
393
|
+
.issue-count {
|
|
394
|
+
color: #808080;
|
|
395
|
+
font-size: 12px;
|
|
396
|
+
}
|
|
397
|
+
.section {
|
|
398
|
+
margin-top: 30px;
|
|
399
|
+
}
|
|
400
|
+
.section h3 {
|
|
401
|
+
color: #4EC9B0;
|
|
402
|
+
border-bottom: 1px solid #333;
|
|
403
|
+
padding-bottom: 5px;
|
|
404
|
+
}
|
|
405
|
+
</style>
|
|
406
|
+
</head>
|
|
407
|
+
<body>
|
|
408
|
+
<h1>Liquidsoap Grammar Test Results</h1>
|
|
409
|
+
|
|
410
|
+
<div class="summary">
|
|
411
|
+
<h2>Summary</h2>
|
|
412
|
+
<div class="stat">
|
|
413
|
+
<div class="stat-value">${files.length}</div>
|
|
414
|
+
<div class="stat-label">Files Tested</div>
|
|
415
|
+
</div>
|
|
416
|
+
<div class="stat">
|
|
417
|
+
<div class="stat-value">${files.filter((f) => f.issues > 0).length}</div>
|
|
418
|
+
<div class="stat-label">Files with Issues</div>
|
|
419
|
+
</div>
|
|
420
|
+
<div class="stat">
|
|
421
|
+
<div class="stat-value">${files.reduce((sum, f) => sum + f.issues, 0)}</div>
|
|
422
|
+
<div class="stat-label">Total Issues</div>
|
|
423
|
+
</div>
|
|
424
|
+
</div>
|
|
425
|
+
|
|
426
|
+
<div class="section">
|
|
427
|
+
<h3>Files with Issues</h3>
|
|
428
|
+
<ul class="file-list">
|
|
429
|
+
`;
|
|
430
|
+
|
|
431
|
+
const filesWithIssues = files.filter((f) => f.issues > 0);
|
|
432
|
+
if (filesWithIssues.length === 0) {
|
|
433
|
+
html += ` <li>No issues found!</li>\n`;
|
|
434
|
+
} else {
|
|
435
|
+
for (const file of filesWithIssues) {
|
|
436
|
+
html += ` <li><a href="${escapeHtml(file.htmlPath)}" class="has-issues">${escapeHtml(file.name)}</a> <span class="issue-count">(${file.issues} issues)</span></li>\n`;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
html += `
|
|
441
|
+
</ul>
|
|
442
|
+
</div>
|
|
443
|
+
|
|
444
|
+
<div class="section">
|
|
445
|
+
<h3>All Files</h3>
|
|
446
|
+
<ul class="file-list">
|
|
447
|
+
`;
|
|
448
|
+
|
|
449
|
+
for (const file of files) {
|
|
450
|
+
const issueClass = file.issues > 0 ? ' class="has-issues"' : "";
|
|
451
|
+
const issueCount =
|
|
452
|
+
file.issues > 0
|
|
453
|
+
? ` <span class="issue-count">(${file.issues} issues)</span>`
|
|
454
|
+
: "";
|
|
455
|
+
html += ` <li><a href="${escapeHtml(file.htmlPath)}"${issueClass}>${escapeHtml(file.name)}</a>${issueCount}</li>\n`;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
html += `
|
|
459
|
+
</ul>
|
|
460
|
+
</div>
|
|
461
|
+
</body>
|
|
462
|
+
</html>
|
|
463
|
+
`;
|
|
464
|
+
|
|
465
|
+
return html;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
function getAllLiqFiles(dir, basePath = "") {
|
|
469
|
+
const files = [];
|
|
470
|
+
for (const item of fs.readdirSync(dir)) {
|
|
471
|
+
const fullPath = path.join(dir, item);
|
|
472
|
+
const relativePath = path.join(basePath, item);
|
|
473
|
+
if (fs.statSync(fullPath).isDirectory()) {
|
|
474
|
+
files.push(...getAllLiqFiles(fullPath, relativePath));
|
|
475
|
+
} else if (item.endsWith(".liq")) {
|
|
476
|
+
files.push({ fullPath, relativePath });
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
return files;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
async function main() {
|
|
483
|
+
console.log("Initializing grammar...");
|
|
484
|
+
const grammar = await initGrammar();
|
|
485
|
+
|
|
486
|
+
// Clean and create output directory
|
|
487
|
+
if (fs.existsSync(OUTPUT_DIR)) {
|
|
488
|
+
fs.rmSync(OUTPUT_DIR, { recursive: true });
|
|
489
|
+
}
|
|
490
|
+
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
|
|
491
|
+
|
|
492
|
+
const fileResults = [];
|
|
493
|
+
|
|
494
|
+
for (const { dir, prefix } of SOURCE_DIRS) {
|
|
495
|
+
if (!fs.existsSync(dir)) {
|
|
496
|
+
console.log(`Skipping ${prefix}: directory not found`);
|
|
497
|
+
continue;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
const liqFiles = getAllLiqFiles(dir);
|
|
501
|
+
console.log(`\nProcessing ${prefix}/ (${liqFiles.length} files)...\n`);
|
|
502
|
+
|
|
503
|
+
for (const { fullPath, relativePath } of liqFiles) {
|
|
504
|
+
const content = fs.readFileSync(fullPath, "utf8");
|
|
505
|
+
const tokenResult = tokenizeFile(grammar, content);
|
|
506
|
+
|
|
507
|
+
const prefixedPath = path.join(prefix, relativePath);
|
|
508
|
+
const outputPath = path.join(
|
|
509
|
+
OUTPUT_DIR,
|
|
510
|
+
prefixedPath.replace(".liq", ".html")
|
|
511
|
+
);
|
|
512
|
+
const outputDir = path.dirname(outputPath);
|
|
513
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
514
|
+
|
|
515
|
+
const html = generateFileHtml(prefixedPath, tokenResult);
|
|
516
|
+
fs.writeFileSync(outputPath, html, "utf8");
|
|
517
|
+
|
|
518
|
+
const issueCount = tokenResult.issues.length;
|
|
519
|
+
const status = issueCount > 0 ? `⚠️ ${issueCount} issues` : "✓";
|
|
520
|
+
console.log(` ${status.padEnd(15)} ${prefixedPath}`);
|
|
521
|
+
|
|
522
|
+
fileResults.push({
|
|
523
|
+
name: prefixedPath,
|
|
524
|
+
htmlPath: prefixedPath.replace(".liq", ".html"),
|
|
525
|
+
issues: issueCount,
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
// Generate index
|
|
531
|
+
const indexHtml = generateIndexHtml(fileResults);
|
|
532
|
+
fs.writeFileSync(path.join(OUTPUT_DIR, "index.html"), indexHtml, "utf8");
|
|
533
|
+
|
|
534
|
+
console.log(`\n${"─".repeat(60)}`);
|
|
535
|
+
console.log(`Results: ${OUTPUT_DIR}/index.html`);
|
|
536
|
+
console.log(
|
|
537
|
+
`Files with issues: ${fileResults.filter((f) => f.issues > 0).length}/${fileResults.length}`
|
|
538
|
+
);
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
main().catch((err) => {
|
|
542
|
+
console.error("Error:", err);
|
|
543
|
+
process.exit(1);
|
|
544
|
+
});
|
|
@@ -401,7 +401,8 @@
|
|
|
401
401
|
# ^^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
402
402
|
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.other.liquidsoap
|
|
403
403
|
# ^^^^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
404
|
-
#
|
|
404
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
405
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.operator.dereference.liquidsoap
|
|
405
406
|
# ^^ source.liquidsoap meta.function-call.liquidsoap variable.liquidsoap
|
|
406
407
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
407
408
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
@@ -469,7 +470,8 @@
|
|
|
469
470
|
# ^^^^^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
470
471
|
# ^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap keyword.other.liquidsoap
|
|
471
472
|
# ^^^^^^^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
472
|
-
#
|
|
473
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap
|
|
474
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap keyword.operator.dereference.liquidsoap
|
|
473
475
|
# ^^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap variable.liquidsoap
|
|
474
476
|
# ^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap
|
|
475
477
|
# ^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap
|
|
@@ -538,7 +540,8 @@
|
|
|
538
540
|
# ^^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
539
541
|
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.other.liquidsoap
|
|
540
542
|
# ^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
541
|
-
#
|
|
543
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
544
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.operator.dereference.liquidsoap
|
|
542
545
|
# ^^ source.liquidsoap meta.function-call.liquidsoap variable.liquidsoap
|
|
543
546
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
544
547
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
@@ -1468,7 +1471,8 @@
|
|
|
1468
1471
|
# ^^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
1469
1472
|
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.other.liquidsoap
|
|
1470
1473
|
# ^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
1471
|
-
#
|
|
1474
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
1475
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.operator.dereference.liquidsoap
|
|
1472
1476
|
# ^^ source.liquidsoap meta.function-call.liquidsoap variable.liquidsoap
|
|
1473
1477
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
1474
1478
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
@@ -1993,7 +1997,8 @@
|
|
|
1993
1997
|
# ^^^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
1994
1998
|
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.other.liquidsoap
|
|
1995
1999
|
# ^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
1996
|
-
#
|
|
2000
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
2001
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.operator.dereference.liquidsoap
|
|
1997
2002
|
# ^^ source.liquidsoap meta.function-call.liquidsoap variable.liquidsoap
|
|
1998
2003
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
1999
2004
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
@@ -2096,7 +2101,8 @@
|
|
|
2096
2101
|
# ^^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
2097
2102
|
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.other.liquidsoap
|
|
2098
2103
|
# ^^^^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
2099
|
-
#
|
|
2104
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
2105
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.operator.dereference.liquidsoap
|
|
2100
2106
|
# ^^ source.liquidsoap meta.function-call.liquidsoap variable.liquidsoap
|
|
2101
2107
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
2102
2108
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
@@ -2203,7 +2209,8 @@
|
|
|
2203
2209
|
# ^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
2204
2210
|
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.other.liquidsoap
|
|
2205
2211
|
# ^^^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
2206
|
-
#
|
|
2212
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
2213
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.operator.dereference.liquidsoap
|
|
2207
2214
|
# ^^ source.liquidsoap meta.function-call.liquidsoap variable.liquidsoap
|
|
2208
2215
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
2209
2216
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
@@ -2314,7 +2321,8 @@
|
|
|
2314
2321
|
# ^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
2315
2322
|
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.other.liquidsoap
|
|
2316
2323
|
# ^^^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
2317
|
-
#
|
|
2324
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
2325
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.operator.dereference.liquidsoap
|
|
2318
2326
|
# ^^ source.liquidsoap meta.function-call.liquidsoap variable.liquidsoap
|
|
2319
2327
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
2320
2328
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
@@ -2429,7 +2437,8 @@
|
|
|
2429
2437
|
# ^^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
2430
2438
|
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.other.liquidsoap
|
|
2431
2439
|
# ^^^^^^^^^^ source.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
2432
|
-
#
|
|
2440
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
2441
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap keyword.operator.dereference.liquidsoap
|
|
2433
2442
|
# ^^ source.liquidsoap meta.function-call.liquidsoap variable.liquidsoap
|
|
2434
2443
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
2435
2444
|
# ^ source.liquidsoap meta.function-call.liquidsoap
|
|
@@ -2479,7 +2488,8 @@
|
|
|
2479
2488
|
# ^^^^^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
2480
2489
|
# ^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap keyword.other.liquidsoap
|
|
2481
2490
|
# ^^^^^^^^^^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap variable.method.liquidsoap
|
|
2482
|
-
#
|
|
2491
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap
|
|
2492
|
+
# ^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap keyword.operator.dereference.liquidsoap
|
|
2483
2493
|
# ^^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap variable.liquidsoap
|
|
2484
2494
|
# ^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap
|
|
2485
2495
|
# ^ source.liquidsoap meta.function-call.liquidsoap meta.function-call.liquidsoap
|
|
@@ -532,7 +532,9 @@
|
|
|
532
532
|
# ^^^^^^^^^^^^^^ source.liquidsoap comment.line.number-sign.liquidsoap
|
|
533
533
|
># @flag hidden
|
|
534
534
|
#^ source.liquidsoap comment.line.number-sign.liquidsoap
|
|
535
|
-
#
|
|
535
|
+
# ^ source.liquidsoap comment.line.number-sign.liquidsoap
|
|
536
|
+
# ^^^^^ source.liquidsoap comment.line.number-sign.liquidsoap comment.doc.flag.liquidsoap
|
|
537
|
+
# ^^^^^^^ source.liquidsoap comment.line.number-sign.liquidsoap
|
|
536
538
|
>def fade.scale(~id="fade.scale", x, s)
|
|
537
539
|
#^^^ source.liquidsoap keyword.other.function.definition.liquidsoap
|
|
538
540
|
# ^ source.liquidsoap
|