Skip to content

Error doesn't contain help message if panic is used #18

@ArtemkaKun

Description

@ArtemkaKun
type xmlc.XMLNode = unsafe &void

for id in ids {
        mut node := none as ?xmlc.XMLNode

        for potential_node in nodes {
            if get_attribute_value(potential_node, "id") == id {
                node = potential_node
                break
            }
        }

        if node == none {
            panic("No such typedef node with id " + id)
        }
        
        name := get_attribute_value(node, "name") or { panic("Typedef node is corrupted - doesn't have name attribute") }
}
error(E0050): cannot pass `?xmlc.XMLNode` to parameter with `xmlc.XMLNode` type
 --> xml.sp:71:31:35
    |
 71 |       name := get_attribute_value(node, "name") or { panic("Typedef node is corrupted - doesn't have name attribute") }
    |                                   ^^^^ expected: unsafe &void, got: ?xmlc.XMLNode

note: parameter has `xmlc.XMLNode` type
 --> xml.sp:77:24:41
    |
 77 | fn get_attribute_value(node xmlc.XMLNode, attribute_name string) -> ?string {
    |                        ^^^^^^^^^^^^^^^^^ (1) parameter declared here as `xmlc.XMLNode`
type xmlc.XMLNode = unsafe &void

for id in ids {
        mut node := none as ?xmlc.XMLNode

        for potential_node in nodes {
            if get_attribute_value(potential_node, "id") == id {
                node = potential_node
                break
            }
        }

        if node == none {
            eprintln("No such typedef node with id " + id)
            continue                                                                      <-- CONTINUE INSTEAD OF PANIC
        }
        
        name := get_attribute_value(node, "name") or { panic("Typedef node is corrupted - doesn't have name attribute") }
}
error(E0050): cannot pass `?xmlc.XMLNode` to parameter with `xmlc.XMLNode` type
 --> xml.sp:72:31:35
    |
 72 |       name := get_attribute_value(node, "name") or { panic("Typedef node is corrupted - doesn't have name attribute") }
    |                                   ^^^^ expected: unsafe &void, got: ?xmlc.XMLNode

note: parameter has `xmlc.XMLNode` type
 --> xml.sp:78:24:41
    |
 78 | fn get_attribute_value(node xmlc.XMLNode, attribute_name string) -> ?string {
    |                        ^^^^^^^^^^^^^^^^^ (1) parameter declared here as `xmlc.XMLNode`

help: add `.unwrap()` to get value from Option
 --> xml.sp:72:35:35
    |
 72 |       name := get_attribute_value(node.unwrap(), "name") or { panic("Typedef node is corrupted - doesn't have name attribute") }
    |                                       +++++++++ 
help: also you can call `.expect(<msg>)`, propagate none with `?` operator or provide default value
      with `or {}`, learn more about an Option type in https://example.dev/docs/concepts/error-handling

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions