Closed6
SE-0274: Concise magic file names
Introduction
ASIS:
#fileは、そのファイルへのfullPathを含むStringとして、評価される(扱われる)
TOBE:
#fileの値を、よりhuman-readableにする。(filename + module name)
既存の挙動は、#filePathを使えば良い。
Motivation
#FileがFullPathを表示することの欠点
- usernameなどのsensitiveな情報が露見する
- Fullpathは長いStringで、binaryを大きくするので、Performanceに影響する
- fullPathはmachineによって変わるので、マシンによって、生成されるbinaryやhashの値が変わる。
Proposed Solution
-
Fullpath -> <module-name>/<file-name>
-
#filePathを新しく導入する。これは、既存の#fileのようにfullPathを表示する。
-
<moduel-name>/<file-name>はunique
The standard library's assertion and error functions will continue to use #file.
- Assertとかのログは、fullPath-> <module><filename>になるのか。
Detailed Design
String Format
- file-string → module-name "/" file-name
- file-string → module-name "/" disambiguator "/" file-name // Reserved for future use
ModuleNameとFileNameの間にdisambiguatorが入るかもしれない("/"を含んでいるかも)なので、ModuelNameとFileNameを取り出すときは、 #File.split("/").first, .lastみたいにする必要がある。
Tooling
SourceKit will provide facilities for mapping #file strings back to their matching #filePaths
設定次第では、既存の挙動を そのまま使えそう?
Source Compatibility
- 挙動が変わる恐れがある。#filePathを使えば、既存の挙動を再現できるう。
+ Swift6から導入される。(ConciseMagicFile)
影響がありそうなこと
- (小)ログの中身が少し変わる(fullPath -> modulePath)
- (大) #fileのfullPathの部分文字列を切り出す操作をしていたら、値が変わる。
- (大) Snapshottestのファイルの保存場所に#fileを使っていたら、以前のテストが通らなくなる(保存されているSnapshotが見つからなくなる)(swift-snapshot-testingは、swift-tool5.7で、enable-feature-flagがまだ使えないので、確かめられませんでした。Xocdeprojのフラグでenableしただけだと、projectではfileの値が変わるけど、snapshotSDKには影響がなかった.)
このスクラップは2024/04/20にクローズされました