如何显示nix中函数的定义位置?

srg*_*hma 6 nix

nix 有什么方法可以检查函数的定义位置,查看其源代码吗?

例如,我有一个函数writeScript,如何检查它来自哪里?

Rob*_*ing 5

Nix 将在 lambda 术语的“描述”中报告它。我在这里假设 Nix 2.0。

\n\n
$ nix --version\nnix (Nix) 2.0\n$ nix repl '<nixpkgs>'\nWelcome to Nix version 2.0. Type :? for help.\n\nLoading '<nixpkgs>'...\nAdded 8606 variables.\n\nnix-repl> writeScript\n\xc2\xablambda @ /nix/store/5m86fk1jw1pcrysckb6kam77jdxh3kgd-nixos-18.03.131802.4b4bbce199d/nixos/pkgs/build-support/trivial-builders.nix:57:17\xc2\xbb\n\nnix-repl> \n
Run Code Online (Sandbox Code Playgroud)\n\n

有时这个位置可能与您期望的不同,因为它不会带您到定义名称的位置,而是到实际 lambda 所在的位置。

\n\n
nix-repl> map (x: x)\n\xc2\xabprimop-app\xc2\xbb\n\nnix-repl> l: map (x: x) l\n\xc2\xablambda @ (string):1:1\xc2\xbb\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了简单性和性能,Nix 评估器根本不会保留每个定义的信息。所以有时你需要使用暴力grep或类似的方法进行搜索。请注意,github 不索引大文件,例如pkgs/top-level/all-packages.nix.

\n

  • 在 [search.nix.gsc.io](https://search.nix.gsc.io) 上有一个强大的 Nix 源搜索工具 - 这是一个查找 `writeScript =` 定义的查询:https://search .nix.gsc.io/?q=writeScript%20%3D&amp;i=nope&amp;files=&amp;repos= (2认同)