iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
自我挑戰組

自己的 Leak, 自己抓(swift)系列 第 15

改造 SourceKitten 參數

  • 分享至 

  • xImage
  •  

昨天我們順利將 code 進行改寫

但會有幾個問題要處理

首先,我們不打算複寫原本的檔案,反而只是在過程當中偷改 code


問題?

  • 回報的位置會有偏差
  • CursorInfo 只能給予 file path

SourceKit

Request

{
    <key.request>:            (UID)     <source.request.cursorinfo>,
    [opt] <key.sourcetext>:   (string)  // Source contents.
    [opt] <key.sourcefile>:   (string)  // Absolute path to the file.
                                        // **Require**: key.sourcetext or key.sourcefile
    [opt] <key.offset>:       (int64)   // Byte offset of code point inside the source contents.
    [opt] <key.usr>:          (string)  // USR string for the entity.
                                        // **Require**: key.offset or key.usr
    [opt] <key.compilerargs>: [string*] // Array of zero or more strings for the compiler arguments,
                                        // e.g ["-sdk", "/path/to/sdk"]. If key.sourcefile is provided,
                                        // these must include the path to that file.
    [opt] <key.cancel_on_subsequent_request>: (int64) // Whether this request should be canceled if a
                                        // new cursor-info request is made that uses the same AST.
                                        // This behavior is a workaround for not having first-class
                                        // cancelation. For backwards compatibility, the default is 1.
}

Origin input

key.sourcefile: Target.swift
key.compilerargs:
- Target.swift
- file1.swift
- file2.swift
- xxx.swift
- other args

New input

key.sourcetext: newCode
key.sourcefile: Target.swift
key.compilerargs:
- Target.swift
- file1.swift
- file2.swift
- xxx.swift
- other args

結果

透過這樣的改動,我們可以對 SourceKit

我們現在要詢問的對象檔案是 Target.swift

並且 code 部分,是參照我們提供的 newCode


上一篇
除非,我們今天將 `[a]` 改寫成 `[a = a]`
下一篇
判斷變數是 struct
系列文
自己的 Leak, 自己抓(swift)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言