Sakura Lang

V2004 unknown_field

The record type has no field with this name, or a record literal is missing required fields or names an extra one.

An error from the type phase. sakura explain V2004 prints this explanation offline.

The record type has no field with this name, or a record literal is missing required fields or names an extra one. Check the type's declaration for the field names; a record literal must list every field (or start from another value with { ..r, field: v }).

Wrong:

type Point = { x: Int, y: Int }
fn depth(p: Point) -> Int { p.z }

Fixed:

fn depth(p: Point) -> Int { p.y }

Wrong program

compiler/tests/ui/V2004_unknown_field.sakura, which the compiler's ui suite runs through sakura check:

type Point = { x: Int, y: Int }

fn depth(p: Point) -> Int { p.z }

sakura check --json reports this record (pretty-printed; $DIR is the fixture's directory):

{
  "schema_version": "1.0",
  "kind": "diagnostic",
  "id": "d:049e5bc6e6c7ffa8",
  "code": "V2004",
  "severity": "error",
  "phase": "type",
  "message": "`Point` has no field `z`; its fields are `x`, `y`",
  "snapshot": "sha256:$SNAPSHOT",
  "symbol_id": "main::V2004_unknown_field::depth",
  "spans": [
    {
      "uri": "file://$DIR/V2004_unknown_field.sakura",
      "content_hash": "sha256:26b824edfe6805bb39737d8cbc2a61fa872417ca248585185ad9f0858d8ec9a6",
      "start_byte": 95,
      "end_byte": 98,
      "role": "primary"
    }
  ],
  "related_ids": [],
  "expected": null,
  "actual": null,
  "obligation": null,
  "counterexample": null,
  "explanation_uri": "sakura://explain/V2004",
  "fixes": []
}

Fixed program

compiler/tests/ui/V2004_unknown_field.fixed.sakura, which sakura check accepts with no diagnostics:

type Point = { x: Int, y: Int }

fn depth(p: Point) -> Int { p.y }
Edit on GitHub

On this page