Scaladoc

基於類型的搜尋

語言
此文件頁面專屬於 Scala 3,且可能涵蓋 Scala 2 中沒有的新概念。除非另有說明,否則此頁面中的所有程式碼範例都假設您使用的是 Scala 3。

透過符號名稱搜尋函式可能會很耗時。這就是新的 scaladoc 允許透過類型搜尋方法和欄位的原因。

考慮下列擴充方法定義

extension [T](arr: IArray[T]) def span(p: T => Boolean): (IArray[T], IArray[T]) = ...

我們可以搜尋 IArray[A] => (A => Boolean) => (IArray[A], IArray[A]),而不用搜尋 span

若要使用這項功能,請在 scaladoc 搜尋欄中輸入您要尋找的成員簽章。以下是它的運作方式

這項功能由 Inkuire 搜尋引擎提供,適用於 Scala 3 和 Kotlin。若要隨時了解此功能的開發進度,請追蹤 Inkuire 儲存庫

查詢範例

一些查詢範例及其預期結果

  • List[Int] => (Int => Long) => List[Long] -> map
  • Seq[A] => (A => B) => Seq[B] -> map
  • (A, B) => A -> _1
  • Set[Long] => Long => Boolean -> contains
  • Int => Long => Int -> const
  • String => Int => Char -> apply
  • (Int & Float) => (String | Double) -> toDouble, toString
  • F[A] => Int -> length

查詢語法

為了讓 scaladoc 搜尋列查詢使用 Inkuire 而不是預設搜尋引擎進行搜尋,查詢必須包含 => 字元序列。

可接受的輸入類似於 Scala 3 中的 curried 函式簽章。有些差異

  • AndTypes、OrTypes 和 Functions 必須括在括號中,例如 (Int & Any) => String
  • 欄位和無參數方法可以在其類型前面加上 => 來找到,例如 => Int
  • 萬用字元 _ 可用來表示我們要在給定位置比對任何類型,例如 Long => Double => _
  • 單個字母形式的類型,例如 A 或帶數字的字母 X1 會自動假設為類型變數
  • 其他類型變數可以宣告,就像在多型函式中一樣,例如 [AVariable, AlsoAVariable] => AVariable => AlsoAVariable => AVariable

使用類型別名和方法接收器

在代碼如何對應到 InkuireDb 條目的部分,有一些轉換可以讓引擎更有意見(儘管開放給建議和變更)。首先,函式的接收器(非模組擁有者)可以當作第一個參數。自動柯里化也會套用,因此結果不會依賴於參數清單。在尋找比對時,valdef 沒有區別。

因此,下列宣告應該可以透過查詢 Num => Int => Int => Int 找到

class Num():
  def a(i: Int, j: Int): Int
  def b(i: Int)(j: Int): Int
  def c(i: Int): (Int => Int)
  val d: Int => Int => Int
  val e: Int => Int => Int
  val f: (Int, Int) => Int
end Num

def g(i: Num, j: Int, k: Int): Int
extension (i: Num) def h(j: Int, k: Int): Int
def i(i: Num, j: Int)(k: Int): Int
extension (i: Num) def j(j: Int)(k: Int): Int
...

在類型別名的部分,它們會在宣告和查詢簽章上進行去糖化。這表示對於宣告

type Name = String

def fromName(name: Name): String
def fromString(str: String): Name

這兩個方法,fromNamefromString,都應該可以透過查詢 Name => NameString => StringName => StringString => Name 找到。

運作方式

Inkuire 透過 ScalaJS 的強大功能,在瀏覽器中作為 JavaScript 工作執行緒運作。

要在執行 scaladoc 時啟用 Inkuire,請加入旗標 -Ygenerate-inkuire。加入此旗標後,會產生兩個檔案

  • inkuire-db.json - 這是包含所有可搜尋宣告的檔案,這些宣告來自目前記錄的專案,格式為 Inkuire 搜尋引擎可讀取的格式。
  • inkuire-config.json - 這個檔案包含應該可以從目前專案的說明文件中搜尋的資料庫檔案位置。預設情況下,它會產生本地資料庫檔案的位置,以及 外部對應 中資料庫檔案的預設暗示位置。

此頁面的貢獻者