Closed kzrnm closed 4 years ago
かなり本家と毛色が違う Expand
方法なので、これがどのようにコミュニティに受け入れられるかは分からないため議論無しで自信を持ってマージすることができません。
個人的には、便利ではあるが少し自由が効かない方法だという印象を持ちました。毎デバッグの際にこれが実行されるのはあまり嬉しくはなさそうです。
コードベースとして依存フロー解析のコードはとても助かります。GitHub Actionでフロー解析を前処理しておくのは合理的ですし、Expander
自体に埋め込んでしまえば余計なファイルも気になりませんね。 #21 に今までの話を追記しておくので、検討段階での試案や採用しなかった理由/デメリットについても書いて頂けると助かります。
毎デバッグの際にこれが実行されるのはあまり嬉しくはなさそうです。
そう思いまして、Combined.csx
にタイムスタンプを埋め込む機能を一応作っています。
Program.cs
にこっそり書いてるのですが、
// do nothing if file is not updated.
Expander.Expand(checkLastWriteTime: true);
とすると $"Last: {ファイルの更新日時.Ticks}"
が Combined.csx
の先頭に埋め込まれて、更新されていなかったら何もせずに終了します。
ファイルの中から直接呼び出すのではなくPowerShellから呼び出すサンプルを追加しました。
master
を取り込みました。
Expander はCC0にしたくないので一旦閉じます。
Expander の実装方法をいろいろ検討して、C# のみで完結してなおかつオーバーヘッドが小さい手法を思いついたので作成してみました。
の2つの機能にわかれているのでそれぞれ説明します。
GitHub Actions によるソースコード埋め込み
SourceCodeEmbeder を GitHub Actions で実行して、AtCoderLibrary にソースコード埋め込みファイルを自動コミットします。
ソースコード埋め込み用の型には
EditorBrowsable(EditorBrowsableState.Never)
をつけているので通常のライブラリ利用者からは見れません。SourceCodeEmbeder が行うこと
using
ディレクティブとその他のコードの分離Trivia
(Roslyn の用語) をすべて単一のスペースに置換することでコードを圧縮GitHub Actions の実行例
https://github.com/naminodarie/ac-library-cs/actions/runs/255529330
埋め込んだソースコードを利用するライブラリ
Expander が埋め込んだソースコードを展開するライブラリです。
README を書いてます。
https://github.com/naminodarie/ac-library-cs/blob/expander_cs/AtCoderLibrary.Expander/README.md
上記のようなファイルでためしたところ実行時間はそれぞれ
程度となりました。
21