scrapbox-userscript-std/PR:108
merge済み
from @Mijinko_SD
コードブロックの取得、および上書きを行う関数の追加 by MijinkoSD · Pull Request #108 · takker99/scrapbox-userscript-std
/takker/⬜️コードブロックの取得、および上書きを行う関数の追加
(nit) convert named functions to arrow functions
折角なのでテストを加えたい
getCodeBlocks
filterを挟めるようにしてあるけれど、コードブロックの収集中にフィルター処理を挟んでいるのが良くない気がしたMijinko_SD.icon
最後のreturnでArray.prototype.filter()を使うほうが合理的
updateCodeBlock
...
makeTitleChangeCommit
isCodeFile
これの用途がいまいちわからないtakker.icon
unknownではなく、いくらか型を絞ってしまってもいいのでは?
それはupdateCodeBlock()のnewCodeの無駄に種類の多い引数の型を判別するために用意したものですMijinko_SD.icon
unknownにしたのは他でも使えるようにするためだけなので、ぶっちゃけ不要です
これによる型判別を使用せずに、updateCodeBlock()の引数をnewCode: {content: string | string[]} | CodeFileにするという手もある
これだと関数内でnewCodeを使うのが楽になる反面、呼び出し方が若干複雑になるというデメリットもある
どちらが良いかわからなかった
flatCodeBodies
まあこれはいいかtakker.icon
よく使う処理を複数箇所に書きたくないので関数化しましたMijinko_SD.icon
なるほどtakker.icon
makeCommits
makeIndent
makeCodeBlockTitle
テストコードの書き方(というかそもそもテストで何をするのか)がよくわからなかったので、多分人任せになるかもしれません…Mijinko_SD.icon
getCodeBlocks()とisCodeFile()とextractFromCodeTitle()の3つの関数のテストコードを書いてみましたMijinko_SD.icon
初めて書いたので、良くない点や間違っている点があるかもしれません
あれば教えていただけると幸いです
了解ですtakker.icon
WebSocketの通信を挟む関数や、exportしていない関数のテストコードの書き方はわからなかったので、まだ書いていません
exportしてないやつは無理ですtakker.icon
通信系はmock使わないと無理ですtakker.icon
scrapbox.io serverの挙動を全部emulateしなきゃいけないのでやりたくない……
fetchだけならscrapbox-userscript-icon-suggestionでいくつか実装例がありますが……やりたくなさすぎて放置している……
https://code2svg.vercel.app/svg/https://raw.githubusercontent.com/MijinkoSD/scrapbox-userscript-std/7116444c93d9a2a4ec0b78e489182cb724f6101e/browser/websocket/updateCodeFile.test.ts#.svg
あり?https://code2svg.vercel.app/svg/L1/https://raw.githubusercontent.com/MijinkoSD/scrapbox-userscript-std/7116444c93d9a2a4ec0b78e489182cb724f6101e/browser/websocket/updateCodeFile.test.ts#.svgっているの?takker.icon
あーなるほど。isSimpleCodeFileをhttps://code2svg.vercel.app/svg/L2-8/https://raw.githubusercontent.com/MijinkoSD/scrapbox-userscript-std/7116444c93d9a2a4ec0b78e489182cb724f6101e/browser/websocket/updateCodeFile.ts#.svgしているファイル中で定義しているから、deno.nsを入れる必要があるわけか
isSimpleCodeFile.tsに分離したほうがいいと思う
了解しましたMijinko_SD.icon
getCodeBlocksは/restでいいと思いますtakker.icon
pull()はgetPage()をちょこっとwrapしただけ。そもそも必要性があやしい
組み込み型定義の違いでdirectoryを分けたいので、/restに置くのが適切
/restはどの環境でも使えるファイルを置いている
/websocketはbrowser環境でしか動かせないので、ここにgetCodeBlocksを入れると、不要な制約がかかってしまう
ちなみに/domと/websocketを分けているのは、importの副作用による不要なコードが混入するのを防ぐため
/websocketをimportに含めるとscrapbox-parserのコードが含まれてしまう
これは/domだけ使うなら不要
了解ですMijinko_SD.icon
PRにtakker.iconもcommitしたいけどできるのかな?takker.icon
PRにcommitできるのはauthorだけ?
うまいこと複数人が直接commitできるbranchを生やせばいいのかな?
できるならできるようにしたいMijinko_SD.icon
updateCodeFile.tsのCodeFileの適切な名前を考えたいMijinko_SD.icon
browser/dom/extractCodeFiles.tsのCodeFileと名前がぶつかってしまっている
思いつかない……………
SimpleCodeFileへ変更した
scrapbox-userscript-stdで同名異義のinterfaceが乱立している問題は別途なんとかしますtakker.icon
自分も混乱してきました
でもあんまり長い名前は入れたくないんですよね
namespace (TypeScript)を導入するしかないかな?
長い名前が嫌というわけではないので大丈夫です()Mijinko_SD.icon
もちろん、長いより短いに越したことはありませんが
メジャーバージョンアップ(互換性切り)の機運…?Mijinko_SD.icon
https://gyazo.com/dd79e6210882a3a1ac6acd56a654bf36
デバッグ文に色(limegreen)をつけた
メモMijinko_SD.icon
local_test/fmt-watch.ps1
code:fmt-watch.ps1
$files = @(
"./local_test/test.ts"
"./local_test/getCodeBlocks.test.ts"
"./browser/websocket/mod.ts"
"./browser/websocket/updateCodeBlock.ts"
"./browser/websocket/updateCodeFile.ts"
"./browser/websocket/updateCodeFile.test.ts"
"./browser/websocket/isSimpleCodeFile.ts"
"./browser/websocket/isSimpleCodeFile.test.ts"
"./browser/websocket/_codeBlock.ts"
"./browser/websocket/_codeBlock.test.ts"
"./rest/mod.ts"
"./rest/getCodeBlocks.ts"
"./rest/getCodeBlocks.test.ts"
) | ForEach-Object {$PSScriptRoot + "/../" + $PSItem}
deno fmt --watch $files
deno.jsonにいくつかコマンドを定義しようかなtakker.icon
deno task <なんとか>で実行できるようになる
2023-02-26
07:55:14 もうmergeしようかと思っているtakker.icon
mergeせずに放置する理由がない
reviewはまだできてないけど、このままreviewするまでmergeしないとかしていると、永久にmergeされない
定期的に時間をとって少しずつreviewする方法もあるが、それだと自転車置き場レベルの細かい指摘を何度も何度もすることになって、Mijinko_SD.iconさんが大変になる
たぶん動いているだろうし、mergeしちゃっても大丈夫だと思う
一応deno testだけはやっとく
個人的にテストした限りでは多分大丈夫だと思いますMijinko_SD.icon
2023-02-17 14:23:49 必要になったので先に#109をmergeします。すみませんtakker.icon
よきMijinko_SD.icon
2023/02/28
getCodeBlocks()でコードブロックを取得する際、タイトル行の行IDで絞り込めるようにしましたMijinko_SD.icon
ついでにフィルター周りのコードを少し簡略化しました
挙動は変えずに内部処理だけ変更した
deno fmtを度々やり忘れてしまっていてすみませんMijinko_SD.icon
プッシュ前にdeno fmtを入力するように心がけます
プッシュ前にやることMijinko_SD.icon
$ deno fmt
フォーマットし忘れの阻止
VSCodeに常時Denoでフォーマットする設定を入れたので不要
code:scrapbox-userscript-std.code-workspace(json)
{
// 中略
"settings": {
"deno.enable": true,
"editor.defaultFormatter": "denoland.vscode-deno",
"editor.formatOnSave": true
}
}
$ deno test --allow-read
テストファイルやテスト対象に異常があればここでエラーが出る
$ wsl deno check --reload ./**/*.ts
Windows環境でワイルドカードを使用する方法がわからなかったので、WSL 2を噛ませる
2023/03/01 --reloadを含めて更新するようにしないとpush後にエラーを吐いたMijinko_SD.icon
scrapbox-parser周りかesm.sh関係のエラーだと思われ
pre-commitを使うと自動化できるかも?takker.icon
提案しておいてなんですが、自分も一度も使ったことないです……
名前だけ知ってる
今度試しに使ってみようかな