Closed6

SE-0274: Concise magic file names

UeeekUeeek

Introduction

ASIS:

#fileは、そのファイルへのfullPathを含むStringとして、評価される(扱われる)

TOBE:

#fileの値を、よりhuman-readableにする。(filename + module name)
既存の挙動は、#filePathを使えば良い。

UeeekUeeek

Motivation

#FileがFullPathを表示することの欠点

  • usernameなどのsensitiveな情報が露見する
  • Fullpathは長いStringで、binaryを大きくするので、Performanceに影響する
  • fullPathはmachineによって変わるので、マシンによって、生成されるbinaryやhashの値が変わる。
UeeekUeeek

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>になるのか。
UeeekUeeek

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
設定次第では、既存の挙動を そのまま使えそう?

UeeekUeeek

Source Compatibility

  • 挙動が変わる恐れがある。#filePathを使えば、既存の挙動を再現できるう。
    + Swift6から導入される。(ConciseMagicFile)
UeeekUeeek

影響がありそうなこと

  • (小)ログの中身が少し変わる(fullPath -> modulePath)
  • (大) #fileのfullPathの部分文字列を切り出す操作をしていたら、値が変わる。
  • (大) Snapshottestのファイルの保存場所に#fileを使っていたら、以前のテストが通らなくなる(保存されているSnapshotが見つからなくなる)(swift-snapshot-testingは、swift-tool5.7で、enable-feature-flagがまだ使えないので、確かめられませんでした。Xocdeprojのフラグでenableしただけだと、projectではfileの値が変わるけど、snapshotSDKには影響がなかった.)
このスクラップは2024/04/20にクローズされました