docs: document unsafeGetAttrPos

Closes https://git.lix.systems/lix-project/lix/issues/770.

See also https://github.com/NixOS/nix/pull/12760.

Change-Id: Ibe7a9a41a84f749e3e9bedce8da28039fa6e6d2f
This commit is contained in:
Sizhe Zhao
2025-03-27 00:58:32 +08:00
parent 21dac7513c
commit ad09164d0c
3 changed files with 18 additions and 6 deletions
+17
View File
@@ -0,0 +1,17 @@
---
name: unsafeGetAttrPos
args: [s, attrset]
---
`unsafeGetAttrPos` returns the position of the original definition (possibly
before operations like set merges) of the attribute named *s* from *attrset*.
If the position couldn't be determined (for example the set was produced by
builtin functions like `mapAttrs`), `null` will be returned instead, otherwise
a attrset will be returned, and it has the following attributes:
- `file` (string)
- `line` (number)
- `column` (number)
This is unsafe because it allows us to distinguish sets that compare equal but
are defined at different locations.
+1
View File
@@ -147,6 +147,7 @@ builtin_definitions = files(
'builtins/tryEval.md',
'builtins/typeOf.md',
'builtins/unsafeDiscardOutputDependency.md',
'builtins/unsafeGetAttrPos.md',
'builtins/zipAttrsWith.md',
# keep-sorted end
)
-6
View File
@@ -1721,12 +1721,6 @@ static void prim_unsafeGetAttrPos(EvalState & state, const PosIdx pos, Value * *
state.mkPos(v, i->pos);
}
static RegisterPrimOp primop_unsafeGetAttrPos(PrimOp {
.name = "__unsafeGetAttrPos",
.arity = 2,
.fun = prim_unsafeGetAttrPos,
});
// access to exact position information (ie, line and colum numbers) is deferred
// due to the cost associated with calculating that information and how rarely
// it is used in practice. this is achieved by creating thunks to otherwise