Skip to content

Attribute#ivar_name API is unclear #2109

Open
@amomchilov

Description

@amomchilov

The #ivar_name attribute of each RBS::Members::Attribute* class can return one of 3 things:

# ivar_name will return `nil`, which indicates the default (@a) is inferred
attr_reader a: Integer

# ivar_name will return `:something_else`
attr_reader b(@something_else): String

# ivar_name will return `false`
attr_reader c(): bool

This has a few downsides:

  1. The distinction between nil and false is subtle and non-obvious

  2. Most callers (e.g. a type checker, LSP, etc.) probably care about the instance variable name regardless of whether it was inferred or explicit, and will have to compute it themselves when they get nil.

  3. The RBS type of this field is complex:

    attr_reader ivar_name: Symbol | false | nil

    • This will also makes the C API less clear, since the type has to be some general node type (e.g. rbs_node_t *), rather than specifically a symbol type (rbs_symbol_t * or NULL).

I propose we deprecate this field, and come up with an easier-to-consume alternative.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions