如何显示在 nix 中定义函数的位置?
How to show where function was defined in nix?
nix 中是否有任何方法可以检查函数的定义位置,查看其源代码?
比如我有一个函数writeScript
,如何查看它是从哪里来的?
Nix 将在 lambda 项的 'description' 中报告它。我将在这里假设 Nix 2.0。
$ nix --version
nix (Nix) 2.0
$ nix repl '<nixpkgs>'
Welcome to Nix version 2.0. Type :? for help.
Loading '<nixpkgs>'...
Added 8606 variables.
nix-repl> writeScript
«lambda @ /nix/store/5m86fk1jw1pcrysckb6kam77jdxh3kgd-nixos-18.03.131802.4b4bbce199d/nixos/pkgs/build-support/trivial-builders.nix:57:17»
nix-repl>
此位置有时可能与您期望的不同,因为它不会将您带到定义名称的位置,而是带到实际 lambda 所在的位置。
nix-repl> map (x: x)
«primop-app»
nix-repl> l: map (x: x) l
«lambda @ (string):1:1»
为了简单性和性能,Nix 评估器根本不会保留每个定义的信息。所以有时你需要使用 grep
或类似的方法进行暴力搜索。请注意 github 不会索引像 pkgs/top-level/all-packages.nix
.
这样的大文件
nix 中是否有任何方法可以检查函数的定义位置,查看其源代码?
比如我有一个函数writeScript
,如何查看它是从哪里来的?
Nix 将在 lambda 项的 'description' 中报告它。我将在这里假设 Nix 2.0。
$ nix --version
nix (Nix) 2.0
$ nix repl '<nixpkgs>'
Welcome to Nix version 2.0. Type :? for help.
Loading '<nixpkgs>'...
Added 8606 variables.
nix-repl> writeScript
«lambda @ /nix/store/5m86fk1jw1pcrysckb6kam77jdxh3kgd-nixos-18.03.131802.4b4bbce199d/nixos/pkgs/build-support/trivial-builders.nix:57:17»
nix-repl>
此位置有时可能与您期望的不同,因为它不会将您带到定义名称的位置,而是带到实际 lambda 所在的位置。
nix-repl> map (x: x)
«primop-app»
nix-repl> l: map (x: x) l
«lambda @ (string):1:1»
为了简单性和性能,Nix 评估器根本不会保留每个定义的信息。所以有时你需要使用 grep
或类似的方法进行暴力搜索。请注意 github 不会索引像 pkgs/top-level/all-packages.nix
.