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

查询语法

为了使用 Inkuire 而不是默认搜索引擎搜索 scaladoc 搜索栏查询,查询必须包含 => 字符序列。

接受的输入类似于 Scala 3 中的柯里化函数签名。有一些区别

  • 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

对于查询 Name => NameString => StringName => StringString => Name,应该找到 fromNamefromString 这两种方法。

工作原理

Inkuire 作为浏览器中的 JavaScript 工作器运行,这要归功于 ScalaJS 的强大功能。

要在运行 scaladoc 时启用 Inkuire,请添加标志 -Ygenerate-inkuire。通过添加此标志,将生成两个文件

  • inkuire-db.json - 这是包含当前记录项目中所有可搜索声明的文件,格式为 Inkuire 搜索引擎可读。
  • inkuire-config.json - 此文件包含应从当前项目的文档中搜索的数据库文件的位置。默认情况下,它将与本地数据库文件的位置以及 外部映射 中数据库文件的默认隐含位置一起生成。

此页面贡献者