denoにPR出そうとして苦戦した

December 31, 2020

commit history
  1. 2020/11/29 23:49:12 a9a9485
headline

きっかけ

https://note.com/maguro_tuna/n/n5e5b56479abe

deno_lintにコントリビュートしている人がいて、やってみるかという気持ちがわいてきた

対象の関数

buildMessage

https://github.com/denoland/deno/blob/097babb6fbe313cdb1d749d510e9f8eb57ba899f/std/testing/asserts.ts#L69

function buildMessage(diffResult: ReadonlyArray<DiffResult<string>>): string[] {
  const messages: string[] = [];
  messages.push("");
  messages.push("");
  messages.push(
    `    ${gray(bold("[Diff]"))} ${red(bold("Actual"))} / ${
      green(bold("Expected"))
    }`,
  );
  messages.push("");
  messages.push("");
  diffResult.forEach((result: DiffResult<string>): void => {
    const c = createColor(result.type);
    messages.push(c(`${createSign(result.type)}${result.value}`));
  });
  messages.push("");

  return messages;
}

まず、buildMessageだが、Denoのテストを実行して失敗した時に表示するメッセージをきれいに整えて出力するものだった。(ActualとExpectedのDiffを赤と緑の太文字で表示する) それ自体はすぐわかったのだが、コメントにどう書けばいいか迷ってDeepLにたよりつつなんとかできた。

isKeyedCollection

https://github.com/denoland/deno/blob/097babb6fbe313cdb1d749d510e9f8eb57ba899f/std/testing/asserts.ts#L89

function isKeyedCollection(x: unknown): x is Set<unknown> {
  return [Symbol.iterator, "size"].every((k) => k in (x as Set<unknown>));
}

こっちは関数名がそのまんま示してくれていたからコメントとしてはすぐきまった。

やっていることとしてはSet<unknown>でxをSetオブジェクト型だとアサーションして、それがSymbol.itelator(オブジェクトのデフォルトのイテレーター)とsizeを持っているか調べていた。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Keyed_collections

new Map([[‘a’, 1]]) とかをisKeyedCollectionの引数に渡してやるとtrueがかえって来る

試した

しかし、typescriptの表現が色々でてきた。

  • unknown
  • is
  • as

これらについては調べて理解したのでいつかまとめたい

エラー出た

記事を書きながら余裕な感じでGithub Actionsのciが終わるのを待ってたら落ちた。どうなるこれ 。。ってかきながら、来週かなと思ってたら速攻で返事きてた。 なるほど、最新じゃないと。。クローンしたの6時間くらい前だから、バージョンアップしたか? てことでクローン元からpullしてみたら、、、へんこうありました。ありがとう @bartlomieju Deno Landのメンバーでした。返答早すぎる ci通るかなー… とおったー。prだした。今日はおしまい

pr

https://github.com/denoland/deno/pull/8542


contact